CryptMsgGetParam 関数 (wincrypt.h)

CryptMsgGetParam 関数は、暗号化メッセージがエンコードまたはデコードされた後に、メッセージ パラメーターを取得します。 この関数は、最後の CryptMsgUpdate 呼び出しの後に呼び出されます。

構文

BOOL CryptMsgGetParam(
  [in]      HCRYPTMSG hCryptMsg,
  [in]      DWORD     dwParamType,
  [in]      DWORD     dwIndex,
  [out]     void      *pvData,
  [in, out] DWORD     *pcbData
);

パラメーター

[in] hCryptMsg

暗号化メッセージのハンドル。

[in] dwParamType

取得するデータのパラメーター型を示します。 取得するデータの種類によって、 pvData に使用する構造体の種類が決まります。

エンコードされたメッセージの場合、 dwParamTypeのCMSG_BARE_CONTENT、CMSG_ENCODE_SIGNER、CMSG_CONTENT_PARAM、CMSG_COMPUTED_HASH_PARAMのみが有効です。

説明
CMSG_ATTR_CERT_COUNT_PARAM
pvData データ型: DWORD へのポインター

SIGNED または ENVELOPED メッセージ内の属性証明書の数を返します。

CMSG_ATTR_CERT_PARAM
pvData データ型: BYTE 配列へのポインター

属性証明書を取得します。 すべての属性証明書を取得するには、 CryptMsgGetParam varying dwIndex を 0 に設定し、属性の数から 1 を引いた値を呼び出します。

CMSG_BARE_CONTENT_PARAM
pvData データ型: BYTE 配列へのポインター

CONTENT_INFO構造体の外部レイヤーを使用せずに、エンコードされた暗号化メッセージのエンコードされたコンテンツを取得します。 つまり、PKCS #7 で定義された ContentInfo.content フィールドのエンコードのみが返されます。

CMSG_CERT_COUNT_PARAM
pvData データ型: DWORD へのポインター

受信した SIGNED または ENVELOPED メッセージ内の証明書の数を返します。

CMSG_CERT_PARAM
pvData データ型: BYTE 配列へのポインター

署名者の証明書を返します。 署名者のすべての証明書を取得するには、 CryptMsgGetParam を呼び出します。 dwIndex は 0 から使用可能な証明書の数から 1 を引いた値まで変化します。

CMSG_COMPUTED_HASH_PARAM
pvData データ型: BYTE 配列へのポインター

メッセージ内のデータの計算されたハッシュを返します。 この型は、エンコードとデコードの両方に適用できます。

CMSG_CONTENT_PARAM
pvData データ型: BYTE 配列へのポインター

エンコードするために開かれたメッセージから PKCS #7 メッセージ全体を返します。 デコードするために開かれたメッセージの内部コンテンツを取得します。 メッセージがエンベロープされ、内部の型がデータであり、メッセージの暗号化を解除するために CryptMsgControl が呼び出された場合、復号化されたコンテンツが返されます。 内部型がデータでない場合は、さらにデコードを必要とするエンコードされた BLOB が返されます。 メッセージがエンベロープ化されておらず、内部コンテンツが DATA の場合、返されるデータは内部コンテンツのオクテットです。 この型は、エンコードとデコードの両方に適用できます。

デコードの場合、型がCMSG_DATA場合は、コンテンツのオクテットが返されます。それ以外の場合は、エンコードされた内部コンテンツが返されます。

CMSG_CRL_COUNT_PARAM
pvData データ型: DWORD へのポインター

受信したメッセージ、SIGNED メッセージ、または ENVELOPED メッセージ内の CRL の数を返します。

CMSG_CRL_PARAM
pvData データ型: BYTE 配列へのポインター

CRL を返します。 すべての CRL を取得するには、 CryptMsgGetParam を呼び出します。 dwIndex は 0 から使用可能な CRL の数から 1 を引いた値まで変化します。

CMSG_ENCODED_MESSAGE
pvData データ型: BYTE 配列へのポインター

既にエンコードされているメッセージの内容を変更します。 メッセージは、最初に CryptMsgOpenToDecode を呼び出してデコードする必要があります。 その後、メッセージの変更は、 CryptMsgControlCryptMsgCountersign、または CryptMsgCountersignEncoded の呼び出しによって行われます。 その後、メッセージは CryptMsgGetParam の呼び出しで再度エンコードされ、CMSG_ENCODED_MESSAGEを指定して、加えられた変更を反映する新しいエンコードを取得します。 これは、たとえば、メッセージにタイムスタンプ属性を追加するために使用できます。

CMSG_ENCODED_SIGNER
pvData データ型: BYTE 配列へのポインター

メッセージ署名者のエンコードされたCMSG_SIGNER_INFO署名者情報を返します。

CMSG_ENCRYPTED_DIGEST
pvData データ型: BYTE 配列へのポインター

署名の暗号化されたハッシュを返します。 通常、タイム スタンプの実行に使用されます。

CMSG_ENCRYPT_PARAM
pvData データ型: CRYPT_ALGORITHM_IDENTIFIER構造体の BYTE 配列へのポインター。

メッセージの暗号化に使用される暗号化アルゴリズムを返します。

CMSG_ENVELOPE_ALGORITHM_PARAM
pvData データ型: CRYPT_ALGORITHM_IDENTIFIER構造体の BYTE 配列へのポインター。

ENVELOPED メッセージの暗号化に使用される暗号化アルゴリズムを返します。

CMSG_HASH_ALGORITHM_PARAM
pvData データ型: CRYPT_ALGORITHM_IDENTIFIER構造体の BYTE 配列へのポインター。

作成時にメッセージをハッシュするために使用されるハッシュ アルゴリズムを返します。

CMSG_HASH_DATA_PARAM
pvData データ型: BYTE 配列へのポインター

作成時にメッセージに格納されているハッシュ値を返します。

CMSG_INNER_CONTENT_TYPE_PARAM
pvData データ型: NULL で終わるオブジェクト識別子 (OID) 文字列を受け取る BYTE 配列へのポインター。

受信したメッセージの内部コンテンツ タイプを返します。 この型は、DATA 型のメッセージには適用されません。

CMSG_RECIPIENT_COUNT_PARAM
pvData データ型: DWORD へのポインター

ENVELOPED で受信したメッセージのキー トランスポート受信者の数を返します。

CMSG_CMS_RECIPIENT_COUNT_PARAM
pvData データ型: DWORD へのポインター

キー契約とメール リストの受信者を含むすべてのメッセージ受信者の合計数を返します。

CMSG_RECIPIENT_INDEX_PARAM
pvData データ型: DWORD へのポインター

ENVELOPED メッセージの暗号化を解除するために使用されるキー トランスポート受信者のインデックスを返します。 この値は、メッセージの暗号化が解除された後にのみ使用できます。

CMSG_CMS_RECIPIENT_INDEX_PARAM
pvData データ型: DWORD へのポインター

ENVELOPED メッセージの暗号化を解除するために使用されるキー トランスポート、キー アグリーメント、またはメール リストの受信者のインデックスを返します。

CMSG_CMS_RECIPIENT_ENCRYPTED_KEY_INDEX_PARAM
pvData データ型: DWORD へのポインター

ENVELOPED メッセージの暗号化を解除するために使用されるキー アグリーメント受信者の暗号化キーのインデックスを返します。

CMSG_RECIPIENT_INFO_PARAM
pvData データ型: CERT_INFO構造体を受け取る BYTE 配列へのポインター。

キー トランスポート メッセージの受信者に関する証明書情報を返します。 すべてのキー トランスポート メッセージの受信者に関する証明書情報を取得するには、 CryptMsgGetParam を繰り返し呼び出し、 dwIndex を 0 から受信者の数から 1 を引いた値に変更します。 返される CERT_INFO 構造体の Issuer、SerialNumber、PublicKeyAlgorithm メンバーのみが使用でき、有効です。

CMSG_CMS_RECIPIENT_INFO_PARAM
pvData データ型: CMSG_CMS_RECIPIENT_INFO構造体を受け取る BYTE 配列へのポインター。

キー トランスポート、キー契約、またはメール リストの受信者に関する情報を返します。 これは、キー トランスポート メッセージの受信者に限定されません。 メッセージのすべての受信者に関する情報を取得するには、 CryptMsgGetParam を繰り返し呼び出し、 dwIndex を 0 から受信者の数から 1 を引いた値に変更します。

CMSG_SIGNER_AUTH_ATTR_PARAM
pvData データ型: CRYPT_ATTRIBUTES構造体を受け取る BYTE 配列へのポインター。

メッセージ署名者の認証済み属性を返します。 指定した署名者の認証済み属性を取得するには、その署名者のインデックスと等しい dwIndex を使用して CryptMsgGetParam を呼び出します。

CMSG_SIGNER_CERT_INFO_PARAM
pvData データ型: CERT_INFO構造体を受け取る BYTE 配列へのポインター。

署名者の証明書を識別するために必要なメッセージ署名者に関する情報を返します。 証明書の発行者と SerialNumber を使用して、取得する証明書を一意に識別できます。 すべての署名者の情報を取得するには、dwIndex を 0 から 1 を引いた数まで、CryptMsgGetParam を繰り返し呼び出します。 返される CERT_INFO 構造体の Issuer フィールドと SerialNumber フィールドにのみ、使用可能な有効なデータが含まれています。

CMSG_SIGNER_CERT_ID_PARAM
pvData データ型: CERT_ID構造体を受け取る BYTE 配列へのポインター。

署名者の公開キーを識別するために必要なメッセージ署名者に関する情報を返します。 証明書の発行者とシリアル番号、KeyID、または HashId を指定できます。 すべての署名者の情報を取得するには、dwIndex を 0 から 1 を引いた数まで CryptMsgGetParam を呼び出します。

CMSG_SIGNER_COUNT_PARAM
pvData データ型: DWORD へのポインター

受信した SIGNED メッセージの署名者の数を返します。

CMSG_SIGNER_HASH_ALGORITHM_PARAM
pvData データ型: CRYPT_ALGORITHM_IDENTIFIER構造体を受け取る BYTE 配列へのポインター。

メッセージの署名者によって使用されるハッシュ アルゴリズムを返します。 指定した署名者のハッシュ アルゴリズムを取得するには、dwIndex がその署名者のインデックスと等しい CryptMsgGetParam を呼び出します。

CMSG_SIGNER_INFO_PARAM
pvData データ型: CMSG_SIGNER_INFO構造体を受け取る BYTE 配列へのポインター。

メッセージ署名者に関する情報を返します。 これには、署名者の証明書の発行者とシリアル番号、署名者の証明書の認証された属性と認証されていない属性が含まれます。 メッセージのすべての署名者に関する署名者情報を取得するには、dwIndex を 0 から 1 を引いた数に変更して CryptMsgGetParam を呼び出します。

CMSG_CMS_SIGNER_INFO_PARAM
pvData データ型: CMSG_CMS_SIGNER_INFO構造体を受け取る BYTE 配列へのポインター。

メッセージ署名者に関する情報を返します。 これには、signerId と認証済み属性と認証されていない属性が含まれます。 メッセージのすべての署名者に関する署名者情報を取得するには、dwIndex を 0 から 1 を引いた数に変更して CryptMsgGetParam を呼び出します。

CMSG_SIGNER_UNAUTH_ATTR_PARAM
pvData データ型: CRYPT_ATTRIBUTES構造体を受け取る BYTE 配列へのポインター。

メッセージ署名者の認証されていない属性を返します。 指定した署名者の認証されていない属性を取得するには、その署名者のインデックスと等しい dwIndexCryptMsgGetParam を呼び出します。

CMSG_TYPE_PARAM
pvData データ型: DWORD へのポインター

不明な型のデコードされたメッセージのメッセージの種類を返します。 取得したメッセージの種類をサポートされている型と比較して、処理を続行できるかどうかを判断できます。 サポートされているメッセージの種類については、CryptMsgOpenToDecodedwMessageType パラメーターを参照してください。

CMSG_UNPROTECTED_ATTR_PARAM
pvData データ型: CMSG_ATTR構造体を受け取る BYTE 配列へのポインター。

エンベロープ メッセージ内の保護されていない属性を返します。

CMSG_VERSION_PARAM
pvData データ型: DWORD へのポインター

デコードされたメッセージのバージョンを返します。 詳細については、「解説」セクションの表を参照してください。

[in] dwIndex

取得するパラメーターのインデックス (該当する場合)。 パラメーターが取得されていない場合、このパラメーターは無視され、0 に設定されます。

[out] pvData

取得されたデータを受け取るバッファーへのポインター。 このデータの形式は、 dwParamType パラメーターの値によって異なります。

このパラメーターは、メモリ割り当てのためにこの情報のサイズを設定するために NULL にすることができます 。 詳細については、「 不明な長さのデータの取得」を参照してください。

このバッファーで返されるデータを処理する場合、アプリケーションは返されるデータの実際のサイズを使用する必要があります。 実際のサイズは、入力時に指定されたバッファーのサイズよりも少し小さくすることができます。 (入力では、バッファー サイズは通常、可能な最大の出力データがバッファーに収まるように十分な大きさで指定されます)。出力時に、このパラメーターが指す変数が更新され、バッファーにコピーされたデータの実際のサイズが反映されます。

[in, out] pcbData

pvData パラメーターによって指されるバッファーのサイズをバイト単位で指定する変数へのポインター。 関数が戻るとき、 pcbData パラメーターによって指される変数には、バッファーに格納されているバイト数が含まれます。

戻り値

関数が成功した場合、戻り値は 0 以外 (TRUE) になります。

関数が失敗した場合、戻り値は 0 (FALSE) になります。 拡張エラー情報については、 GetLastError を呼び出します。

次の表に、 GetLastError 関数によって最も一般的に返されるエラー コードを示します。

リターン コード 説明
CRYPT_E_ATTRIBUTES_MISSING
メッセージには、要求された属性が含まれていません。
CRYPT_E_INVALID_INDEX
インデックス値が無効です。
CRYPT_E_INVALID_MSG_TYPE
メッセージ型が無効です。
CRYPT_E_NOT_DECRYPTED
メッセージの内容はまだ暗号化解除されていません。
CRYPT_E_OID_FORMAT
オブジェクト識別子の形式が正しくありません。
CRYPT_E_UNEXPECTED_ENCODING
メッセージは期待どおりにエンコードされません。
E_INVALIDARG
1 つ以上の引数が無効です。
ERROR_MORE_DATA
指定されたバッファーは、返されたデータを保持するのに十分な大きさではありません。
 

dwParamType CMSG_COMPUTED_HASH_PARAMの場合、CryptGetHashParam からエラーを伝達できます。

関数が失敗した場合、GetLastError は抽象構文表記 1 (ASN.1) エンコード/デコード エラーを返す可能性があります。 これらのエラーの詳細については、「 ASN.1 エンコード/デコードの戻り値」を参照してください。

解説

次のバージョン番号は、dwParamType が定義CMSG_VERSION_PARAMに設定された CryptMsgGetParam の呼び出しによって返されます。

  • CMSG_SIGNED_DATA_V1
  • CMSG_SIGNED_DATA_V3
  • CMSG_SIGNED_DATA_PKCS_1_5_VERSION
  • CMSG_SIGNED_DATA_CMS_VERSION
  • CMSG_SIGNER_INFO_V1
  • CMSG_SIGNER_INFO_V3
  • CMSG_SIGNER_INFO_PKCS_1_5_VERSION
  • CMSG_SIGNER_INFO_CMS_VERSION
  • CMSG_HASHED_DATA_V0
  • CMSG_HASHED_DATA_V2
  • CMSG_HASHED_DATA_PKCS_1_5_VERSION
  • CMSG_HASHED_DATA_CMS_VERSION
  • CMSG_ENVELOPED_DATA_V0
  • CMSG_ENVELOPED_DATA_V2
  • CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION
  • CMSG_ENVELOPED_DATA_CMS_VERSION

この関数を使用する例については、「 サンプル C プログラム: メッセージの署名、エンコード、デコード、検証」、「エンベロープ メッセージを エンコードするための代替コード」、「 C プログラムの例: エンベロープメッセージのエンコード、署名付きメッセージのエンコード、および C プログラムの例: ハッシュメッセージのエンコードとデコード」を参照してください。

要件

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

関連項目

CryptMsgOpenToDecode

CryptMsgOpenToEncode

CryptMsgUpdate

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

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