// Необходимые действия по инициализации
криптопровайдера,
// получению подписи и подготовке открытого ключа отправителя
…
/*
BYTE * pbData - указатель на буфер с данными
DWORD dwDataLen - длина исходных данных
BYTE * pbSignature - указатель на буфер с подписью
DWORD dwSigLen - длина подписи
ALG_ID alg_id - алгоритм получения хеш-данных
HCRYPTKEY hSigSenderKey - дескриптор открытого ключа
отправителя из ключевой пары для подписи
*/
HCRYPTHASH hHash = 0;
CryptCreateHash(hProv, alg_id, 0 , 0, &hHash));
CryptHashData(hHash, pbData, dwDataLen,0);
if ( ! CryptVerifySignature(hHash, pbSignature, dwSigLen,
hSigSenderKey, 0, 0) )
{
if (GetLastError() == NTE_BAD_IGNATURE)
{
// неверная подпись
}
else
{
// другая ошибка
}
}
CryptDestroyHash(hHash);