Win32 API 日本語リファレンス
ホーム › Security.Cryptography › BCryptDecryptFn

BCryptDecryptFn

コールバック

シグネチャ

NTSTATUS BCryptDecryptFn(
    BCRYPT_KEY_HANDLE hKey,
    BYTE* pbInput,
    DWORD cbInput,
    void* pPaddingInfo,
    BYTE* pbIV,
    DWORD cbIV,
    BYTE* pbOutput,
    DWORD cbOutput,
    DWORD* pcbResult,
    DWORD dwFlags
);

パラメーター

フィールド型説明
hKeyBCRYPT_KEY_HANDLEデータの復号に使用するキーのハンドルです。このハンドルは、BCryptGenerateSymmetricKey、BCryptGenerateKeyPair、BCryptImportKey などのキー作成関数のいずれかから取得します。
pbInputBYTE*復号する暗号文が格納されたバッファーのアドレスです。cbInput パラメーターには、復号する暗号文のサイズを指定します。詳細については、「解説」を参照してください。
cbInputDWORD復号する pbInput バッファー内のバイト数です。
pPaddingInfovoid*パディング情報を格納した構造体へのポインターです。このパラメーターは、非対称キーおよび認証付き暗号化モードでのみ使用されます。認証付き暗号化モードを使用する場合、このパラメーターは BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO 構造体を指している必要があります。非対称キーを使用する場合、このパラメーターが指す構造体の種類は dwFlags パラメーターの値によって決まります。それ以外の場合、このパラメーターには NULL を設定する必要があります。
pbIVBYTE*

復号時に使用する初期化ベクター (IV) が格納されたバッファーのアドレスです。cbIV パラメーターには、このバッファーのサイズを指定します。この関数は、このバッファーの内容を変更します。後で IV を再利用する必要がある場合は、この関数を呼び出す前にこのバッファーのコピーを作成してください。

このパラメーターは省略可能で、IV を使用しない場合は NULL を指定できます。

IV に必要なサイズは、BCryptGetProperty 関数を呼び出して BCRYPT_BLOCK_LENGTH プロパティを取得することで求められます。これはアルゴリズムのブロックのサイズであり、IV のサイズでもあります。

cbIVDWORDpbIV バッファーのサイズ (バイト単位) です。
pbOutputBYTE*

この関数が生成する平文を受け取るバッファーのアドレスです。cbOutput パラメーターには、このバッファーのサイズを指定します。詳細については、「解説」を参照してください。

このパラメーターが NULL の場合、BCryptDecrypt 関数は、pbInput パラメーターで渡された暗号化データの平文に必要なサイズを計算します。この場合、pcbResult パラメーターが指す場所にそのサイズが格納され、関数は STATUS_SUCCESS を返します。

pbOutput パラメーターと pbInput パラメーターの両方が NULL の場合は、認証付き暗号化アルゴリズムを使用していない限りエラーが返されます。使用している場合、この呼び出しは長さ 0 のデータに対する認証付き暗号化の呼び出しとして扱われ、pPaddingInfo パラメーターで渡された認証タグが検証されます。

cbOutputDWORDpbOutput バッファーのサイズ (バイト単位) です。pbOutput パラメーターが NULL の場合、このパラメーターは無視されます。
pcbResultDWORD*pbOutput バッファーにコピーされたバイト数を受け取る ULONG 変数へのポインターです。pbOutput が NULL の場合は、平文に必要なサイズ (バイト単位) を受け取ります。
dwFlagsDWORD

この関数の動作を変更するフラグのセットです。指定できるフラグのセットは、hKey パラメーターで指定したキーの種類によって異なります。

キーが対称キーの場合は、0 または次の値を指定できます。

値 意味
BCRYPT_BLOCK_PADDING
データは、暗号化時に次のブロックサイズまでパディングされています。BCryptEncrypt 関数でこのフラグを使用した場合は、この関数でも指定する必要があります。このフラグは、認証付き暗号化モード (AES-CCM および AES-GCM) では使用できません。

キーが非対称キーの場合は、次の値のいずれかを指定できます。

値 意味
BCRYPT_PAD_NONE
パディングを使用しません。pPaddingInfo パラメーターは使用されません。cbInput パラメーターは、アルゴリズムのブロックサイズの倍数である必要があります。

ブロックサイズは、BCryptGetProperty 関数を呼び出して、キーの BCRYPT_BLOCK_LENGTH プロパティを取得することで求められます。これにより、アルゴリズムのブロックのサイズが得られます。

BCRYPT_PAD_OAEP
データの暗号化時に、Optimal Asymmetric Encryption Padding (OAEP) 方式が使用されました。pPaddingInfo パラメーターは、BCRYPT_OAEP_PADDING_INFO 構造体へのポインターです。
BCRYPT_PAD_PKCS1
データの暗号化時に、データが乱数でパディングされました。pPaddingInfo パラメーターは使用されません。

公式ドキュメント

BCryptDecrypt 関数は、データのブロックを復号します。

戻り値

関数の成功または失敗を示すステータスコードを返します。

返される可能性のあるコードには、次のものが含まれます (ただし、これらに限定されません)。

戻り値 説明
STATUS_SUCCESS
関数は成功しました。
STATUS_AUTH_TAG_MISMATCH
計算された認証タグが、pPaddingInfo パラメーターで指定された値と一致しませんでした。
STATUS_BUFFER_TOO_SMALL
cbOutput パラメーターで指定されたサイズでは、暗号文を格納するのに十分ではありません。
STATUS_INVALID_BUFFER_SIZE
cbInput パラメーターがアルゴリズムのブロックサイズの倍数ではなく、かつ dwFlags パラメーターに BCRYPT_BLOCK_PADDING フラグが指定されていません。
STATUS_INVALID_HANDLE
hKey パラメーターのキーハンドルが無効です。
STATUS_INVALID_PARAMETER
1 つ以上のパラメーターが無効です。
STATUS_NOT_SUPPORTED
このアルゴリズムは復号をサポートしていません。

解説(Remarks)

pbInput パラメーターと pbOutput パラメーターには、同じ値を指定できます。この場合、この関数は復号をその場 (in place) で実行します。pbInput と pbOutput が同じでない場合、2 つのバッファーが重なっていてはなりません。

サポートされているアルゴリズムプロバイダーを使用する場合、BCryptDecrypt はユーザーモードとカーネルモードのどちらからでも呼び出せます。カーネルモードの呼び出し元は、PASSIVE_LEVEL IRQL と DISPATCH_LEVEL IRQL のいずれでも実行できます。現在の IRQL レベルが DISPATCH_LEVEL の場合、hKey パラメーターに渡すハンドルは、BCRYPT_PROV_DISPATCH フラグを指定して開かれたプロバイダーが返したアルゴリズムハンドルから派生したものである必要があり、BCryptDecrypt 関数に渡すポインターはすべて、ページング不可 (またはロックされた) メモリを参照している必要があります。

この関数をカーネルモードで呼び出すには、Driver Development Kit (DDK) に含まれる Cng.lib を使用します。Windows Server 2008 および Windows Vista: この関数をカーネルモードで呼び出すには、Ksecdd.lib を使用します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)