| ||||
| ||||
Подскажите, что я делаю неправильно? Вот полностью код после получения pCertContext: const CERT_ENCODING_TYPE = X509_ASN_ENCODING or PKCS_7_ASN_ENCODING; var pCertContext: PCCERT_CONTEXT; SignPara: CRYPT_SIGN_MESSAGE_PARA; EncryptPara: CRYPT_ENCRYPT_MESSAGE_PARA; pbSignedAndEncryptedBlob: PBYTE; dwKeySpec: DWORD; hCryptProv: HCRYPTPROV; bToBeSignedAndEncrypted: array[0..1] of BYTE; cbToBeSignedAndEncrypted: DWORD; cbSignedAndEncryptedBlob: DWORD; begin CryptAcquireCertificatePrivateKey( pCertContext, 0, nil, @hCryptProv, @dwKeySpec, nil); FillChar(SignPara, SizeOf(CRYPT_SIGN_MESSAGE_PARA), 0); SignPara.cbSize := SizeOf(CRYPT_SIGN_MESSAGE_PARA); SignPara.dwMsgEncodingType := CERT_ENCODING_TYPE; SignPara.pSigningCert := pCertContext; SignPara.HashAlgorithm.pszObjId := szOID_RSA_MD2; SignPara.cMsgCert := 1; SignPara.rgpMsgCert := @pCertContext; FillChar(EncryptPara, SizeOf(CRYPT_SIGN_MESSAGE_PARA), 0); EncryptPara.cbSize := SizeOf(CRYPT_ENCRYPT_MESSAGE_PARA); EncryptPara.dwMsgEncodingType := CERT_ENCODING_TYPE; EncryptPara.ContentEncryptionAlgorithm.pszObjId := szOID_RSA_RC4; EncryptPara.ContentEncryptionAlgorithm.Parameters.cbData := 0; EncryptPara.pvEncryptionAuxInfo := nil; EncryptPara.dwFlags := 0; EncryptPara.dwInnerContentType := 0; cbToBeSignedAndEncrypted := 1; bToBeSignedAndEncrypted[0] := 33; bToBeSignedAndEncrypted[1] := 44; cbSignedAndEncryptedBlob := 0; pbSignedAndEncryptedBlob := nil; CryptSignAndEncryptMessage( @SignPara, @EncryptPara, 1, pCertContext, @bToBeSignedAndEncrypted, cbToBeSignedAndEncrypted, nil, @cbSignedAndEncryptedBlob); ... На этом вызове и вылетает. |