Добрый день!
У меня проблема с определением размера подписи.
Приведу код без обработки ошибок:
HCRYPTPROV hProv;
LPCTSTR pszContainer = _T("2008.06.26");
BYTE *pbBuffer= (BYTE *)"The data that is to be hashed and signed.";
DWORD dwBufferLen = (DWORD)(strlen((char *)pbBuffer)+1);
HCRYPTHASH hHash;
HCRYPTKEY hKey;
HCRYPTKEY hPubKey;
BYTE *pbKeyBlob;
BYTE *pbSignature;
DWORD dwSigLen;
DWORD dwBlobLen;
BYTE *pbHash;
DWORD cbHash;
FILE *signature;
LPTSTR szDescription = NULL;
CryptAcquireContext(&hProv, pszContainer, NULL, 75, 0);
CryptGetUserKey(hProv, AT_KEYEXCHANGE, &hKey);
CryptExportKey(hKey, 0, PUBLICKEYBLOB, 0, NULL, &dwBlobLen);
pbKeyBlob = (BYTE*)malloc(dwBlobLen);
CryptExportKey(hKey, 0, PUBLICKEYBLOB, 0, pbKeyBlob, &dwBlobLen);
CryptCreateHash(hProv, CALG_GR3411, 0, 0, &hHash);
CryptGetHashParam(hHash, HP_OID, NULL, &cbHash, 0);
pbHash = (BYTE*)malloc(cbHash);
CryptGetHashParam(hHash, HP_OID, pbHash, &cbHash, 0);
CryptHashData(hHash, pbBuffer, dwBufferLen, 0);
dwSigLen= 0;
CryptSignHash(hHash, AT_KEYEXCHANGE, szDescription, 0, NULL, &dwSigLen); // Ошибка 80090016
pbSignature = (BYTE *)malloc(dwSigLen);
CryptSignHash(hHash, AT_SIGNATURE, szDescription, 0, pbSignature, &dwSigLen);
Почему при вызове функции CryptSignHash возникает ошибка 80090016?