CryptVerifySignatureA-Funktion (wincrypt.h)
Vor dem Aufrufen dieser Funktion muss CryptCreateHash aufgerufen werden, um das Handle eines Hashobjekts zu erstellen. CryptHashData oder CryptHashSessionKey wird dann verwendet, um dem Hashobjekt Daten oder Sitzungsschlüssel hinzuzufügen.
Nachdem CryptVerifySignature abgeschlossen abgeschlossen ist, können nur CryptDestroyHash- mithilfe des hHash Handle aufgerufen werden.
Syntax
BOOL CryptVerifySignatureA(
[in] HCRYPTHASH hHash,
[in] const BYTE *pbSignature,
[in] DWORD dwSigLen,
[in] HCRYPTKEY hPubKey,
[in] LPCSTR szDescription,
[in] DWORD dwFlags
);
Parameter
[in] hHash
Ein Handle zum Überprüfen des Hashobjekts.
[in] pbSignature
Die Adresse der zu überprüfenden Signaturdaten.
[in] dwSigLen
Die Anzahl der Bytes in der pbSignature Signaturdaten.
[in] hPubKey
Ein Handle für den öffentlichen Schlüssel, mit dem die Signatur authentifiziert werden soll. Dieser öffentliche Schlüssel muss zum Schlüsselpaar gehören, das ursprünglich zum Erstellen der digitalen Signaturverwendet wurde.
[in] szDescription
Dieser Parameter sollte nicht mehr verwendet werden und muss auf NULL- festgelegt werden, um Sicherheitsrisiken zu verhindern. Es wird jedoch weiterhin aus Gründen der Abwärtskompatibilität im Microsoft Base-Kryptografieanbieter unterstützt.
[in] dwFlags
Die folgenden Flagwerte werden definiert.
Wert | Bedeutung |
---|---|
|
Dieses Flag wird bei RSA-Anbietern verwendet. Beim Überprüfen der Signatur wird erwartet, dass der Hash Objektbezeichner (OID) nicht vorhanden oder überprüft wird. Wenn dieses Flag nicht festgelegt ist, wird das Hash-OID in der Standardsignatur wie in der Definition von DigestInfo in PKCS #7 angegeben überprüft. |
|
Dieses Kennzeichen wird nicht verwendet. |
|
Verwenden Sie die X.931-Unterstützung für die FIPS 186-2-kompatible Version von RSA (rDSA). |
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert TRUE.
Wenn die Funktion fehlschlägt, ist der Rückgabewert FALSE. Rufen Sie für erweiterte Fehlerinformationen GetLastError-auf.
Die von "NTE" vorangestellten Fehlercodes werden von dem verwendeten CSP generiert. Einige mögliche Fehlercodes folgen.
Rückgabecode | Beschreibung |
---|---|
|
Einer der Parameter gibt ein ungültiges Handle an. |
|
Einer der Parameter enthält einen ungültigen Wert. Dies ist am häufigsten ein ungültiger Zeiger. |
|
Der dwFlags Parameter ist nonzero. |
|
Das vom hHash Parameter angegebene Hashobjekt ist ungültig. |
|
Der hPubKey--Parameter enthält kein Handle für einen gültigen öffentlichen Schlüssel. |
|
Die Signatur war ungültig. Dies kann darauf zurückzuführen sein, dass die Daten selbst geändert wurden, die Beschreibungszeichenfolge nicht übereinstimmte oder der falsche öffentliche Schlüssel von hPubKeyangegeben wurde.
Dieser Fehler kann auch zurückgegeben werden, wenn die Hashing- oder Signaturalgorithmen nicht mit den Signaturalgorithmen übereinstimmen, die zum Erstellen der Signatur verwendet werden. |
|
Der kryptografischen Dienstanbieter Kontext (CSP), der beim Erstellen des Hashobjekts angegeben wurde, kann nicht gefunden werden. |
|
Während des Vorgangs ist der CSP nicht mehr genügend Arbeitsspeicher vorhanden. |
Bemerkungen
Die CryptVerifySignature Funktion schließt den Hash ab. Nach diesem Aufruf können dem Hash keine weiteren Daten hinzugefügt werden. Weitere Aufrufe von CryptHashData oder CryptHashSessionKey fehl. Nachdem die Anwendung mit dem Hash abgeschlossen wurde, sollte CryptDestroyHash aufgerufen werden, um das Hashobjekt zu zerstören.
Wenn Sie eine Signatur mithilfe der .NET Framework-APIs generieren und versuchen, sie mithilfe der CryptVerifySignature--Funktion zu überprüfen, schlägt die Funktion fehl, und GetLastError wird NTE_BAD_SIGNATUREzurückgegeben. Dies liegt an den unterschiedlichen Bytereihenfolgen zwischen der systemeigenen Win32-API und der .NET Framework-API.
Die systemeigene Kryptografie-API verwendet eine kleine endische Bytereihenfolge, während die .NET Framework-API big-endian byte order verwendet. Wenn Sie eine signatur überprüfen, die mit einer .NET Framework-API generiert wird, müssen Sie die Reihenfolge der Signaturbytes austauschen, bevor Sie die CryptVerifySignature--Funktion aufrufen, um die Signatur zu überprüfen.
Beispiele
Ein Beispiel, das die CryptVerifySignature--Funktion verwendet, finden Sie unter Beispiel-C-Programm: Signieren eines Hashs und Überprüfen der Hashsignatur.
Anmerkung
Der wincrypt.h-Header definiert CryptVerifySignature als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows XP [nur Desktop-Apps] |
mindestens unterstützte Server- | Windows Server 2003 [Nur Desktop-Apps] |
Zielplattform- | Fenster |
Header- | wincrypt.h |
Library | Advapi32.lib |
DLL- | Advapi32.dll |