CryptMsgOpenToEncode 関数 (wincrypt.h)
CryptMsgOpenToEncode 関数は、エンコード用の暗号化メッセージを開き、開かれたメッセージのハンドルを返します。 メッセージは、CryptMsgClose が呼び出されるまで開いたままです。
構文
HCRYPTMSG CryptMsgOpenToEncode(
[in] DWORD dwMsgEncodingType,
[in] DWORD dwFlags,
[in] DWORD dwMsgType,
[in] void const *pvMsgEncodeInfo,
[in, optional] LPSTR pszInnerContentObjID,
[in] PCMSG_STREAM_INFO pStreamInfo
);
パラメーター
[in] dwMsgEncodingType
使用するエンコードの種類を指定します。 次の例に示すように、証明書と メッセージエンコードの両方の種類 をビットごとの OR 操作と組み合わせて指定することは、常に許容されます。
X509_ASN_ENCODING |PKCS_7_ASN_ENCODING
現在定義されているエンコードの種類は次のとおりです。
- X509_ASN_ENCODING
- PKCS_7_ASN_ENCODING
[in] dwFlags
現在定義されている dwFlags を次の表に示します。
値 | 意味 |
---|---|
|
ストリーミングされた出力には、外部の ContentInfo ラッパーは含まれません (PKCS #7 で定義されています)。 これにより、囲みメッセージにストリーム配信するのに適しています。 |
|
CryptMsgUpdate の後続の呼び出しに対して、デタッチされたデータが提供されます。 |
|
認証された属性は、必要でない場合に、SignerInfo (PKCS #7 で定義) に強制的に含められます。 |
|
Distinguished Encoding Rules (DER) を使用してエンコードされ、エンベロープ メッセージ内に入れ子になっているメッセージのサイズを計算するときに使用されます。 これは、ストリーミングを実行する場合に特に便利です。 |
|
設定すると、データ型以外の内部コンテンツ が OCTET STRING 内にカプセル化されます。 署名済みメッセージとエンベロープ メッセージの両方に適用されます。 |
|
設定した場合、この関数に渡される hCryptProv は、最終的な CryptMsgUpdate で解放されます。 関数が失敗した場合、ハンドルは解放されません。
メモ エンベロープ受信者の hCryptProvは解放されません。
|
[in] dwMsgType
メッセージの種類を示します。 これは、次のいずれかの値である必要があります。
値 | 意味 |
---|---|
|
この値は使用されません。 |
|
pvMsgEncodeInfo パラメーターは、エンコード情報を含むCMSG_SIGNED_ENCODE_INFO構造体のアドレスです。 |
|
pvMsgEncodeInfo パラメーターは、エンコード情報を含むCMSG_ENVELOPED_ENCODE_INFO構造体のアドレスです。 |
|
この値は現在実装されていません。 |
|
pvMsgEncodeInfo パラメーターは、エンコード情報を含むCMSG_HASHED_ENCODE_INFO構造体のアドレスです。 |
[in] pvMsgEncodeInfo
エンコード情報を含む構造体のアドレス。 データの種類は、 dwMsgType パラメーターの値によって異なります。 詳細については、「 dwMsgType」を参照してください。
[in, optional] pszInnerContentObjID
CryptMsgCalculateEncodedLength が呼び出され、CryptMsgUpdate のデータが既にメッセージ エンコードされている場合は、pszInnerContentObjID で適切なオブジェクト識別子 (OID) が渡されます。 pszInnerContentObjID が NULL の場合、内部コンテンツ タイプは以前にエンコードされていないと見なされるため、オクテット文字列としてエンコードされ、型がCMSG_DATA。
- szOID_RSA_data
- szOID_RSA_signedData
- szOID_RSA_envelopedData
- szOID_RSA_signEnvData
- szOID_RSA_digestedData
- szOID_RSA_encryptedData
- SPC_INDIRECT_DATA_OBJID
[in] pStreamInfo
ストリーミングが使用されている場合、このパラメーターは CMSG_STREAM_INFO 構造体のアドレスです。 CMSG_STREAM_INFO構造体の pfnStreamOutput メンバーによって指定されたコールバック関数は、CryptMsgUpdate の実行時に呼び出されます。 コールバックには、エンコードの結果としてエンコードされたバイトが渡されます。 コールバックの使用方法の詳細については、「 CMSG_STREAM_INFO」を参照してください。
ストリーミングは、 CMSG_HASHED メッセージの種類では使用されません。 ハッシュされたデータを処理する場合は、このパラメーターを NULL に設定する必要があります。
署名されたメッセージがエンベロープ メッセージで囲まれている場合を考えてみましょう。 署名されたメッセージのストリーミング エンコードからのエンコードされた出力は、エンベロープ されたメッセージの別のストリーミング エンコードにフィードされます。 ストリーミング エンコードのコールバックは 、CryptMsgUpdate を呼び出して、エンベロープされたメッセージをエンコードします。 エンベロープ メッセージのコールバックは、入れ子になった署名付きメッセージのエンコードされたバイトを受け取ります。
戻り値
関数が成功すると、開いたメッセージへのハンドルが返されます。 このハンドルは、 CryptMsgClose 関数に渡すことによって不要になったときに閉じる必要があります。
この関数が失敗した場合は、 NULL が返されます。
拡張エラー情報を取得するには、 GetLastError 関数を使用します。
次の表に、 GetLastError 関数によって最も一般的に返されるエラー コードを示します。
リターン コード | 説明 |
---|---|
|
メッセージ型が無効です。 |
|
OID の形式が正しくありません。 |
|
暗号化アルゴリズムが不明です。 |
|
1 つ以上の引数が無効です。 |
|
メモリが不足しています。 |
さらに、 dwMsgType がCMSG_SIGNEDされている場合は、 CryptCreateHash からエラーを反映できます。
dwMsgType がCMSG_ENVELOPED場合は、CryptGenKey、CryptImportKey、および CryptExportKey からエラーを反映できます。
dwMsgType がCMSG_HASHED場合は、CryptCreateHash からエラーを反映できます。
注釈
暗号化を実行する関数の場合、CryptExportKey が内部的に呼び出された後、暗号化された対称キーはリトル エンディアン形式からビッグ エンディアン形式に反転されます。 暗号化解除を実行する関数の場合、暗号化された対称キーは 、CryptImportKey が呼び出される前に、ビッグ エンディアン形式からリトル エンディアン形式に反転されます。
CRYPT_NO_SALTは、対称キーが生成され、CryptGenKey と CryptImportKey を使用してインポートされるときに指定されます。
RC2 暗号化アルゴリズムで暗号化されたメッセージは、 CryptGetKeyParam でKP_EFFECTIVE_KEYLENを使用して、RC2 キーのインポートまたはエクスポートの有効な キー長 を決定します。
RC2 暗号化アルゴリズムを使用して暗号化されたメッセージの場合、CMSG_ENVELOPED_ENCODE_INFO構造体のContentEncryptionAlgorithm メンバーの ASN RC2 パラメーターを処理するようにエンコードおよびデコード操作が更新されました。
RC4、DES、および 3DES 暗号化アルゴリズムを使用して暗号化されたメッセージの場合、エンコード操作とデコード操作で、CMSG_ENVELOPED_ENCODE_INFO構造体の ContentEncryptionAlgorithm メンバーの ASN IV オクテット文字列パラメーターが処理されるようになりました。
例
この関数を使用する例については、「 例 C プログラム: メッセージの署名、エンコード、デコード、検証」、「エンベロープ メッセージを エンコードするための代替コード」、「 C プログラムの例: エンベロープメッセージのエンコード、署名付きメッセージのエンコード、および C プログラムの例: ハッシュメッセージのエンコードとデコード」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP [デスクトップ アプリ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | wincrypt.h |
Library | Crypt32.lib |
[DLL] | Crypt32.dll |