CryptMsgCalculateEncodedLength-Funktion (wincrypt.h)

Die CryptMsgCalculateEncodedLength-Funktion berechnet die maximale Anzahl von Bytes, die für eine codierte kryptografische Nachricht benötigt werden, wobei der Nachrichtentyp, die Codierungsparameter und die Gesamtlänge der zu codierenden Daten angegeben werden. Beachten Sie, dass das Ergebnis immer größer oder gleich der tatsächlich benötigten Anzahl von Bytes ist.

Syntax

DWORD CryptMsgCalculateEncodedLength(
  [in]           DWORD      dwMsgEncodingType,
  [in]           DWORD      dwFlags,
  [in]           DWORD      dwMsgType,
  [in]           void const *pvMsgEncodeInfo,
  [in, optional] LPSTR      pszInnerContentObjID,
  [in]           DWORD      cbData
);

Parameter

[in] dwMsgEncodingType

Gibt den verwendeten Codierungstyp an. Es ist immer akzeptabel, sowohl den Zertifikat- als auch den Nachrichtencodierungstyp anzugeben, indem sie mit einem bitweisen OR-Vorgang kombiniert werden, wie im folgenden Beispiel gezeigt:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING

Derzeit definierte Codierungstypen sind:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] dwFlags

Derzeit definierte Flags werden in der folgenden Tabelle angezeigt.

Wert Bedeutung
CMSG_BARE_CONTENT_FLAG
Gibt an, dass die gestreamte Ausgabe keinen äußeren ContentInfo-Wrapper aufweist (gemäß PKCS #7). Dies macht es geeignet, in eine eingeschlossene Nachricht gestreamt zu werden.
CMSG_DETACHED_FLAG
Gibt an, dass für die nachfolgenden Aufrufe von CryptMsgUpdate getrennte Daten bereitgestellt werden.
CMSG_CONTENTS_OCTETS_FLAG
Wird verwendet, um die Größe einer DER-Codierung einer Nachricht zu berechnen, die in einer umhüllten Nachricht geschachtelt werden soll. Dies ist besonders nützlich, wenn Streaming ausgeführt wird.
CMSG_CMS_ENCAPSULATED_CONTENT_FLAG
Innerer Inhalt des Nicht-Datentyps wird in einer OCTET-ZEICHENFOLGE gekapselt. Dieses Flag gilt für signierte und umhüllte Nachrichten.

[in] dwMsgType

Die aktuell definierten Nachrichtentypen sind in der folgenden Tabelle dargestellt.

Wert Bedeutung
CMSG_DATA
Eine Oktettzeichenfolge (BYTE).
CMSG_SIGNED

CMSG_SIGNED_ENCODE_INFO

CMSG_ENVELOPED

CMSG_ENVELOPED_ENCODE_INFO

CMSG_SIGNED_AND_ENVELOPED
Nicht implementiert.
CMSG_HASHED

CMSG_HASHED_ENCODE_INFO

CMSG_ENCRYPTED
Nicht implementiert.

[in] pvMsgEncodeInfo

Ein Zeiger auf die zu codierenden Daten. Der Typ der Daten, auf die verwiesen wird, hängt vom Wert von dwMsgType ab. Ausführliche Informationen finden Sie in der DwMsgType-Tabelle .

[in, optional] pszInnerContentObjID

Beim Aufrufen von CryptMsgCalculateEncodedLength mit bereits codierten Daten für CryptMsgUpdate wird der entsprechende Objektbezeichner in pszInnerContentObjID übergeben. Wenn pszInnerContentObjIDNULL ist, wird davon ausgegangen, dass der innere Inhaltstyp zuvor nicht codiert wurde und als Oktettzeichenfolge codiert ist und dem Typ CMSG_DATA.

Wenn Streaming verwendet wird, muss pszInnerContentObjID entweder NULL oder szOID_RSA_data sein.

Die folgenden Algorithmusobjektbezeichner werden häufig verwendet:

  • szOID_RSA_data
  • szOID_RSA_signedData
  • szOID_RSA_envelopedData
  • szOID_RSA_signEnvData
  • szOID_RSA_digestedData
  • szOID_RSA_encryptedData
  • SPC_INDIRECT_DATA_OBJID
Ein Benutzer kann neue innere Inhaltsnutzung definieren. Der Benutzer muss sicherstellen, dass Absender und Empfänger der Nachricht mit der Semantik übereinstimmen, die dem Objektbezeichner zugeordnet ist.

[in] cbData

Die Größe des Inhalts in Bytes.

Rückgabewert

Gibt die erforderliche Länge für eine codierte kryptografische Nachricht zurück. Diese Länge ist möglicherweise nicht die genaue Länge, aber sie ist nicht kleiner als die erforderliche Länge. Null wird zurückgegeben, wenn die Funktion fehlschlägt.

Verwenden Sie zum Abrufen erweiterter Fehlerinformationen die GetLastError-Funktion . In der folgenden Tabelle sind die am häufigsten zurückgegebenen Fehlercodes aufgeführt.

Rückgabecode Beschreibung
CRYPT_E_INVALID_MSG_TYPE
Ungültiger Nachrichtentyp.
CRYPT_E_UNKNOWN_ALGO
Der kryptografische Algorithmus ist unbekannt.
E_INVALIDARG
Mindestens ein Argument ist ungültig.

Anforderungen

   
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

CryptMsgOpenToEncode

Nachrichtenfunktionen auf niedriger Ebene

Vereinfachte Nachrichtenfunktionen