| ||||
| ||||
Уважаемые Паганини шифрования. Не могли бы вы помочь вот с какой проблеммой. Пишу на дельфи. Версия CryptoPro 2.0 (Build 2049). Расшифровка и проверка подписи выполняется без проблемм, а вот шифрование с подписью работает как-то странно. Иногда через раз иногда реже, но для того, чтобы удачно зашифровать, требуется выполнять какие-то магические пассы. Не подскажете, с чем это может быть связано? Вот код, который я выполняю: pSignPara^.dwMsgEncodingType:= PKCS_7_ASN_ENCODING; pSignPara^.pSigningCert:= aSenderCertContext; pSignPara^.HashAlgorithm.pszObjId:= szOID_CP_GOST_R3411_R3410EL; pSignPara^.HashAlgorithm.Parameters.cbData:= 0; pSignPara^.pvHashAuxInfo:= nil; pSignPara^.cMsgCert:= 0; pSignPara^.rgpMsgCert:= nil; pSignPara^.cAuthAttr:= 0; pSignPara^.dwInnerContentType:= 0; pSignPara^.cMsgCrl:= 0; pSignPara^.cUnauthAttr:= 0; pSignPara^.dwFlags:= 0; pSignPara^.pvHashAuxInfo:= nil; pSignPara^.rgAuthAttr:= nil; pSignPara^.cbSize:= SizeOf(CRYPT_SIGN_MESSAGE_PARA); pEncryptPara^.hCryptProv:= 0; pEncryptPara^.dwMsgEncodingType:= PKCS_7_ASN_ENCODING; pEncryptPara^.ContentEncryptionAlgorithm.pszObjId:= szOID_CP_GOST_28147; pEncryptPara^.dwFlags:= 0; pEncryptPara^.dwInnerContentType:= 0; pEncryptPara^.pvEncryptionAuxInfo:= nil; pEncryptPara^.cbSize:= SizeOf(CRYPT_ENCRYPT_MESSAGE_PARA); AssignFile(f, aInFileName); AssignFile(DestF, aOutFileName); Reset(F); Rewrite(DestF); dwCount:= FileSize(f); GetMem(pbBuffer, dwCount); BlockRead(f, pbBuffer^, dwCount); CryptSignAndEncryptMessage(pSignPara, pEncryptPara, 1, @aRecipientCertContext, pbBuffer, dwCount, nil, dwEncryptedCount); GetMem(pbEncryptedBuffer, dwEncryptedCount); if CryptSignAndEncryptMessage(pSignPara, pEncryptPara, 1, @aRecipientCertContext, pbBuffer, dwCount, pbEncryptedBuffer, dwEncryptedCount) then begin result:= true; BlockWrite(DestF, pbEncryptedBuffer^, dwEncryptedCount); end; Разумеется, память под структуры pSignPara и pEncryptPara выделяю, и т.д. Да это и не вызывает особых сомнений, поскольку функция выполняется!!! только не всегда :-). GetLastError выдает следующее: "Внутренняя ошибка" Спасибо за помощь. |