CryptVerifyMessageSignature-Funktion (wincrypt.h)

Die Funktion CryptVerifyMessageSignature überprüft die Signatur einer signierten Nachricht.

Diese Funktion sollte nicht zum Überprüfen der Signatur einer getrennten Nachricht verwendet werden. Verwenden Sie die Funktion CryptVerifyDetachedMessageSignature , um die Signatur einer getrennten Nachricht zu überprüfen.

Syntax

BOOL CryptVerifyMessageSignature(
  [in]            PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
  [in]            DWORD                      dwSignerIndex,
  [in]            const BYTE                 *pbSignedBlob,
  [in]            DWORD                      cbSignedBlob,
  [out]           BYTE                       *pbDecoded,
  [in, out]       DWORD                      *pcbDecoded,
  [out, optional] PCCERT_CONTEXT             *ppSignerCert
);

Parameter

[in] pVerifyPara

Ein Zeiger auf eine CRYPT_VERIFY_MESSAGE_PARA Struktur, die Überprüfungsparameter enthält.

[in] dwSignerIndex

Der Index der gewünschten Signatur. Es kann mehrere Signaturen geben. CryptVerifyMessageSignature kann wiederholt aufgerufen werden, wobei dwSignerIndex jedes Mal erhöht wird. Legen Sie diesen Parameter für den ersten Signierer auf 0 fest, oder wenn nur ein Signierer vorhanden ist. Wenn die Funktion FALSE und GetLastError CRYPT_E_NO_SIGNER zurückgibt, hat der vorherige Aufruf den letzten Unterzeichner der Nachricht verarbeitet.

[in] pbSignedBlob

Ein Zeiger auf einen Puffer, der die signierte Nachricht enthält.

[in] cbSignedBlob

Die Größe des Signierten Nachrichtenpuffers in Bytes.

[out] pbDecoded

Ein Zeiger auf einen Puffer, um die decodierte Nachricht zu empfangen.

Dieser Parameter kann NULL sein, wenn die decodierte Nachricht nicht für die zusätzliche Verarbeitung oder zum Festlegen der Größe der Nachricht zu Speicherzuweisungszwecken benötigt wird. Weitere Informationen finden Sie unter Abrufen von Daten unbekannter Länge.

[in, out] pcbDecoded

Ein Zeiger auf einen DWORD-Wert , der die Größe des pbDecoded-Puffers in Bytes angibt. Wenn die Funktion zurückgibt, enthält dieses DWORD die Größe der decodierten Nachricht in Bytes. Die decodierte Nachricht wird nicht zurückgegeben, wenn dieser Parameter NULL ist.

Hinweis Bei der Verarbeitung der zurückgegebenen Daten müssen Anwendungen die tatsächliche Größe der zurückgegebenen Daten verwenden. Die tatsächliche Größe kann etwas kleiner sein als die Größe des Puffers, der bei der Eingabe angegeben wird. (Bei der Eingabe werden Puffergrößen normalerweise groß genug angegeben, um sicherzustellen, dass die größtmöglichen Ausgabedaten in den Puffer passen.) Bei der Ausgabe wird die Variable aktualisiert, auf die dieser Parameter verweist, um die tatsächliche Größe der in den Puffer kopierten Daten widerzuspiegeln.
 

[out, optional] ppSignerCert

Die Adresse eines CERT_CONTEXT Strukturzeigers, der das Zertifikat des Unterzeichners empfängt. Wenn Sie die Verwendung dieser Struktur abgeschlossen haben, geben Sie sie frei, indem Sie diesen Zeiger an die CertFreeCertificateContext-Funktion übergeben. Dieser Parameter kann NULL sein, wenn das Zertifikat des Unterzeichners nicht benötigt wird.

Rückgabewert

Wenn die Funktion erfolgreich ist, gibt die Funktion nonzero zurück. Dies bedeutet nicht unbedingt, dass die Signatur überprüft wurde. Im Fall einer getrennten Nachricht enthält die Variable, auf die von pcbDecoded verwiesen wird, null. In diesem Fall gibt diese Funktion nonzero zurück, aber die Signatur wird nicht überprüft. Verwenden Sie die Funktion CryptVerifyDetachedMessageSignature , um die Signatur einer getrennten Nachricht zu überprüfen.

Wenn die Funktion fehlschlägt, gibt sie null zurück. Rufen Sie GetLastError auf, um erweiterte Fehlerinformationen zu erhalten.

In der folgenden Tabelle sind die Fehlercodes aufgeführt, die am häufigsten von der GetLastError-Funktion zurückgegeben werden.

Rückgabecode Beschreibung
ERROR_MORE_DATA
Wenn der vom pbDecoded-Parameter angegebene Puffer nicht groß genug ist, um die zurückgegebenen Daten aufzunehmen, legt die Funktion den ERROR_MORE_DATA Code fest und speichert die erforderliche Puffergröße in Bytes in der Variablen, auf die von pcbDecoded verwiesen wird.
E_INVALIDARG
Ungültige Nachrichten- und Zertifikatcodierungstypen. Derzeit werden nur PKCS_7_ASN_ENCODING und X509_ASN_ENCODING_TYPE unterstützt. Ungültig cbSize in *pVerifyPara.
CRYPT_E_UNEXPECTED_MSG_TYPE
Keine signierte kryptografische Nachricht.
CRYPT_E_NO_SIGNER
Die Nachricht enthält keine Signierer oder einen Signierer für den angegebenen dwSignerIndex.
NTE_BAD_ALGID
Die Nachricht wurde mithilfe eines unbekannten oder nicht unterstützten Algorithmus gehasht und signiert.
NTE_BAD_SIGNATURE
Die Signatur der Nachricht wurde nicht überprüft.
 
Hinweis Fehler aus den aufgerufenen Funktionen CryptCreateHash, CryptHashData, CryptVerifySignature und CryptImportKey können an diese Funktion weitergegeben werden.

Wenn die Funktion fehlschlägt, gibt GetLastError möglicherweise einen ASN.1-Codierungs-/Decodierungsfehler ( Abstract Syntax Notation One ) zurück. Informationen zu diesen Fehlern finden Sie unter ASN.1 Encoding/Decoding Return Values.

 

Hinweise

Für einen überprüften Signierer und eine Nachricht wird ppSignerCert mit dem CERT_CONTEXT des Signierers aktualisiert. Sie muss durch Aufrufen von CertFreeCertificateContext freigegeben werden. Andernfalls ist ppSignerCert auf NULL festgelegt.

Für eine Nachricht, die nur Zertifikate und Zertifikatsperrlisten enthält, ist pcbDecoded auf NULL festgelegt.

Beispiele

Ein Beispiel, das diese Funktion verwendet, finden Sie unter Beispiel C-Programm: Signieren einer Nachricht und Überprüfen einer Nachrichtensignatur.

Anforderungen

   
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 Crypt32.lib
DLL Crypt32.dll

Weitere Informationen

CryptSignMessage

CryptVerifyDetachedMessageSignature

Vereinfachte Nachrichtenfunktionen