Share via


CryptSignAndEncodeCertificate-Funktion (wincrypt.h)

Die CryptSignAndEncodeCertificate-Funktion codiert und signiert ein Zertifikat, eine Zertifikatsperrliste (Certificate Revocation List , CRL), eine Zertifikatvertrauensliste (Certificate Trust List , CTL) oder eine Zertifikatanforderung.

Diese Funktion führt die folgenden Vorgänge aus:

  • Ruft CryptEncodeObject mithilfe von lpszStructType auf, um die "zu signierten" Informationen zu codieren.
  • Ruft CryptSignCertificate auf, um diese codierten Informationen zu signieren.
  • Ruft CryptEncodeObject erneut auf, wobei lpszStructType auf X509_CERT festgelegt ist, um die resultierenden signierten, codierten Informationen weiter zu codieren.

Syntax

BOOL CryptSignAndEncodeCertificate(
  [in]      BCRYPT_KEY_HANDLE           hBCryptKey,
  [in]      DWORD                       dwKeySpec,
  [in]      DWORD                       dwCertEncodingType,
  [in]      LPCSTR                      lpszStructType,
  [in]      const void                  *pvStructInfo,
  [in]      PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
  [in]      const void                  *pvHashAuxInfo,
  [out]     BYTE                        *pbEncoded,
  [in, out] DWORD                       *pcbEncoded
);

Parameter

[in] hBCryptKey

Ein Handle des Kryptografiedienstanbieters (CSP ) für die Signatur. Bei diesem Handle handelt es sich um ein HCRYPTPROV-Handle , das mit der CryptAcquireContext-Funktion oder einem NCRYPT_KEY_HANDLE Handle erstellt wurde, das mithilfe der NCryptOpenKey-Funktion erstellt wurde. Neue Anwendungen sollten immer ein NCRYPT_KEY_HANDLE Handle eines CNG-CSP übergeben.

[in] dwKeySpec

Gibt den privaten Schlüssel an, der aus dem Container des Anbieters verwendet werden soll. Dies muss einer der folgenden Werte sein. Dieser Parameter wird ignoriert, wenn im Parameter hCryptProvOrNCryptKey ein CNG-Schlüssel übergeben wird.

Wert Bedeutung
AT_KEYEXCHANGE
Verwenden Sie den Schlüsselaustauschschlüssel.
AT_SIGNATURE
Verwenden Sie den Schlüssel für die digitale Signatur.

[in] dwCertEncodingType

Gibt den verwendeten Codierungstyp an. Dies kann der folgende Wert sein.

Wert Bedeutung
X509_ASN_ENCODING
Gibt die X.509-Zertifikatcodierung an.

[in] lpszStructType

Ein Zeiger auf eine NULL-endende ANSI-Zeichenfolge, die den Typ der zu codierenden und signierten Daten enthält. Die folgenden vordefinierten lpszStructType-Konstanten werden mit Codierungsvorgängen verwendet.

Wert Bedeutung
X509_CERT_CRL_TO_BE_SIGNED
pvStructInfo ist die Adresse einer CRL_INFO-Struktur .
X509_CERT_REQUEST_TO_BE_SIGNED
pvStructInfo ist die Adresse einer CERT_REQUEST_INFO-Struktur .
X509_CERT_TO_BE_SIGNED
pvStructInfo ist die Adresse einer CERT_INFO-Struktur .
X509_KEYGEN_REQUEST_TO_BE_SIGNED
pvStructInfo ist die Adresse einer CERT_KEYGEN_REQUEST_INFO-Struktur .

[in] pvStructInfo

Die Adresse einer Struktur, die die zu signierten und codierten Daten enthält. Das Format dieser Struktur wird durch den lpszStructType-Parameter bestimmt.

[in] pSignatureAlgorithm

Ein Zeiger auf eine CRYPT_ALGORITHM_IDENTIFIER Struktur, die den Objektbezeichner (OID) des Signaturalgorithmus und alle zusätzlichen erforderlichen Parameter enthält. Diese Funktion verwendet die folgenden Algorithmus-OIDs:

  • szOID_RSA_MD5RSA
  • szOID_RSA_SHA1RSA
  • szOID_X957_SHA1DSA
Wenn der Signaturalgorithmus ein Hashalgorithmus ist, enthält die Signatur nur die unverschlüsselten Hashoktette. Ein privater Schlüssel wird nicht verwendet, um den Hash zu verschlüsseln. dwKeySpec wird nicht verwendet, und hCryptProvOrNCryptKey kann NULL sein, wenn ein entsprechender Standard-CSP für hashing verwendet werden kann.

[in] pvHashAuxInfo

Reserviert. Muss NULL sein.

[out] pbEncoded

Ein Zeiger auf einen Puffer zum Empfangen der signierten und codierten Ausgabe.

Dieser Parameter kann NULL sein, um die Größe dieser Informationen für die Speicherbelegung festzulegen. Weitere Informationen finden Sie unter Abrufen von Daten mit unbekannter Länge.

[in, out] pcbEncoded

Ein Zeiger auf ein DWORD , das die Größe des Puffers in Bytes enthält, auf den der pbEncoded-Parameter verweist. Wenn die Funktion zurückgibt, enthält das DWORD die Anzahl der im Puffer gespeicherten oder zu speichernden Bytes.

Hinweis Bei der Verarbeitung der im 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 als die Größe des bei der Eingabe angegebenen Puffers sein. (Bei der Eingabe werden Puffergrößen in der Regel 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.
 

Rückgabewert

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

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

Hinweis Fehler aus den aufgerufenen Funktionen CryptCreateHash, CryptSignHash und CryptHashData können an diese Funktion weitergegeben werden.
 
Mögliche Fehlercodes sind u. a. die folgenden:
Rückgabecode Beschreibung
ERROR_MORE_DATA
Wenn der vom pbEncoded-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 Byte in der Variablen, auf die von pcbEncoded verwiesen wird.
ERROR_FILE_NOT_FOUND
Ungültiger Zertifikatcodierungstyp. Derzeit wird nur X509_ASN_ENCODING unterstützt.
NTE_BAD_ALGID
Die OID des Signaturalgorithmus wird keinem bekannten oder unterstützten Hashalgorithmus zugeordnet.
CRYPT_E_BAD_ENCODE
Fehler beim Codieren oder Decodieren. Die wahrscheinlichste Ursache für diesen Fehler ist die falsche Initialisierung der Felder in der Struktur, auf die von pvStructInfo verwiesen wird.
 

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-Rückgabewerte für Codierung/Decodierung.

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

CryptSignCertificate

Datenverwaltung-Funktionen