Добрый день.
У меня проблемка с проверкой ЭЦП
Приведу код без обработки ошибок:
LPCTSTR pszContainer = "Test";
LPCTSTR pszProvide = "Crypto-Pro Cryptographic Service Provider";
BYTE *pbBuffer= (BYTE *)"The data that is to be hashed and signed.";
BYTE *pbSignature = NULL;
DWORD dwSigLen = 0;
HCRYPTPROV hProv;
DWORD dwBufferLen = strlen((char *)pbBuffer) + 1;
HCRYPTHASH hHash;
//Создаем ЭЦП
CryptAcquireContext(&hProv, pszContainer, pszProvide, PROV_RSA_SIG, 0);
CryptCreateHash(hProv, CALG_SHA1, 0, 0, &hHash);
CryptHashData(hHash, pbBuffer, dwBufferLen, 0);
CryptSignHash(hHash, AT_SIGNATURE, NULL, 0, NULL, &dwSigLen);
pbSignature = (BYTE *)malloc(dwSigLen);
CryptSignHash(hHash, AT_SIGNATURE, NULL, 0, pbSignature, dwSigLen);
CryptDestroyHash(hHash);
//Проверяем ЭЦП
CryptCreateHash(hProv, CALG_SHA1, 0, 0, &hHash);
CryptHashData(hHash, pbBuffer, dwBufferLen, 0);
CryptGetUserKey(hProv, AT_SIGNATURE,&hKey);
CryptVerifySignature(hHash, pbSignature, dwSigLen, hKey,NULL, 0); //Вот тут проблема - выдается код ошибки NTE_BAD_SIGNATURE
Причем при указании провайдера по умолчанию (pszProvide = NULL и pszContainer = NULL) все работает.
С провайдером Crypto-Pro появляется проблема.
Подскажите где я ошибаюсь?