CryptVerifySignatureA-Funktion (wincrypt.h)

Wichtig Diese API ist veraltet. Neue und vorhandene Software sollte mit der Verwendung von Kryptografie-APIs der nächsten Generation beginnen. Microsoft kann diese API in zukünftigen Versionen entfernen.
 
Die CryptVerifySignature-Funktion überprüft die Signatur eines Hashobjekts.

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.

Nach Abschluss von CryptVerifySignature kann nur CryptDestroyHash mit dem 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 für das zu überprüfende Hashobjekt.

[in] pbSignature

Die Adresse der zu überprüfenden Signaturdaten.

[in] dwSigLen

Die Anzahl der Bytes in den PbSignature-Signaturdaten .

[in] hPubKey

Ein Handle für den öffentlichen Schlüssel , der zum Authentifizieren der Signatur verwendet werden soll. Dieser öffentliche Schlüssel muss zu dem Schlüsselpaar gehören, das ursprünglich zum Erstellen der digitalen Signatur verwendet 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-Basis-Kryptografieanbieter unterstützt.

[in] dwFlags

Die folgenden Flagwerte werden definiert.

Wert Bedeutung
CRYPT_NOHASHOID
0x00000001
Dieses Flag wird mit RSA-Anbietern verwendet. Beim Überprüfen der Signatur wird nicht erwartet, dass der Hashobjektbezeichner (Hash Object Identifier , OID) vorhanden oder überprüft ist. Wenn dieses Flag nicht festgelegt ist, wird die Hash-OID in der Standardsignatur wie in der Definition von DigestInfo in PKCS #7 angegeben überprüft.
CRYPT_TYPE2_FORMAT
0x00000002
Dieses Flag wird nicht verwendet.
CRYPT_X931_FORMAT
0x00000004
Verwenden Sie 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 GetLastError auf, um erweiterte Fehlerinformationen zu erhalten.

Die von "NTE" vorangestellten Fehlercodes werden von dem jeweiligen CSP generiert, den Sie verwenden. Es folgen einige mögliche Fehlercodes.

Rückgabecode Beschreibung
ERROR_INVALID_HANDLE
Einer der Parameter gibt ein ungültiges Handle an.
ERROR_INVALID_PARAMETER
Einer der Parameter enthält einen ungültigen Wert. Dies ist in den meisten Fällen ein ungültiger Zeiger.
NTE_BAD_FLAGS
Der dwFlags-Parameter ist ungleich null.
NTE_BAD_HASH
Das vom hHash-Parameter angegebene Hashobjekt ist ungültig.
NTE_BAD_KEY
Der hPubKey-Parameter enthält kein Handle für einen gültigen öffentlichen Schlüssel.
NTE_BAD_SIGNATURE
Die Signatur war ungültig. Dies kann darauf zurückzuführen sein, dass sich die Daten selbst geändert haben, die Beschreibungszeichenfolge nicht übereinstimmt oder der falsche öffentliche Schlüssel von hPubKey angegeben wurde.

Dieser Fehler kann auch zurückgegeben werden, wenn die Hashing- oder Signaturalgorithmen nicht mit denen übereinstimmen, die zum Erstellen der Signatur verwendet wurden.

NTE_BAD_UID
Der CSP-Kontext ( Kryptografiedienstanbieter ), der beim Erstellen des Hashobjekts angegeben wurde, kann nicht gefunden werden.
NTE_NO_MEMORY
Während des Vorgangs war für den CSP der Arbeitsspeicher nicht mehr vorhanden.

Hinweise

Die CryptVerifySignature-Funktion schließt den Hash ab. Nach diesem Aufruf können dem Hash keine weiteren Daten hinzugefügt werden. Zusätzliche Aufrufe von CryptHashData oder CryptHashSessionKey schlagen fehl. Nachdem die Anwendung mit dem Hash abgeschlossen ist, 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 gibt NTE_BAD_SIGNATURE zurück. Dies ist auf die unterschiedlichen Bytereihenfolgen zwischen der nativen Win32-API und der .NET Framework-API zurückzuführen.

Die native Kryptografie-API verwendet die Little-Endian-Bytereihenfolge, während die .NET Framework-API die Big-Endian-Bytereihenfolge verwendet. Wenn Sie eine mit einer .NET Framework-API generierte Signatur überprüfen, 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.

Hinweis

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
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile wincrypt.h
Bibliothek Advapi32.lib
DLL Advapi32.dll

Weitere Informationen

CryptCreateHash

CryptDestroyHash

CryptHashData

CryptHashSessionKey

CryptSignHash

Hash- und digitale Signaturfunktionen