// Необходимые действия по инициализации 
криптопровайдера, 
 	 //  получению подписи и подготовке открытого ключа отправителя
	…
/*
 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);

Поделитесь материалом с коллегами и друзьями