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
);パラメーター
| フィールド | 型 | 説明 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| hKey | BCRYPT_KEY_HANDLE | データの復号に使用するキーのハンドルです。このハンドルは、BCryptGenerateSymmetricKey、BCryptGenerateKeyPair、BCryptImportKey などのキー作成関数のいずれかから取得します。 | ||||||||||||
| pbInput | BYTE* | 復号する暗号文が格納されたバッファーのアドレスです。cbInput パラメーターには、復号する暗号文のサイズを指定します。詳細については、「解説」を参照してください。 | ||||||||||||
| cbInput | DWORD | 復号する pbInput バッファー内のバイト数です。 | ||||||||||||
| pPaddingInfo | void* | パディング情報を格納した構造体へのポインターです。このパラメーターは、非対称キーおよび認証付き暗号化モードでのみ使用されます。認証付き暗号化モードを使用する場合、このパラメーターは BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO 構造体を指している必要があります。非対称キーを使用する場合、このパラメーターが指す構造体の種類は dwFlags パラメーターの値によって決まります。それ以外の場合、このパラメーターには NULL を設定する必要があります。 | ||||||||||||
| pbIV | BYTE* | 復号時に使用する初期化ベクター (IV) が格納されたバッファーのアドレスです。cbIV パラメーターには、このバッファーのサイズを指定します。この関数は、このバッファーの内容を変更します。後で IV を再利用する必要がある場合は、この関数を呼び出す前にこのバッファーのコピーを作成してください。 このパラメーターは省略可能で、IV を使用しない場合は NULL を指定できます。 IV に必要なサイズは、BCryptGetProperty 関数を呼び出して BCRYPT_BLOCK_LENGTH プロパティを取得することで求められます。これはアルゴリズムのブロックのサイズであり、IV のサイズでもあります。 | ||||||||||||
| cbIV | DWORD | pbIV バッファーのサイズ (バイト単位) です。 | ||||||||||||
| pbOutput | BYTE* | この関数が生成する平文を受け取るバッファーのアドレスです。cbOutput パラメーターには、このバッファーのサイズを指定します。詳細については、「解説」を参照してください。 このパラメーターが NULL の場合、BCryptDecrypt 関数は、pbInput パラメーターで渡された暗号化データの平文に必要なサイズを計算します。この場合、pcbResult パラメーターが指す場所にそのサイズが格納され、関数は STATUS_SUCCESS を返します。 pbOutput パラメーターと pbInput パラメーターの両方が NULL の場合は、認証付き暗号化アルゴリズムを使用していない限りエラーが返されます。使用している場合、この呼び出しは長さ 0 のデータに対する認証付き暗号化の呼び出しとして扱われ、pPaddingInfo パラメーターで渡された認証タグが検証されます。 | ||||||||||||
| cbOutput | DWORD | pbOutput バッファーのサイズ (バイト単位) です。pbOutput パラメーターが NULL の場合、このパラメーターは無視されます。 | ||||||||||||
| pcbResult | DWORD* | pbOutput バッファーにコピーされたバイト数を受け取る ULONG 変数へのポインターです。pbOutput が NULL の場合は、平文に必要なサイズ (バイト単位) を受け取ります。 | ||||||||||||
| dwFlags | DWORD | この関数の動作を変更するフラグのセットです。指定できるフラグのセットは、hKey パラメーターで指定したキーの種類によって異なります。 キーが対称キーの場合は、0 または次の値を指定できます。
キーが非対称キーの場合は、次の値のいずれかを指定できます。
|
公式ドキュメント
BCryptDecrypt 関数は、データのブロックを復号します。
戻り値
関数の成功または失敗を示すステータスコードを返します。
返される可能性のあるコードには、次のものが含まれます (ただし、これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| 関数は成功しました。 | |
| 計算された認証タグが、pPaddingInfo パラメーターで指定された値と一致しませんでした。 | |
| cbOutput パラメーターで指定されたサイズでは、暗号文を格納するのに十分ではありません。 | |
| cbInput パラメーターがアルゴリズムのブロックサイズの倍数ではなく、かつ dwFlags パラメーターに BCRYPT_BLOCK_PADDING フラグが指定されていません。 | |
| hKey パラメーターのキーハンドルが無効です。 | |
| 1 つ以上のパラメーターが無効です。 | |
| このアルゴリズムは復号をサポートしていません。 |
解説(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 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)