CryptDecryptAndVerifyMessageSignature-Funktion (wincrypt.h)

Die CryptDecryptAndVerifyMessageSignature-Funktion entschlüsselt eine Nachricht und überprüft deren Signatur.

Syntax

BOOL CryptDecryptAndVerifyMessageSignature(
  [in]                PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
  [in]                PCRYPT_VERIFY_MESSAGE_PARA  pVerifyPara,
  [in]                DWORD                       dwSignerIndex,
  [in]                const BYTE                  *pbEncryptedBlob,
  [in]                DWORD                       cbEncryptedBlob,
  [out, optional]     BYTE                        *pbDecrypted,
  [in, out, optional] DWORD                       *pcbDecrypted,
  [out, optional]     PCCERT_CONTEXT              *ppXchgCert,
  [out, optional]     PCCERT_CONTEXT              *ppSignerCert
);

Parameter

[in] pDecryptPara

Ein Zeiger auf eine CRYPT_DECRYPT_MESSAGE_PARA-Struktur , die Entschlüsselungsparameter enthält.

[in] pVerifyPara

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

[in] dwSignerIndex

Identifiziert einen bestimmten Signierer der Nachricht. Eine Nachricht kann von mehr als einem Signierer signiert werden, und diese Funktion kann mehrmals aufgerufen werden, um diesen Parameter zu ändern, um nach mehreren Signierern zu suchen. Sie ist für den ersten Signierer auf 0 (null) festgelegt. Wenn die Funktion FALSE zurückgibt und GetLastError CRYPT_E_NO_SIGNER zurückgibt, hat der vorherige Aufruf den letzten Signierer der Nachricht empfangen.

[in] pbEncryptedBlob

Ein Zeiger auf die signierte, codierte und verschlüsselte Nachricht, die entschlüsselt und überprüft werden soll.

[in] cbEncryptedBlob

Die Größe der verschlüsselten Nachricht in Bytes.

[out, optional] pbDecrypted

Ein Zeiger auf einen Puffer zum Empfangen der entschlüsselten Nachricht.

Dieser Parameter kann NULL sein, wenn die entschlüsselte Nachricht nicht erforderlich ist oder um die Größe der entschlüsselten Nachricht zu Speicherbelegungszwecken festzulegen. Eine entschlüsselte Nachricht wird nicht zurückgegeben, wenn dieser Parameter NULL ist. Weitere Informationen finden Sie unter Abrufen von Daten mit unbekannter Länge.

[in, out, optional] pcbDecrypted

Ein Zeiger auf ein DWORD , der die Größe des Puffers in Bytes angibt, auf den der parameter pbDecrypted verweist. Wenn die Funktion zurückgibt, enthält sie die Größe der entschlüsselten Nachricht, die in pbDecrypted kopiert wurde.

Hinweis Bei der Verarbeitung der im pbDecrypted-Puffer 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 in pcbDecrypted angegeben ist. Bei der Ausgabe wird die Variable festgelegt, auf die dieser Parameter verweist, um die tatsächliche Größe der in den Puffer kopierten Daten widerzuspiegeln.
 

[out, optional] ppXchgCert

Ein Zeiger auf eine CERT_CONTEXT Struktur des Zertifikats , das dem privaten Austauschschlüssel entspricht, der zum Entschlüsseln der Nachricht erforderlich ist.

[out, optional] ppSignerCert

Ein Zeiger auf eine CERT_CONTEXT Struktur des Zertifikats des Signierers.

Rückgabewert

Wenn die Funktion erfolgreich ist, gibt die Funktion ungleich null (TRUE) zurück.

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

Hinweis Fehler aus den aufgerufenen Funktionen CryptDecryptMessage und CryptVerifyMessageSignature können an diese Funktion weitergegeben werden.
 
Die GetLastError-Funktion gibt den folgenden Fehlercode am häufigsten zurück.
Rückgabecode Beschreibung
ERROR_MORE_DATA
Wenn der vom pbDecrypted-Parameter angegebene Puffer nicht groß genug ist, um die zurückgegebenen Daten zu speichern, legt die Funktion den ERROR_MORE_DATA Code fest und speichert die erforderliche Puffergröße in Bytes in der Variablen, auf die von pcbDecrypted verwiesen wird.

Hinweise

Bei einer erfolgreich entschlüsselten und überprüften Nachricht werden die Zertifikatkontextzeiger aktualisiert, auf die von ppXchgCert und ppSignerCert verwiesen wird. Sie müssen durch Aufrufen von CertFreeCertificateContext freigegeben werden. Wenn die Funktion fehlschlägt, werden sie auf NULL festgelegt.

Legen Sie die Parameter ppXchgCert und ppSignerCert auf NULL fest, um anzugeben, dass der Aufrufer nicht am Exchange-Zertifikat oder am Signaturzertifikatkontext interessiert ist.

Beispiele

Ein Beispiel, das diese Funktion verwendet, finden Sie unter Beispiel-C-Programm: Senden und Empfangen einer signierten und verschlüsselten Nachricht.

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

Weitere Informationen

CryptDecryptMessage

CryptSignAndEncryptMessage

Vereinfachte Nachrichtenfunktionen