CryptMsgVerifyCountersignatureEncodedEx-Funktion (wincrypt.h)

Die Funktion CryptMsgVerifyCountersignatureEncodedEx überprüft, ob der pbSignerInfoCounterSignature-Parameter den verschlüsseltenHash des Felds encryptedDigest der pbSignerInfo-Parameterstruktur enthält. Der Signierer kann eine CERT_PUBLIC_KEY_INFO-Struktur , ein Zertifikatkontext oder ein Kettenkontext sein.

Syntax

BOOL CryptMsgVerifyCountersignatureEncodedEx(
  [in, optional] HCRYPTPROV_LEGACY hCryptProv,
  [in]           DWORD             dwEncodingType,
  [in]           PBYTE             pbSignerInfo,
  [in]           DWORD             cbSignerInfo,
  [in]           PBYTE             pbSignerInfoCountersignature,
  [in]           DWORD             cbSignerInfoCountersignature,
  [in]           DWORD             dwSignerType,
  [in]           void              *pvSigner,
                 DWORD             dwFlags,
                 void              *pvExtra
);

Parameter

[in, optional] hCryptProv

Dieser Parameter wird nicht verwendet und sollte auf NULL festgelegt werden.

Windows Server 2003 und Windows XP: NULL oder das Handle des Kryptografieanbieters , der zum Hashen des Felds encryptedDigest von pbSignerInfo verwendet werden soll. Der Datentyp dieses Parameters ist HCRYPTPROV.

Wenn es keinen starken Grund für die Übergabe eines bestimmten Kryptografieanbieters in hCryptProv gibt, übergeben Sie NULL , um die Verwendung des Standard-RSA- oder DSS-Anbieters zu verursachen.

[in] dwEncodingType

Der verwendete Codierungstyp. Derzeit werden nur X509_ASN_ENCODING und PKCS_7_ASN_ENCODING verwendet. Es können jedoch in Zukunft weitere Codierungstypen hinzugefügt werden. Verwenden Sie für einen der aktuellen Codierungstypen Folgendes:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING.

[in] pbSignerInfo

Ein Zeiger auf das codierte BLOB , das den Signierer des Inhalts einer Nachricht enthält, die gegensigniert werden soll.

[in] cbSignerInfo

Die Anzahl des codierten BLOB in Bytes für den Signierer des Inhalts.

[in] pbSignerInfoCountersignature

Ein Zeiger auf das codierte BLOB, das die Gegenzeicheninformationen enthält.

[in] cbSignerInfoCountersignature

Die Anzahl des codierten BLOB für den Gegenzeichen der Nachricht in Bytes.

[in] dwSignerType

Die Struktur, die die Signiererinformationen enthält. Die folgende Tabelle zeigt die vordefinierten Werte und die angegebenen Strukturen.

Wert Bedeutung
CMSG_VERIFY_SIGNER_PUBKEY
pvSigner ist ein Zeiger auf eine CERT_PUBLIC_KEY_INFO Struktur.
CMSG_VERIFY_SIGNER_CERT
pvSigner ist ein Zeiger auf eine CERT_CONTEXT Struktur.
CMSG_VERIFY_SIGNER_CHAIN
pvSigner ist ein Zeiger auf eine CERT_CHAIN_CONTEXT Struktur.

[in] pvSigner

Ein Zeiger auf eine CERT_PUBLIC_KEY_INFO-Struktur , einen Zertifikatkontext oder einen Kettenkontext, abhängig vom Wert von dwSignerType.

dwFlags

Flags, die das Funktionsverhalten ändern. Dies kann null oder der folgende Wert sein.

Wert Bedeutung
CMSG_VERIFY_COUNTER_SIGN_ENABLE_STRONG_FLAG
0x00000001
Führt nach erfolgreicher Signaturüberprüfung eine starke Signaturprüfung durch. Legen Sie den parameter pvExtra so fest, dass er auf eine CERT_STRONG_SIGN_PARA-Struktur verweist, die die Parameter enthält, die zum Überprüfen der Signaturstärke erforderlich sind..

Windows 8 und Windows Server 2012: Die Unterstützung für dieses Flag beginnt.

pvExtra

Wenn Sie den dwFlags-Parameter auf CMSG_VERIFY_COUNTER_SIGN_ENABLE_STRONG_FLAG festlegen, legen Sie diesen Parameter (pvExtra) so fest, dass er auf eine CERT_STRONG_SIGN_PARA Struktur verweist, die die Parameter enthält, die zum Überprüfen der Signaturstärke verwendet werden.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert nonzero (TRUE).

Wenn die Funktion fehlschlägt, ist der Rückgabewert 0 (FALSE). Rufen Sie GetLastError auf, um erweiterte Fehlerinformationen zu erhalten.

Die folgenden Fehlercodes werden am häufigsten von der GetLastError-Funktion zurückgegeben.

Rückgabecode Beschreibung
CRYPT_E_AUTH_ATTR_MISSING
Die Nachricht enthält kein erwartetes authentifizierte Attribut.
CRYPT_E_HASH_VALUE
Der Hashwert ist nicht korrekt.
CRYPT_E_UNEXPECTED_ENCODING
Die Nachricht ist nicht wie erwartet codiert.
CRYPT_E_UNKNOWN_ALGO
Der kryptografische Algorithmus ist unbekannt.
E_INVALIDARG
Mindestens ein Argument ist ungültig.
E_OUTOFMEMORY
Der Arbeitsspeicher ist nicht mehr vorhanden.
 

Möglicherweise werden weitergegebene Fehler aus den folgenden Funktionen zurückgegeben.

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

Die Überprüfung des Gegensigners erfolgt mithilfe der PKCS #7 SIGNERINFO-Struktur . Die Signatur muss den verschlüsselten Hash des Felds encryptedDigest von pbSignerInfo enthalten.

Der Aussteller und die Seriennummer des Countersigners müssen mit den Gegenzeicheninformationen aus pbSignerInfoCountersignature übereinstimmen. Die einzigen Felder, auf die von pciCountersigner verwiesen wird, sind SerialNumber, Issuer und SubjectPublicKeyInfo. SubjectPublicKeyInfo wird verwendet, um auf den öffentlichen Schlüssel zuzugreifen, der dann verwendet wird, um den Hash aus dem pciCountersigner zu verschlüsseln, um ihn mit dem Hash aus pbSignerInfo zu vergleichen.

Beispiele

Ein Beispiel, das diese Funktion verwendet, finden Sie unter Beispiel C-Programm: Codieren und Decodieren einer CounterSigned-Nachricht.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile wincrypt.h
Bibliothek Crypt32.lib
DLL Crypt32.dll

Weitere Informationen

CryptMsgCountersign

CryptMsgCountersignEncoded

Nachrichtenfunktionen auf niedriger Ebene

Vereinfachte Nachrichtenfunktionen