|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
CryptVerifySignature
[New - Windows NT]
[New - Windows 95, OEM Service Release 2] The CryptVerifySignature function is used to verify a signature against a hash object. Before calling this function, the CryptCreateHash function must be called to get a handle to a hash object. The CryptHashData and/or CryptHashSessionKey functions are then used to add the data and/or session keys to the hash object. Once this function has been completed, the only hash function that can be called using the hHash handle is the CryptDestroyHash function.
BOOL CRYPTFUNC CryptVerifySignature(
HCRYPTHASH hHash, BYTE *pbSignature, DWORD dwSigLen, HCRYPTKEY hPubKey, LPCTSTR sDescription, DWORD dwFlags );
Parameters
hHash
[in] A handle to the hash object to verify against.
pbSignature
[in] The address of the signature data to be verified.
dwSigLen
[in] The number of bytes in the pbSignature signature data.
hPubKey
[in] A handle to the public key to use to authenticate the signature. This public key must belong to the key pair that was originally used to create the digital signature.
sDescription
[in] String describing the signed data. This must be exactly the same string that was passed in to the CryptSignHash function when the signature was created. If this string does not match, the signature verification will fail. When this function is called, some CSPs (not the Microsoft RSA Base Provider) will display this description string to the user, together with an indication of whether the signature verified correctly. This provides the user with the verification results in a way that is completely independent of the application.
dwFlags
[in] The flag values. This parameter is reserved for future use and should always be zero.
Return Values
If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To retrieve extended error information, use the GetLastError function. The following table lists the error codes most commonly returned by the GetLastError function. The error codes prefaced by "NTE" are generated by the particular CSP you are using.
Description ERROR_INVALID_HANDLE One of the parameters specifies an invalid handle. ERROR_INVALID_PARAMETER One of the parameters contains an invalid value. This is most often an illegal pointer. NTE_BAD_FLAGS The dwFlags parameter is nonzero. NTE_BAD_HASH The hash object specified by the hHash parameter is invalid. NTE_BAD_KEY The hPubKey parameter does not contain a handle to a valid public key. NTE_BAD_SIGNATURE The signature failed to verify. This could be because the data itself has changed, the description string did not match, or the wrong public key was specified by hPubKey.This error can also be returned if the hashing or signature algorithms do not match the ones used to create the signature. NTE_BAD_UID The CSP context that was specified when the hash object was created cannot be found. NTE_NO_MEMORY The CSP ran out of memory during the operation.
Example
#include HCRYPTPROV hProv = 0; #define BUFFER_SIZE 256 BYTE pbBuffer[BUFFER_SIZE]; HCRYPTHASH hHash = 0; HCRYPTKEY hPubKey = 0; BYTE *pbSignature = NULL; DWORD dwSigLen; LPTSTR szDescription = NULL;
// Get handle to the default provider. if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) { printf("Error %x during CryptAcquireContext!\n", GetLastError()); goto done; }
// Load 'pbBuffer' with 'BUFFER_SIZE' bytes of test data. This must
// be the same data that was originally signed. ... // Point 'pbSignature' at the signature created by a previous call // to CryptSignHash. Set 'dwSigLen' to the number of bytes in the // signature. ... // Point 'szDescription' at some text describing the data being // signed. This must be the same description text that was originally // passed to CryptSignHash. ... // Get public key of the user that created the digital signature // and import it into the CSP using CryptImportKey. This will return
// a handle to the public key in 'hPubKey'. ... // Create hash object. if(!CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash)) { printf("Error %x during CryptCreateHash!\n", GetLastError()); goto done; }
// Hash buffer. if(!CryptHashData(hHash, pbBuffer, BUFFER_SIZE, 0)) { printf("Error %x during CryptHashData!\n", GetLastError()); goto done; }
// Validate digital signature. if(!CryptVerifySignature(hHash, pbSignature, dwSigLen, hPubKey, szDescription, 0)) {
if(GetLastError() == NTE_BAD_SIGNATURE) { printf("Signature failed to validate!\n"); } else { printf("Error %x during CryptSignHash!\n", GetLastError()); } } else { printf("Signature validated OK\n"); } done: ...
// Release public key. if(hPubKey != 0) CryptDestroyKey(hPubKey);
// Destroy hash object. if(hHash != 0) CryptDestroyHash(hHash);
// Release provider handle. if(hProv != 0) CryptReleaseContext(hProv, 0);
See Also
CryptCreateHash, CryptDestroyHash, CryptHashData, CryptHashSessionKey, CryptSignHash
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
CryptVerifySignature
[Новый - Windows NT]
[Новый - Окно 95, Выпуск Услуги OEM 2] Функция CryptVerifySignature использована, чтобы проверять сигнатуру против объекта хэша. Перед вызовом этой функции, функция CryptCreateHash должна быть названа, чтобы получать ручку на объект хэша. CryptHashData И/или функции CryptHashSessionKey - затем использованное, чтобы добавлять данные и/или сеансовые клавиши на объект хэша. Как только эта функция завершена, единственная функция хэша, которая может быть названа используя ручку hHash является функцией CryptDestroyHash.
BOOL CRYPTFUNC CryptVerifySignature(
HCRYPTHASH hHash, BYTE *pbSignature, DWORD dwSigLen, HCRYPTKEY hPubKey, LPCTSTR sDescription, DWORD dwFlags );
Параметры
hHash
[in] ручка на объект хэша против проверять против.
pbSignature
[in] адрес данных сигнатуры, которая нужно проверяться.
dwSigLen
[in] количество байтов в данных сигнатуры pbSignature.
hPubKey
[in] ручка на общественную клавишу, чтобы использоваться, чтобы удостоверять сигнатуру. Эта общественная клавиша должна принадлежать ключевой паре, которая первоначально была использована, чтобы создавать цифровую подпись.
sDescription
[in] Строка, описывающая подписанные данные. Это должно быть точно той же строкой, которая была пройдена в в функцию CryptSignHash когда сигнатура была создана. Если эта строка не сочетается, проверка сигнатуры потерпит неудачу. Когда эта функция названа, некоторые CSPs (не Базовый Поставщик Микрософт RSA), отобразит это описание строки пользователю, вместе с указанием проверялась сигнатура правильно. Это обеспечивает пользователя результатами проверки в пути, который полностью независимый приложения.
dwFlags
[in] величины флага. Этот параметр зарезервирован для будущего использования и должно всегда - нулевым.
Обратные Величины
Если функция добивается успеха, обратная величина ненулевая. Если функция терпит неудачу, обратная величина нулевая. Для того, чтобы извлекать расширенную информацию ошибки, используйте функцию GetLastError. Следующая таблица включает коды наиболее общей ошибки возвращанные функцией GetLastError. Ошибка кодирует prefaced "NTE" сгенерированы конкретным CSP, которое Вы используете.
Описание ERROR_INVALID_HANDLE Один из параметров определяет неправильную ручку. ERROR_INVALID_PARAMETER Один из параметров содержит неправильную величину. Это - чаще всего незаконный указатель. NTE_BAD_FLAGS параметр dwFlags ненулевой. NTE_BAD_HASH объект хэша определенный параметром hHash недействителен. NTE_BAD_KEY параметр hPubKey не содержит ручку на правильную общественную клавишу. NTE_BAD_SIGNATURE сигнатура потерпевшая неудачу, чтобы проверять. Это могло быть поскольку сами данные изменились, описание строки не сочеталось, или неправильная общественная клавиша была определена hPubKey.Эта ошибка может также возвращана если хэш или алгоритмы сигнатуры не соответствуют те использованное, чтобы создавать сигнатуру. NTE_BAD_UID контекст CSP, который был определен когда объект хэша был создан, не мочь быть обнаружено. NTE_NO_MEMORY CSP испытывает недостаток памяти в течение операции.
Пример
#include HCRYPTPROV hProv = 0; #define BUFFER_SIZE 256 BYTE pbBuffer[BUFFER_SIZE]; HCRYPTHASH hHash = 0; HCRYPTKEY hPubKey = 0; БАЙТ *pbSignature = НЕДЕЙСТВИТЕЛЬНЫЙ; DWORD dwSigLen; LPTSTR szDescription = НЕДЕЙСТВИТЕЛЬНЫЙ;
// Получите ручку по умолчанию поставщику. если(!CryptAcquireContext(&hProv, НЕДЕЙСТВИТЕЛЬНЫЙ, НЕДЕЙСТВИТЕЛЬНЫЙ, PROV_RSA_FULL, 0)) { printf("Error %x в течение CryptAcquireContext!\n", GetLastError()); goto сделанным; }
// Загрузка 'pbBuffer с 'байтами BUFFER_SIZE данных теста. Это должно
// быть теми же данными, которые первоначально были подписаны. ... // Точка 'pbSignature в сигнатуре создавалась предшествующим вызовом // на CryptSignHash. Установите 'dwSigLen в количество байтов в // сигнатуре. ... // Точка 'szDescription в некотором тексте, описывающая данные // подписывалась. Это должно быть тем же описанием текста, которое было первоначально // пройденное на CryptSignHash. ... // Получите общественную клавишу пользователя, который создавал цифровую подпись // и импортируйте это в CSP, использовавший CryptImportKey. Это возвращается
// a ручка на общественную клавишу в 'hPubKey. ... // Создайте объект хэша. если(!CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash)) { printf("Error %x В ТЕЧЕНИЕ CryptCreateHash!\n", GetLastError()); goto сделанным; }
// Буфер Хэша. если(!CryptHashData(hHash, pbBuffer, BUFFER_SIZE, 0)) { printf("Error %x В ТЕЧЕНИЕ CryptHashData!\n", GetLastError()); goto сделанным; }
// Подтвердите цифровую подпись. если(!CryptVerifySignature(hHash, pbSignature, dwSigLen, hPubKey, szDescription, 0)) {
если(GetLastError() == NTE_BAD_SIGNATURE) { printf("Signature потерпевший неудачу на validate!\n"); } еще { printf("Error %x в течение CryptSignHash!\n", GetLastError()); } } еще { printf("Signature подтвердивший OK\n"); } сделанным: ...
// Общественная клавиша Версии. если(hPubKey != 0) CryptDestroyKey(hPubKey);
// Уничтожьте объект хэша. если(hHash != 0) CryptDestroyHash(hHash);
// Ручка поставщика Версии. если(hProv != 0) CryptReleaseContext(hProv, 0);
Смотри Также
CryptCreateHash, CryptDestroyHash, CryptHashData, CryptHashSessionKey, CryptSignHash
|
|
|
|
| |