次の方法で共有


CryptDecryptAndVerifyMessageSignature 関数 (wincrypt.h)

CryptDecryptAndVerifyMessageSignature 関数は、メッセージの暗号化を解除し、その署名を検証します。

構文

BOOL CryptDecryptAndVerifyMessageSignature(
  [in]                PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
  [in]                PCRYPT_VERIFY_MESSAGE_PARA  pVerifyPara,
  [in]                DWORD                       dwSignerIndex,
  [in]                const BYTE                  *pbEncryptedBlob,
  [in]                DWORD                       cbEncryptedBlob,
  [out, optional]     BYTE                        *pbDecrypted,
  [in, out, optional] DWORD                       *pcbDecrypted,
  [out, optional]     PCCERT_CONTEXT              *ppXchgCert,
  [out, optional]     PCCERT_CONTEXT              *ppSignerCert
);

パラメーター

[in] pDecryptPara

復号化パラメーターを含む CRYPT_DECRYPT_MESSAGE_PARA 構造体へのポインター。

[in] pVerifyPara

検証パラメーターを含む CRYPT_VERIFY_MESSAGE_PARA 構造体へのポインター。

[in] dwSignerIndex

メッセージの特定の署名者を識別します。 メッセージは複数の署名者によって署名でき、この関数は複数回呼び出して、このパラメーターを複数の署名者のチェックに変更できます。 最初の署名者の場合は 0 に設定されます。 関数が FALSE を返し、 GetLastError が CRYPT_E_NO_SIGNERを返した場合、前の呼び出しはメッセージの最後の署名者を受け取ります。

[in] pbEncryptedBlob

暗号化解除および検証される署名済み、エンコード済み、および暗号化されたメッセージへのポインター。

[in] cbEncryptedBlob

暗号化されたメッセージのサイズ (バイト単位)。

[out, optional] pbDecrypted

復号化されたメッセージを受信するバッファーへのポインター。

復号化されたメッセージが不要な場合、またはメモリ割り当てのために復号化されたメッセージのサイズを設定する場合、このパラメーターは NULL にすることができます 。 このパラメーターが NULL の場合、復号化されたメッセージは返されません。 詳細については、「不明な 長さのデータの取得」を参照してください。

[in, out, optional] pcbDecrypted

pbDecrypted パラメーターが指すバッファーのサイズをバイト単位で指定する DWORD へのポインター。 関数が戻るときに、 pbDecrypted にコピーされた暗号化解除されたメッセージのサイズが含まれます。

メモpbDecrypted バッファーで返されたデータを処理する場合、アプリケーションは返されるデータの実際のサイズを使用する必要があります。 実際のサイズは、入力時に pcbDecrypted で指定されたバッファーのサイズよりも若干小さくなります。 出力時に、このパラメーターが指す変数は、バッファーにコピーされたデータの実際のサイズを反映するように設定されます。
 

[out, optional] ppXchgCert

メッセージの暗号化を解除するために必要な秘密交換キーに対応する証明書CERT_CONTEXT構造へのポインター。

[out, optional] ppSignerCert

署名者の証明書 のCERT_CONTEXT 構造へのポインター。

戻り値

関数が成功した場合、関数は 0 以外 (TRUE) を返します。

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

メモ 呼び出された関数 CryptDecryptMessageCryptVerifyMessageSignature からのエラーがこの関数に反映される可能性があります。
 
GetLastError 関数は、最も頻繁に次のエラー コードを返します。
リターン コード 説明
ERROR_MORE_DATA
pbDecrypted パラメーターで指定されたバッファーが、返されたデータを保持するのに十分な大きさでない場合、関数はERROR_MORE_DATA コードを設定し、必要なバッファー サイズをバイト単位で pcbDecrypted が指す変数に格納します。

注釈

正常に復号化および検証されたメッセージの場合、ppXchgCertppSignerCert が指す証明書コンテキスト ポインターが更新されます。 CertFreeCertificateContext を呼び出して解放する必要があります。 関数が失敗した場合は、 NULL に設定されます。

呼び出し元が Exchange 証明書または署名者 証明書のコンテキストに関心を持たないことを示すには、 ppXchgCert パラメーターと ppSignerCert パラメーターを NULL に設定 します

この関数を使用する例については、「 Example C Program: Sending and Receiving a Signed and Encrypted Message」を参照してください。

要件

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

こちらもご覧ください

CryptDecryptMessage

CryptSignAndEncryptMessage

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