Статус: Новичок
Группы: Участники
Зарегистрирован: 28.09.2018(UTC) Сообщений: 6
Поблагодарили: 4 раз в 2 постах
|
Добрый день! Пытаюсь расшифровать защифрованный ответ от ФСС и кое что не получается. Пишу на питоне. Делаю следующее: 1. CryptAcquireContextA с параметрами PROV_CRYPTOPRO_GOST_2001=75 и CRYPT_SILENT= 0x00000040. Тут же передаю указатель на имя контейнера. Имя такое: 'FAT12\\887F5300\\c7102edc.000\\1AA6\x0043f2ae8c6-f457-6399-b665-fdcd9751934\x00' Код:
# временый хардкод
ivanov_name = b'FAT12\\887F5300\\c7102edc.000\\1AA6\x0043f2ae8c6-f457-6399-b665-fdcd9751934\x00'
lp = cast(ivanov_name, LPCSTR)
success = fCryptAcquireContextA(
byref(self.prov),
lp,
None,
PROV_CRYPTOPRO_GOST_2001,
CRYPT_SILENT
)
2. Вызываю CryptSetProvParam, в который передаю PP_KEYEXCHANGE_PIN и указатель на пароль. Код:
password = (BYTE * 5)(*(b'1234' + bytes([0])))
pbData = cast(password, POINTER(BYTE))
success = fCryptSetProvParam(prov, PP_KEYEXCHANGE_PIN, pbData, 0)
3. Получение дескриптора закрытого ключа Код:
prv = HCRYPTKEY()
success = fCryptGetUserKey(prov, AT_KEYEXCHANGE, byref(prv))
4.Создаю структуру CRYPT_PUBLICKEYBLOB. Размер структуры получился 100 байт. Привожу ее пример(можно посмотреть в asn1-просмотрщике): 06200000232e00004d41473100020000301206072a85030202240006072a850302021e01b0dacce0161dc4d1b05f9e56a0b4c73ea3de689e2d27afad5bead75a62b47f0f6eacc1a0dcf99de30b546ded5dc81515d02930318bdf11e59a5f3d9044243408 5. Получаю ключ согласования импортом открытого эфемерного ключа отправителя на своем закрытом ключе. Код:
kek = HCRYPTKEY()
blob_bytes = bytearray(pubKeyBlob)
length = len(blob_bytes)
public_blob = (BYTE * length)(*blob_bytes)
pblob = cast(byref(public_blob), POINTER(BYTE))
success = fCryptImportKey(prov, pblob, length, prv, 0, byref(kek))
6. На ключ согласования выставляю KP_ALGID Код:
calc = BYTE(CALG_PRO_EXPORT)
pbData = cast(byref(DWORD(CALG_PRO_EXPORT)), POINTER(BYTE))
success = fCryptSetKeyParam(kek, KP_ALGID, pbData, 0)
7. Формирую структуру CRYPT_SIMPLEBLOB. Почему-то она получается размером 72 байта, хотя если вручную подсчитать - то вроде должна быть 69. привожу ее пример: 012000001e660000fd514a371e66000044fe1f0f4be240b5bd035c85aaa42cfcea1f6fc1268395646d02900ea00dba50db81bd3af965e89136bafe8e06072a850302021f01000000 8. пытаюсь получить сессионный ключ и выходит ошибка: [WinError -2146893799] Набор ключей не определен. На всех предыдущих этапах ошибок не возникает. Что я делаю не так? О каком наборе именно ключей идет речь?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close