Re: Работа с функциями библиотеки rtPKCS11ECP
Всё верно. Единственное что проверить это с нашей библиотекой у вас не получится, так как там нет поддержки тестовых параметров подписи (будет ошибка при создании ключа). Но для понимания того как работать с данными в формате big-endian всё же приведу пример:
А.1 Пример 1. для ГОСТ34.10-2012(256)
1. Для импорта открытого ключа, нужно разворачивать координаты, а не весь ключ полностью:
X:7F2B49E270DB6D90D8595BEC458B50C58585BA1D4E9B788F6689DBD8E56FD80B
Y:26F1B489D6701DD185C8413A977B3CBBAF64D1C593D26627DFFB101A87FF77DA
CK_BYTE public_key[] = {
0x0b, 0xd8, 0x6f, 0xe5, 0xd8, 0xdb, 0x89, 0x66, 0x8f, 0x78, 0x9b, 0x4e, 0x1d, 0xba, 0x85, 0x85,
0xc5, 0x50, 0x8b, 0x45, 0xec, 0x5b, 0x59, 0xd8, 0x90, 0x6d, 0xdb, 0x70, 0xe2, 0x49, 0x2b, 0x7f,
0xda, 0x77, 0xff, 0x87, 0x1a, 0x10, 0xfb, 0xdf, 0x27, 0x66, 0xd2, 0x93, 0xc5, 0xd1, 0x64, 0xaf,
0xbb, 0x3c, 0x7b, 0x97, 0x3a, 0x41, 0xc8, 0x85, 0xd1, 0x1d, 0x70, 0xd6, 0x89, 0xb4, 0xf1, 0x26
};
Также значение параметров подписи в атрибутах ключа должно соответствовать тестовым "1.2.643.2.2.35.0"
CK_BYTE gost_3410_test_parameters[] = {
0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x23, 0x00
};
CK_ATTRIBUTE sign_oid_attribute = {
CKA_GOSTR3410_PARAMS, gostR3410params_oid, sizeof(gostR3410params_oid)
};
2. Хеш разворачивается без особенностей
H: 2DFBC1B372D89A1188C09C52E0EEC61FCE52032AB1022E8E67ECE6672B043EE5
CK_BYTE hash[] = {
0xe5, 0x3e, 0x04, 0x2b, 0x67, 0xe6, 0xec, 0x67, 0x8e, 0x2e, 0x02, 0xb1, 0x2a, 0x03, 0x52, 0xce,
0x1f, 0xc6, 0xee, 0xe0, 0x52, 0x9c, 0xc0, 0x88, 0x11, 0x9a, 0xd8, 0x72, 0xb3, 0xc1, 0xfb, 0x2d
};
3. Отдельно разворачиваем двоичные вектора составляющие подпись
r: 41AA28D2F1AB148280CD9ED56FEDA41974053554A42767B83AD043FD39DC0493
s: 1456C64BA4642A1653C235A98A60249BCD6D3F746B631DF928014F6C5BF9C40
CK_BYTE sign[] = {
0x93, 0x04, 0xdc, 0x39, 0xfd, 0x43, 0xd0, 0x3a, 0xb8, 0x67, 0x27, 0xa4, 0x54, 0x35, 0x05, 0x74,
0x19, 0xa4, 0xed, 0x6f, 0xd5, 0x9e, 0xcd, 0x80, 0x82, 0x14, 0xab, 0xf1, 0xd2, 0x28, 0xaa, 0x41,
0x40, 0x9c, 0xbf, 0xc5, 0xf6, 0x14, 0x80, 0x92, 0xdf, 0x31, 0xb6, 0x46, 0xf7, 0xd3, 0xd6, 0xbc,
0x49, 0x02, 0xa6, 0x98, 0x5a, 0x23, 0x3c, 0x65, 0xa1, 0x42, 0x46, 0xba, 0x64, 0x6c, 0x45, 0x01
};
Замечу, что большинство софта использует при работе "little-endian" (в ГОСТ всё же big-endian), при работе с тем же CryptoPro данные видоизменять никак не нужно.