| ||||
| ||||
Добрый день! Не могли бы Вы подсказать, в Крипто ПРО реализованы алгоритмы хеширования CALG_TLS1PRF и CALG_TLS1_MASTER_HASH. У меня при в первом случае на попытке хеширования данных появляется ошибка NTE_BAD_ALGID, во втором случае - при создании объекта функции хеширования. | ||||
Ответы: | ||||
| ||||
Возникает первый вопрос - а зачем Вам эти алгоритмы? Указанные алгоритмы используются для реализации TLS и не являются алгоритмами хэширования в чистом виде. | ||||
| ||||
Необходимо реализовать интерфейс, который бы поддерживал различные крипто провайдеры, поэтому дана задача реализовать максимум из возможностей Крипто Про. | ||||
| ||||
Примерный порядок использования: 1. UniGenKey (hProv, CALG_TLS1_MASTER, CRYPT_EXPORTABLE, &hMasterSecret)); UniCreateHash (hProv, CALG_TLS1PRF, hMasterSecret, 0, &hFinishHash); UniSetHashParam (hProv, hFinishHash, HP_TLS1PRF_LABEL, (PBYTE)&Data1, 0); UniSetHashParam (hProv, hFinishHash, HP_TLS1PRF_SEED, (PBYTE)&Data2, 0); UniGetHashParam (hProv, hFinishHash, HP_HASHVAL, md, &count, 0); 2. CPGenRandom(hContainer,32,X_Buf); CPGenRandom(hContainer,32,Y_Buf); CPGenRandom(hContainer,8,InitVector); CPGenKey(hContainer,CALG_TLS1_MASTER,CRYPT_EXPORTABLE ,&hMasterKey); CPSetKeyParam(hContainer,hMasterKey,KP_CLIENT_RANDOM,X_Buf,0)); CPSetKeyParam(hContainer,hMasterKey,KP_SERVER_RANDOM,Y_Buf,0)); CPSetKeyParam (hContainer,hMasterKey, KP_PREHASH, NULL, 0)); CPCreateHash(hContainer,CALG_TLS1_MASTER_HASH,hMasterKey,0,&hMasterHash); fWrite=1; Server=0; Flags = (Server && !fWrite) || (!Server && fWrite) ? 0 : CRYPT_SERVER; CPDeriveKey(hContainer,CALG_TLS1_ENC_KEY,hMasterHash,Flags,&hCryptKeyCl); CPDeriveKey(hContainer,CALG_TLS1_MAC_KEY,hMasterHash,Flags,&hMACKeyCl); fWrite=0; Server=1; Flags = (Server && !fWrite) || (!Server && fWrite) ? 0 : CRYPT_SERVER; CPDeriveKey(hContainer,CALG_TLS1_ENC_KEY,hMasterHash,Flags,&hCryptKeySr); CPDeriveKey(hContainer,CALG_TLS1_MAC_KEY,hMasterHash,Flags,&hMACKeySr); | ||||
| ||||
Спасибо | ||||