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.
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 |
---|---|
|
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. |
|
Dieses Flag wird nicht verwendet. |
|
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 |
---|---|
|
Einer der Parameter gibt ein ungültiges Handle an. |
|
Einer der Parameter enthält einen ungültigen Wert. Dies ist in den meisten Fällen ein ungültiger Zeiger. |
|
Der dwFlags-Parameter ist ungleich null. |
|
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 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. |
|
Der CSP-Kontext ( Kryptografiedienstanbieter ), der beim Erstellen des Hashobjekts angegeben wurde, kann nicht gefunden werden. |
|
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 |