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

BCryptEncryptFn

コールバック

シグネチャ

NTSTATUS BCryptEncryptFn(
    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 の場合、BCryptEncrypt 関数は、pbInput パラメーターで渡されたデータの暗号文に必要なサイズを計算します。この場合、pcbResult パラメーターが指す場所にそのサイズが格納され、関数は STATUS_SUCCESS を返します。pPaddingInfo パラメーターは変更されません。

pbOutput パラメーターと pbInput パラメーターの値がどちらも NULL の場合、認証付き暗号化アルゴリズムを使用しているときを除き、エラーが返されます。使用している場合、この呼び出しは長さ 0 のデータに対する認証付き暗号化の呼び出しとして扱われ、認証タグが pPaddingInfo パラメーターに返されます。

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

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

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

値 意味
BCRYPT_BLOCK_PADDING
暗号化アルゴリズムが、データを次のブロックサイズまでパディングすることを許可します。このフラグを指定しない場合、cbInput パラメーターで指定する平文のサイズは、アルゴリズムのブロックサイズの倍数でなければなりません。

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

このフラグは、認証付き暗号化モード (AES-CCM および AES-GCM) と併用することはできません。

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

値 意味
BCRYPT_PAD_NONE
パディングを使用しません。pPaddingInfo パラメーターは使用されません。cbInput パラメーターで指定する平文のサイズは、アルゴリズムのブロックサイズの倍数でなければなりません。
BCRYPT_PAD_OAEP
Optimal Asymmetric Encryption Padding (OAEP) 方式を使用します。pPaddingInfo パラメーターは、BCRYPT_OAEP_PADDING_INFO 構造体へのポインターです。
BCRYPT_PAD_PKCS1
ブロックサイズに合わせるため、データが乱数でパディングされます。pPaddingInfo パラメーターは使用されません。

公式ドキュメント

BCryptEncrypt 関数は、データのブロックを暗号化します。

戻り値

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

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

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

解説(Remarks)

pbInput パラメーターと pbOutput パラメーターには、同じ値を指定できます。この場合、この関数は暗号化をインプレースで実行します。暗号化後のデータサイズが暗号化前のデータサイズより大きくなることがあるため、バッファーは暗号化されたデータを格納できる十分な大きさでなければなりません。pbInput と pbOutput が等しくない場合、2 つのバッファーが重なり合っていてはいけません。

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

この関数をカーネルモードで呼び出すには、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)