CryptMsgCalculateEncodedLength 関数 (wincrypt.h)

CryptMsgCalculateEncodedLength 関数は、エンコードするデータのメッセージの種類、エンコード パラメーター、および合計長を指定して、エンコードされた暗号化メッセージに必要な最大バイト数を計算します。 結果は常に、必要な実際のバイト数以上になることに注意してください。

構文

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

パラメーター

[in] dwMsgEncodingType

使用するエンコードの種類を指定します。 次の例に示すように、証明書と メッセージエンコードの両方の種類 をビットごとの OR 操作と組み合わせて指定することは、常に許容されます。

X509_ASN_ENCODING |PKCS_7_ASN_ENCODING

現在定義されているエンコードの種類は次のとおりです。

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] dwFlags

現在定義されているフラグを次の表に示します。

説明
CMSG_BARE_CONTENT_FLAG
ストリーミングされた出力に外部 ContentInfo ラッパー (PKCS #7 で定義) がないことを示します。 これにより、それを囲むメッセージにストリーミングするのに適しています。
CMSG_DETACHED_FLAG
CryptMsgUpdate の後続の呼び出しに対して、デタッチされたデータが提供されていることを示します。
CMSG_CONTENTS_OCTETS_FLAG
エンベロープ されたメッセージ内に入れ子になるメッセージの DER エンコードのサイズを計算するために使用されます。 これは、ストリーミングが実行されている場合に特に便利です。
CMSG_CMS_ENCAPSULATED_CONTENT_FLAG
データ型以外の 内部コンテンツ は、OCTET STRING 内にカプセル化されます。 このフラグは、署名付きメッセージと封筒メッセージの両方に適用されます。

[in] dwMsgType

現在定義されているメッセージの種類を次の表に示します。

説明
CMSG_DATA
オクテット (BYTE) 文字列。
CMSG_SIGNED

CMSG_SIGNED_ENCODE_INFO

CMSG_ENVELOPED

CMSG_ENVELOPED_ENCODE_INFO

CMSG_SIGNED_AND_ENVELOPED
実装されていません。
CMSG_HASHED

CMSG_HASHED_ENCODE_INFO

CMSG_ENCRYPTED
実装されていません。

[in] pvMsgEncodeInfo

エンコードするデータへのポインター。 ポイントされるデータの種類は、 dwMsgType の値によって異なります。 詳細については、 dwMsgType テーブルを参照してください。

[in, optional] pszInnerContentObjID

CryptMsgUpdate に提供されたデータが既にエンコードされている CryptMsgCalculateEncodedLength を呼び出すと、pszInnerContentObjID で適切なオブジェクト識別子が渡されます。 pszInnerContentObjIDNULL の場合、内部コンテンツ タイプは以前にエンコードされていないと見なされ、オクテット文字列としてエンコードされ、型CMSG_DATA指定されます。

ストリーミングが使用されている場合、 pszInnerContentObjIDNULL またはszOID_RSA_dataである必要があります。

次のアルゴリズム オブジェクト識別子が一般的に使用されます。

  • szOID_RSA_data
  • szOID_RSA_signedData
  • szOID_RSA_envelopedData
  • szOID_RSA_signEnvData
  • szOID_RSA_digestedData
  • szOID_RSA_encryptedData
  • SPC_INDIRECT_DATA_OBJID
ユーザーは、新しい 内部コンテンツ の使用を定義できます。 ユーザーは、メッセージの送信者と受信者が、オブジェクト識別子に関連付けられているセマンティクスに同意していることを確認する必要があります。

[in] cbData

コンテンツのサイズ (バイト単位)。

戻り値

エンコードされた暗号化メッセージに必要な長さを返します。 この長さは正確な長さではない可能性がありますが、必要な長さよりも短くはありません。 関数が失敗した場合、0 が返されます。

拡張エラー情報を取得するには、 GetLastError 関数を使用します。 次の表に、最も一般的に返されるエラー コードを示します。

リターン コード 説明
CRYPT_E_INVALID_MSG_TYPE
メッセージ型が無効です。
CRYPT_E_UNKNOWN_ALGO
暗号化アルゴリズムは不明です。
E_INVALIDARG
1 つ以上の引数が無効です。

要件

   
サポートされている最小のクライアント Windows XP [デスクトップ アプリ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー wincrypt.h
Library Crypt32.lib
[DLL] Crypt32.dll

関連項目

CryptMsgOpenToEncode

低レベルのメッセージ関数

簡略化されたメッセージ関数