aes.h
Functions
| Name | |
|---|---|
| int | wc_AesSetKey(Aes * aes, const byte * key, word32 len, const byte * iv, int dir) この関数は、キーを設定し、初期化ベクトルを設定することでAES構造体を初期化します。 |
| int | wc_AesSetIV(Aes * aes, const byte * iv) この関数は、特定のAESオブジェクトの初期化ベクトルを設定します。この関数を呼び出す前にAESオブジェクトを初期化する必要があります。 |
| int | wc_AesCbcEncrypt(Aes * aes, byte * out, const byte * in, word32 sz) 入力バッファinから平文メッセージを暗号化し、AESを使用した暗号ブロック連鎖により結果の暗号文を出力バッファoutに格納します。この関数は、メッセージを暗号化する前にAesSetKeyを呼び出してAESオブジェクトが初期化されている必要があります。この関数は、入力メッセージがAESブロック長に整列していることを前提としており、入力長がブロック長の倍数であることを期待します。ビルド構成でWOLFSSL_AES_CBC_LENGTH_CHECKSが定義されている場合、これはオプションでチェックおよび強制されます。ブロック倍数の入力を保証するために、事前にPKCS#7スタイルのパディングを追加する必要があります。これは、自動的にパディングを追加するOpenSSLのAES-CBCメソッドとは異なります。wolfSSLと対応するOpenSSL関数を相互運用させるには、OpenSSLコマンドライン関数で-nopadオプションを指定して、wolfSSLのAesCbcEncryptメソッドのように動作し、暗号化中に余分なパディングを追加しないようにする必要があります。 |
| int | wc_AesCbcDecrypt(Aes * aes, byte * out, const byte * in, word32 sz) 入力バッファinから暗号を復号し、AESを使用した暗号ブロック連鎖により結果の平文を出力バッファoutに格納します。この関数は、メッセージを復号する前にAesSetKeyを呼び出してAES構造体が初期化されている必要があります。この関数は、元のメッセージがAESブロック長に整列していたことを前提としており、入力長がブロック長の倍数であることを期待します。ビルド構成でWOLFSSL_AES_CBC_LENGTH_CHECKSが定義されている場合、これはオプションでチェックおよび強制されます。これは、PKCS#7パディングを自動的に追加するOpenSSLのAES-CBCメソッドとは異なり、ブロック倍数の入力を必要としません。wolfSSL関数と同等のOpenSSL関数を相互運用させるには、OpenSSLコマンドライン関数で-nopadオプションを指定して、wolfSSLのAesCbcEncryptメソッドのように動作し、復号中にエラーを発生させないようにする必要があります。 |
| int | wc_AesCtrEncrypt(Aes * aes, byte * out, const byte * in, word32 sz) AESを使用したCTRモードで、入力バッファinからメッセージを暗号化/復号し、結果の暗号文を出力バッファoutに格納します。この関数は、コンパイル時にWOLFSSL_AES_COUNTERが有効になっている場合のみ有効です。この関数を呼び出す前に、AesSetKeyを介してAES構造体を初期化する必要があります。この関数は復号と暗号化の両方に使用されることに注意してください。注:暗号化と復号に同じAPIを使用することについて。ユーザは暗号化/復号用のAes構造体を区別する必要があります。 |
| int | wc_AesEncryptDirect(Aes * aes, byte * out, const byte * in) この関数は、入力ブロックinの1ブロック暗号化を出力ブロックoutに行います。提供されたAES構造体のキーを使用し、この関数を呼び出す前にwc_AesSetKeyで初期化する必要があります。wc_AesSetKeyはivをNULLに設定して呼び出す必要があります。これは、構成オプションWOLFSSL_AES_DIRECTが有効になっている場合のみ有効です。警告:ほぼすべてのユースケースで、ECBモードは安全性が低いと考えられています。可能な限りECB APIを直接使用することは避けてください。 |
| int | wc_AesDecryptDirect(Aes * aes, byte * out, const byte * in) この関数は、入力ブロックinの1ブロック復号を出力ブロックoutに行います。提供されたAES構造体のキーを使用し、この関数を呼び出す前にwc_AesSetKeyで初期化する必要があります。wc_AesSetKeyはivをNULLに設定して呼び出す必要があります。これは、構成オプションWOLFSSL_AES_DIRECTが有効になっている場合のみ有効です。警告:ほぼすべてのユースケースで、ECBモードは安全性が低いと考えられています。可能な限りECB APIを直接使用することは避けてください。 |
| int | wc_AesSetKeyDirect(Aes * aes, const byte * key, word32 len, const byte * iv, int dir) この関数は、AESを使用したCTRモードのAESキーを設定するために使用されます。指定されたキー、iv(初期化ベクトル)、および暗号化dir(方向)でAESオブジェクトを初期化します。構成オプションWOLFSSL_AES_DIRECTが有効になっている場合のみ有効です。現在、wc_AesSetKeyDirectは内部的にwc_AesSetKeyを使用しています。警告:ほぼすべてのユースケースで、ECBモードは安全性が低いと考えられています。可能な限りECB APIを直接使用することは避けてください。 |
| int | wc_AesGcmSetKey(Aes * aes, const byte * key, word32 len) この関数は、AES GCM(Galois/Counter Mode)のキーを設定するために使用されます。指定されたキーでAESオブジェクトを初期化します。コンパイル時に構成オプションHAVE_AESGCMが有効になっている場合のみ有効です。 |
| int | wc_AesGcmEncrypt(Aes * aes, byte * out, const byte * in, word32 sz, const byte * iv, word32 ivSz, byte * authTag, word32 authTagSz, const byte * authIn, word32 authInSz) この関数は、バッファinに保持されている入力メッセージを暗号化し、結果の暗号文を出力バッファoutに格納します。暗号化の呼び出しごとに新しいiv(初期化ベクトル)が必要です。また、入力認証ベクトルauthInを認証タグauthTagにエンコードします。 |
| int | wc_AesGcmDecrypt(Aes * aes, byte * out, const byte * in, word32 sz, const byte * iv, word32 ivSz, const byte * authTag, word32 authTagSz, const byte * authIn, word32 authInSz) この関数は、バッファinに保持されている入力暗号文を復号し、結果のメッセージテキストを出力バッファoutに格納します。また、入力認証ベクトルauthInを、提供された認証タグauthTagと照合してチェックします。ゼロ以外のエラーコードが返された場合、出力データは未定義です。ただし、呼び出し元は平文データの漏洩を防ぐために、無条件に出力バッファをゼロ化する必要があります。 |
| int | wc_GmacSetKey(Gmac * gmac, const byte * key, word32 len) この関数は、Galoisメッセージ認証に使用されるGMACオブジェクトのキーを初期化および設定します。 |
| int | wc_GmacUpdate(Gmac * gmac, const byte * iv, word32 ivSz, const byte * authIn, word32 authInSz, byte * authTag, word32 authTagSz) この関数は、authIn入力のGmacハッシュを生成し、結果をauthTagバッファに格納します。wc_GmacUpdateを実行した後、生成されたauthTagを既知の認証タグと比較して、メッセージの真正性を検証する必要があります。 |
| int | wc_AesCcmSetKey(Aes * aes, const byte * key, word32 keySz) この関数は、CCM(Counter with CBC-MAC)を使用してAESオブジェクトのキーを設定します。AES構造体へのポインタを受け取り、提供されたキーで初期化します。 |
| int | wc_AesCcmEncrypt(Aes * aes, byte * out, const byte * in, word32 inSz, const byte * nonce, word32 nonceSz, byte * authTag, word32 authTagSz, const byte * authIn, word32 authInSz) この関数は、CCM(Counter with CBC-MAC)を使用して、入力メッセージinを出力バッファoutに暗号化します。その後、authIn入力から認証タグauthTagを計算して格納します。 |
| int | wc_AesCcmDecrypt(Aes * aes, byte * out, const byte * in, word32 inSz, const byte * nonce, word32 nonceSz, const byte * authTag, word32 authTagSz, const byte * authIn, word32 authInSz) この関数は、CCM(Counter with CBC-MAC)を使用して、入力暗号文inを出力バッファoutに復号します。その後、authIn入力から認証タグauthTagを計算します。ゼロ以外のエラーコードが返された場合、出力データは未定義です。ただし、呼び出し元は平文データの漏洩を防ぐために、無条件に出力バッファをゼロ化する必要があります。 |
| int | wc_AesXtsInit(XtsAes * aes, void * heap, int devId) これはAES-XTSコンテキストを初期化するためのものです。使用が完了したら、ユーザがaesキーに対してwc_AesXtsFreeを呼び出す必要があります。 |
| int | wc_AesXtsSetKeyNoInit(XtsAes * aes, const byte * key, word32 len, int dir) これは、最初にwc_AesXtsInit()を呼び出した後、キーを正しい暗号化または復号タイプに設定するのに役立ちます。使用が完了したら、ユーザがaesキーに対してwc_AesXtsFreeを呼び出す必要があります。 |
| int | wc_AesXtsSetKey(XtsAes * aes, const byte * key, word32 len, int dir, void * heap, int devId) これは、キーを正しい暗号化または復号タイプに設定するのに役立ちます。使用が完了したら、ユーザがaesキーに対してwc_AesXtsFreeを呼び出す必要があります。 |
| int | wc_AesXtsEncryptSector(XtsAes * aes, byte * out, const byte * in, word32 sz, word64 sector) wc_AesXtsEncryptと同じプロセスですが、バイト配列の代わりにword64型をtweak値として使用します。これはword64をバイト配列に変換し、wc_AesXtsEncryptを呼び出すだけです。 |
| int | wc_AesXtsDecryptSector(XtsAes * aes, byte * out, const byte * in, word32 sz, word64 sector) wc_AesXtsDecryptと同じプロセスですが、バイト配列の代わりにword64型をtweak値として使用します。これはword64をバイト配列に変換するだけです。 |
| int | wc_AesXtsEncrypt(XtsAes * aes, byte * out, const byte * in, word32 sz, const byte * i, word32 iSz) XTSモードのAES。(XTS)TweakとCipher Text Stealingを使用したXEX暗号化。 |
| int | wc_AesXtsDecrypt(XtsAes * aes, byte * out, const byte * in, word32 sz, const byte * i, word32 iSz) 暗号化と同じプロセスですが、AesキーはAES_DECRYPTIONタイプです。 |
| int | wc_AesXtsFree(XtsAes * aes) これは、XtsAes構造体によって使用されるリソースを解放するためのものです |
| int | wc_AesInit(Aes * aes, void * heap, int devId) Aes構造体を初期化します。使用するヒープヒントと非同期ハードウェアで使用するIDを設定します。使用が完了したら、ユーザがAes構造体に対してwc_AesFreeを呼び出す必要があります。 |
| int | wc_AesFree(Aes * aes) 該当する場合、Aes構造体に関連付けられたリソースを解放します。内部的には時々no-opになることもありますが、新しい環境で使用するためにアプリケーションコードが移植される場合(呼び出しが適用される場合)など、一般的なベストプラクティスとしてすべてのケースで呼び出すことをお勧めします。 |
| int | wc_AesCfbEncrypt(Aes * aes, byte * out, const byte * in, word32 sz) CFBモードのAES。 |
| int | wc_AesCfbDecrypt(Aes * aes, byte * out, const byte * in, word32 sz) CFBモードのAES。 |
| int | wc_AesSivEncrypt(const byte * key, word32 keySz, const byte * assoc, word32 assocSz, const byte * nonce, word32 nonceSz, const byte * in, word32 inSz, byte * siv, byte * out) この関数は、RFC 5297で説明されているSIV(合成初期化ベクトル)暗号化を実行します。 |
| int | wc_AesSivDecrypt(const byte * key, word32 keySz, const byte * assoc, word32 assocSz, const byte * nonce, word32 nonceSz, const byte * in, word32 inSz, byte * siv, byte * out) この関数は、RFC 5297で説明されているSIV(合成初期化ベクトル)復号を実行します。ゼロ以外のエラーコードが返された場合、出力データは未定義です。ただし、呼び出し元は平文データの漏洩を防ぐために、無条件に出力バッファをゼロ化する必要があります。 |
| WOLFSSL_API int | wc_AesEaxEncryptAuth(const byte * key, word32 keySz, byte * out, const byte * in, word32 inSz, const byte * nonce, word32 nonceSz, byte * authTag, word32 authTagSz, const byte * authIn, word32 authInSz) この関数は、「EAX: A Conventional Authenticated-Encryption Mode」(https://eprint.iacr.org/2003/069)で説明されているAES EAX暗号化と認証を実行します。これは、すべての暗号化と認証操作を1つの関数呼び出しで実行する「ワンショット」APIです。 |
| WOLFSSL_API int | wc_AesEaxDecryptAuth(const byte * key, word32 keySz, byte * out, const byte * in, word32 inSz, const byte * nonce, word32 nonceSz, const byte * authTag, word32 authTagSz, const byte * authIn, word32 authInSz) この関数は、「EAX: A Conventional Authenticated-Encryption Mode」(https://eprint.iacr.org/2003/069)で説明されているAES EAX復号と認証を実行します。これは、すべての復号と認証操作を1つの関数呼び出しで実行する「ワンショット」APIです。ゼロ以外のエラーコードが返された場合、出力データは未定義です。ただし、呼び出し元は平文データの漏洩を防ぐために、無条件に出力バッファをゼロ化する必要があります。 |
| WOLFSSL_API int | wc_AesEaxInit(AesEax * eax, const byte * key, word32 keySz, const byte * nonce, word32 nonceSz, const byte * authIn, word32 authInSz) この関数は、認証付き暗号化または復号で使用するAesEaxオブジェクトを初期化します。この関数は、AES EAX増分APIのいずれかと使用する前に、AesEaxオブジェクトに対して呼び出す必要があります。ワンショットEAX API関数を使用する場合は呼び出す必要はありません。この関数で初期化されたすべてのAesEaxインスタンスは、インスタンスの使用が完了したらwc_AesEaxFree()の呼び出しで解放する必要があります。 |
| WOLFSSL_API int | wc_AesEaxEncryptUpdate(AesEax * eax, byte * out, const byte * in, word32 inSz, const byte * authIn, word32 authInSz) この関数は、AES EAXを使用して入力データを暗号化し、オプションで認証ストリームにさらに入力データを追加します。 eax は、wc_AesEaxInit の呼び出しで事前に初期化されている必要があります。 |
| WOLFSSL_API int | wc_AesEaxDecryptUpdate(AesEax * eax, byte * out, const byte * in, word32 inSz, const byte * authIn, word32 authInSz) この関数は、AES EAXを使用して入力データを復号し、オプションで認証ストリームにさらに入力データを追加します。 eax は、wc_AesEaxInit の呼び出しで事前に初期化されている必要があります。 |
| WOLFSSL_API int | wc_AesEaxAuthDataUpdate(AesEax * eax, const byte * authIn, word32 authInSz) この関数は、認証ストリームに入力データを追加します。 eax は、wc_AesEaxInit の呼び出しで事前に初期化されている必要があります。 |
| WOLFSSL_API int | wc_AesEaxEncryptFinal(AesEax * eax, byte * authTag, word32 authTagSz) この関数は、暗号化AEAD操作を完了し、現在の認証ストリームに対して認証タグを生成します。 eax は、wc_AesEaxInit の呼び出しで事前に初期化されている必要があります。AesEax コンテキスト構造体の使用が完了したら、wc_AesEaxFree を使用して必ず解放してください。 |
| WOLFSSL_API int | wc_AesEaxDecryptFinal(AesEax * eax, const byte * authIn, word32 authInSz) この関数は、復号AEAD操作を完了し、認証タグの計算を完了して、ユーザが提供したタグに対してその有効性をチェックします。 eax は、wc_AesEaxInit の呼び出しで事前に初期化されている必要があります。AesEax コンテキスト構造体の使用が完了したら、wc_AesEaxFree を使用して必ず解放してください。 |
| WOLFSSL_API int | wc_AesEaxFree(AesEax * eax) この関数は、AesEaxラッパー構造体内のAesインスタンスによって使用されるリソース、特にキーを解放します。wc_AesEaxInitで初期化された後、すべての必要なEAX操作が完了した時点でAesEax構造体に対して呼び出す必要があります。 |
| int | wc_AesCtsEncrypt(const byte * key, word32 keySz, byte * out, const byte * in, word32 inSz, const byte * iv) この関数は、CTSモードを使用してAES暗号化を実行します。これは、すべての操作を1回の呼び出しで処理するワンショットAPIです。 |
| int | wc_AesCtsDecrypt(const byte * key, word32 keySz, byte * out, const byte * in, word32 inSz, const byte * iv) この関数は、CTSモードを使用してAES復号を実行します。これは、すべての操作を1回の呼び出しで処理するワンショットAPIです。 |
| int | wc_AesCtsEncryptUpdate(Aes * aes, byte * out, word32 * outSz, const byte * in, word32 inSz) この関数は、AES CTS暗号化の更新ステップを実行します。平文のチャンクを処理し、中間データを保存します。 |
| int | wc_AesCtsEncryptFinal(Aes * aes, byte * out, word32 * outSz) この関数は、AES CTS暗号化操作を完了します。残りの平文を処理し、暗号化を完了します。 |
| int | wc_AesCtsDecryptUpdate(Aes * aes, byte * out, word32 * outSz, const byte * in, word32 inSz) この関数は、AES CTS復号の更新ステップを実行します。暗号文のチャンクを処理し、中間データを保存します。 |
| int | wc_AesCtsDecryptFinal(Aes * aes, byte * out, word32 * outSz) この関数は、AES CTS復号操作を完了します。残りの暗号文を処理し、復号を完了します。 |
Functions Documentation
function wc_AesSetKey
int wc_AesSetKey(
Aes * aes,
const byte * key,
word32 len,
const byte * iv,
int dir
)
この関数は、キーを設定し、初期化ベクトルを設定することでAES構造体を初期化します。
Parameters:
- aes 変更するAES構造体へのポインタ
- key 暗号化と復号のための16、24、または32バイトの秘密鍵
- len 渡されたキーの長さ
- iv キーの初期化に使用される初期化ベクトルへのポインタ
- dir 暗号の方向。暗号化する場合はAES_ENCRYPTIONを設定し、復号する場合はAES_DECRYPTIONを設定します。一部のモード(CFBおよびCTR)の方向は常にAES_ENCRYPTIONです。
See:
Return:
- 0 キーと初期化ベクトルの設定に成功した場合に返されます。
- BAD_FUNC_ARG キーの長さが無効な場合に返されます。
Example
Aes enc;
int ret = 0;
byte key[] = { 16、24、または32バイトのキー };
byte iv[] = { 16バイトのiv };
if (ret = wc_AesInit(&enc, HEAP_HINT, INVALID_DEVID) != 0) {
// aes keyの初期化に失敗
}
if (ret = wc_AesSetKey(&enc, key, AES_BLOCK_SIZE, iv,
AES_ENCRYPTION) != 0) {
// aes keyの設定に失敗
}
function wc_AesSetIV
int wc_AesSetIV(
Aes * aes,
const byte * iv
)
この関数は、特定のAESオブジェクトの初期化ベクトルを設定します。この関数を呼び出す前にAESオブジェクトを初期化する必要があります。
Parameters:
- aes 初期化ベクトルを設定するAES構造体へのポインタ
- iv AES構造体を初期化するために使用される初期化ベクトル。値がNULLの場合、デフォルトの動作はivを0に初期化します。
See:
Return:
- 0 初期化ベクトルの設定に成功した場合に返されます。
- BAD_FUNC_ARG AESポインタがNULLの場合に返されます。
Example
Aes enc;
// enc keyを設定
byte iv[] = { 16バイトのiv };
if (ret = wc_AesSetIV(&enc, iv) != 0) {
// aes ivの設定に失敗
}
function wc_AesCbcEncrypt
int wc_AesCbcEncrypt(
Aes * aes,
byte * out,
const byte * in,
word32 sz
)
入力バッファinから平文メッセージを暗号化し、AESを使用した暗号ブロック連鎖により結果の暗号文を出力バッファoutに格納します。この関数は、メッセージを暗号化する前にAesSetKeyを呼び出してAESオブジェクトが初期化されている必要があります。この関数は、入力メッセージがAESブロック長に整列していることを前提としており、入力長がブロック長の倍数であることを期待します。ビルド構成でWOLFSSL_AES_CBC_LENGTH_CHECKSが定義されている場合、これはオプションでチェックおよび強制されます。ブロック倍数の入力を保証するために、事前にPKCS#7スタイルのパディングを追加する必要があります。これは、自動的にパディングを追加するOpenSSLのAES-CBCメソッドとは異なります。wolfSSLと対応するOpenSSL関数を相互運用させるには、OpenSSLコマンドライン関数で-nopadオプションを指定して、wolfSSLのAesCbcEncryptメソッドのように動作し、暗号化中に余分なパディングを追加しないようにする必要があります。
Parameters:
- aes データを暗号化するために使用されるAESオブジェクトへのポインタ
- out 暗号化されたメッセージの暗号文を格納する出力バッファへのポインタ
- in 暗号化されるメッセージを含む入力バッファへのポインタ
- sz 入力メッセージのサイズ
See:
Return:
- 0 メッセージの暗号化に成功した場合に返されます。
- BAD_ALIGN_E ブロック整列エラーで返される場合があります。
- BAD_LENGTH_E ライブラリがWOLFSSL_AES_CBC_LENGTH_CHECKSでビルドされている場合、入力長がAESブロック長の倍数でない場合に返されます。
Example
Aes enc;
int ret = 0;
// wc_AesInitとwc_AesSetKeyを使用してencを初期化、方向は
// AES_ENCRYPTIONを使用
byte msg[AES_BLOCK_SIZE * n]; // 16バイトの倍数
// msgにデータを入力
byte cipher[AES_BLOCK_SIZE * n]; // 16バイトの倍数
if ((ret = wc_AesCbcEncrypt(&enc, cipher, message, sizeof(msg))) != 0 ) {
// ブロック整列エラー
}
function wc_AesCbcDecrypt
int wc_AesCbcDecrypt(
Aes * aes,
byte * out,
const byte * in,
word32 sz
)
入力バッファinから暗号を復号し、AESを使用した暗号ブロック連鎖により結果の平文を出力バッファoutに格納します。この関数は、メッセージを復号する前にAesSetKeyを呼び出してAES構造体が初期化されている必要があります。この関数は、元のメッセージがAESブロック長に整列していたことを前提としており、入力長がブロック長の倍数であることを期待します。ビルド構成でWOLFSSL_AES_CBC_LENGTH_CHECKSが定義されている場合、これはオプションでチェックおよび強制されます。これは、PKCS#7パディングを自動的に追加するOpenSSLのAES-CBCメソッドとは異なり、ブロック倍数の入力を必要としません。wolfSSL関数と同等のOpenSSL関数を相互運用させるには、OpenSSLコマンドライン関数で-nopadオプションを指定して、wolfSSLのAesCbcEncryptメソッドのように動作し、復号中にエラーを発生させないようにする必要があります。
Parameters:
- aes データを復号するために使用されるAESオブジェクトへのポインタ。
- out 復号されたメッセージの平文を格納する出力バッファへのポインタ。 サイズはAES_BLOCK_LENGTHの倍数である必要があり、必要に応じてパディングされます
- in 復号される暗号文を含む入力バッファへのポインタ。 サイズはAES_BLOCK_LENGTHの倍数である必要があり、必要に応じてパディングされます
- sz 入力メッセージのサイズ。
See:
Return:
- 0 メッセージの復号に成功した場合に返されます。
- BAD_ALIGN_E ブロック整列エラーで返される場合があります。
- BAD_LENGTH_E ライブラリがWOLFSSL_AES_CBC_LENGTH_CHECKSでビルドされている場合、入力長がAESブロック長の倍数でない場合に返されます。
Example
Aes dec;
int ret = 0;
// wc_AesInitとwc_AesSetKeyを使用してdecを初期化、方向は
// AES_DECRYPTIONを使用
byte cipher[AES_BLOCK_SIZE * n]; // 16バイトの倍数
// cipherに暗号文を入力
byte plain [AES_BLOCK_SIZE * n];
if ((ret = wc_AesCbcDecrypt(&dec, plain, cipher, sizeof(cipher))) != 0 ) {
// ブロック整列エラー
}
function wc_AesCtrEncrypt
int wc_AesCtrEncrypt(
Aes * aes,
byte * out,
const byte * in,
word32 sz
)
AESを使用したCTRモードで、入力バッファinからメッセージを暗号化/復号し、結果の暗号文を出力バッファoutに格納します。この関数は、コンパイル時にWOLFSSL_AES_COUNTERが有効になっている場合のみ有効です。この関数を呼び出す前に、AesSetKeyを介してAES構造体を初期化する必要があります。この関数は復号と暗号化の両方に使用されることに注意してください。注:暗号化と復号に同じAPIを使用することについて。ユーザは暗号化/復号用のAes構造体を区別する必要があります。
Parameters:
- aes データを復号するために使用されるAESオブジェクトへのポインタ
- out 暗号化されたメッセージの暗号文を格納する出力バッファへのポインタ サイズはAES_BLOCK_LENGTHの倍数である必要があり、必要に応じてパディングされます
- in 暗号化される平文を含む入力バッファへのポインタ サイズはAES_BLOCK_LENGTHの倍数である必要があり、必要に応じてパディングされます
- sz 入力平文のサイズ
See: wc_AesSetKey
Return: int wolfSSLエラーまたは成功ステータスに対応する整数値
Example
Aes enc;
Aes dec;
// wc_AesInitとwc_AesSetKeyDirectを使用してencとdecを初期化、方向は
// AES_ENCRYPTIONを使用。基盤となるAPIは暗号化のみを呼び出し、
// デフォルトで暗号に対して暗号化を呼び出すと暗号の復号が
// 行われるため
byte msg[AES_BLOCK_SIZE * n]; // nは正の整数で、msgを
16バイトの倍数にする
// plainにメッセージテキストを入力
byte cipher[AES_BLOCK_SIZE * n];
byte decrypted[AES_BLOCK_SIZE * n];
wc_AesCtrEncrypt(&enc, cipher, msg, sizeof(msg)); // plainを暗号化
wc_AesCtrEncrypt(&dec, decrypted, cipher, sizeof(cipher));
// 暗号文を復号
function wc_AesEncryptDirect
int wc_AesEncryptDirect(
Aes * aes,
byte * out,
const byte * in
)
この関数は、入力ブロックinの1ブロック暗号化を出力ブロックoutに行います。提供されたAES構造体のキーを使用し、この関数を呼び出す前にwc_AesSetKeyで初期化する必要があります。wc_AesSetKeyはivをNULLに設定して呼び出す必要があります。これは、構成オプションWOLFSSL_AES_DIRECTが有効になっている場合のみ有効です。警告:ほぼすべてのユースケースで、ECBモードは安全性が低いと考えられています。可能な限りECB APIを直接使用することは避けてください。
Parameters:
- aes データを暗号化するために使用されるAESオブジェクトへのポインタ
- out 暗号化されたメッセージの暗号文を格納する出力バッファへのポインタ
- in 暗号化される平文を含む入力バッファへのポインタ
See:
Return: int wolfSSLエラーまたは成功ステータスに対応する整数値
Example
Aes enc;
// wc_AesInitとwc_AesSetKeyを使用してencを初期化、方向は
// AES_ENCRYPTIONを使用
byte msg [AES_BLOCK_SIZE]; // 16バイト
// msgを暗号化する平文で初期化
byte cipher[AES_BLOCK_SIZE];
wc_AesEncryptDirect(&enc, cipher, msg);
function wc_AesDecryptDirect
int wc_AesDecryptDirect(
Aes * aes,
byte * out,
const byte * in
)
この関数は、入力ブロックinの1ブロック復号を出力ブロックoutに行います。提供されたAES構造体のキーを使用し、この関数を呼び出す前にwc_AesSetKeyで初期化する必要があります。wc_AesSetKeyはivをNULLに設定して呼び出す必要があります。これは、構成オプションWOLFSSL_AES_DIRECTが有効になっている場合のみ有効です。警告:ほぼすべてのユースケースで、ECBモードは安全性が低いと考えられています。可能な限りECB APIを直接使用することは避けてください。
Parameters:
- aes データを暗号化するために使用されるAESオブジェクトへのポインタ
- out 復号された暗号文の平文を格納する出力バッファへのポインタ
- in 復号される暗号文を含む入力バッファへのポインタ
See:
Return: int wolfSSLエラーまたは成功ステータスに対応する整数値
Example
Aes dec;
// wc_AesInitとwc_AesSetKeyを使用してencを初期化、方向は
// AES_DECRYPTIONを使用
byte cipher [AES_BLOCK_SIZE]; // 16バイト
// cipherを復号する暗号文で初期化
byte msg[AES_BLOCK_SIZE];
wc_AesDecryptDirect(&dec, msg, cipher);
function wc_AesSetKeyDirect
int wc_AesSetKeyDirect(
Aes * aes,
const byte * key,
word32 len,
const byte * iv,
int dir
)
この関数は、AESを使用したCTRモードのAESキーを設定するために使用されます。指定されたキー、iv(初期化ベクトル)、および暗号化dir(方向)でAESオブジェクトを初期化します。構成オプションWOLFSSL_AES_DIRECTが有効になっている場合のみ有効です。現在、wc_AesSetKeyDirectは内部的にwc_AesSetKeyを使用しています。警告:ほぼすべてのユースケースで、ECBモードは安全性が低いと考えられています。可能な限りECB APIを直接使用することは避けてください。
Parameters:
- aes データを暗号化するために使用されるAESオブジェクトへのポインタ
- key 暗号化と復号のための16、24、または32バイトの秘密鍵
- len 渡されたキーの長さ
- iv キーの初期化に使用される初期化ベクトル
- dir 暗号の方向。暗号化する場合はAES_ENCRYPTIONを設定し、復号する場合はAES_DECRYPTIONを設定します。(wolfssl/wolfcrypt/aes.hの列挙型を参照)(注:Aesカウンタモード(ストリーム暗号)でwc_AesSetKeyDirectを使用する場合、暗号化と復号の両方にAES_ENCRYPTIONのみを使用)
See:
Return:
- 0 キーの設定に成功した場合に返されます。
- BAD_FUNC_ARG 指定されたキーの長さが無効な場合に返されます。
Example
Aes enc;
int ret = 0;
byte key[] = { 16、24、または32バイトのキー };
byte iv[] = { 16バイトのiv };
if (ret = wc_AesInit(&enc, HEAP_HINT, INVALID_DEVID) != 0) {
// aes keyの初期化に失敗
}
if (ret = wc_AesSetKeyDirect(&enc, key, sizeof(key), iv,
AES_ENCRYPTION) != 0) {
// aes keyの設定に失敗
}
function wc_AesGcmSetKey
int wc_AesGcmSetKey(
Aes * aes,
const byte * key,
word32 len
)
この関数は、AES GCM(Galois/Counter Mode)のキーを設定するために使用されます。指定されたキーでAESオブジェクトを初期化します。コンパイル時に構成オプションHAVE_AESGCMが有効になっている場合のみ有効です。
Parameters:
- aes データを暗号化するために使用されるAESオブジェクトへのポインタ
- key 暗号化と復号のための16、24、または32バイトの秘密鍵
- len 渡されたキーの長さ
See:
Return:
- 0 キーの設定に成功した場合に返されます。
- BAD_FUNC_ARG 指定されたキーの長さが無効な場合に返されます。
Example
Aes enc;
int ret = 0;
byte key[] = { 16、24、32バイトのキー };
if (ret = wc_AesInit(&enc, HEAP_HINT, INVALID_DEVID) != 0) {
// aes keyの初期化に失敗
}
if (ret = wc_AesGcmSetKey(&enc, key, sizeof(key)) != 0) {
// aes keyの設定に失敗
}
function wc_AesGcmEncrypt
int wc_AesGcmEncrypt(
Aes * aes,
byte * out,
const byte * in,
word32 sz,
const byte * iv,
word32 ivSz,
byte * authTag,
word32 authTagSz,
const byte * authIn,
word32 authInSz
)
この関数は、バッファinに保持されている入力メッセージを暗号化し、結果の暗号文を出力バッファoutに格納します。暗号化の呼び出しごとに新しいiv(初期化ベクトル)が必要です。また、入力認証ベクトルauthInを認証タグauthTagにエンコードします。
Parameters:
- aes データを暗号化するために使用されるAESオブジェクトへのポインタ
- out 暗号文を格納する出力バッファへのポインタ サイズはinのサイズ(sz)と一致する必要があります
- in 暗号化するメッセージを保持する入力バッファへのポインタ サイズはAES_BLOCK_LENGTHの倍数である必要があり、必要に応じてパディングされます
- sz 暗号化する入力メッセージの長さ
- iv 初期化ベクトルを含むバッファへのポインタ
- ivSz 初期化ベクトルの長さ
- authTag 認証タグを格納するバッファへのポインタ
- authTagSz 希望する認証タグの長さ
- authIn 入力認証ベクトルを含むバッファへのポインタ
- authInSz 入力認証ベクトルの長さ
See:
Return: 0 入力メッセージの暗号化に成功した場合に返されます
Example
Aes enc;
// wc_AesInit()とwc_AesGcmSetKeyを呼び出してAes構造体を初期化
byte plain[AES_BLOCK_LENGTH * n]; // nは正の整数で
plainを16バイトの倍数にする
// plainを暗号化するメッセージで初期化
byte cipher[sizeof(plain)];
byte iv[] = // 16バイトのiv
byte authTag[AUTH_TAG_LENGTH];
byte authIn[] = // 認証ベクトル
wc_AesGcmEncrypt(&enc, cipher, plain, sizeof(cipher), iv, sizeof(iv),
authTag, sizeof(authTag), authIn, sizeof(authIn));
function wc_AesGcmDecrypt
int wc_AesGcmDecrypt(
Aes * aes,
byte * out,
const byte * in,
word32 sz,
const byte * iv,
word32 ivSz,
const byte * authTag,
word32 authTagSz,
const byte * authIn,
word32 authInSz
)
この関数は、バッファinに保持されている入力暗号文を復号し、結果のメッセージテキストを出力バッファoutに格納します。また、入力認証ベクトルauthInを、提供された認証タグauthTagと照合してチェックします。ゼロ以外のエラーコードが返された場合、出力データは未定義です。ただし、呼び出し元は平文データの漏洩を防ぐために、無条件に出力バッファをゼロ化する必要があります。
Parameters:
- aes データを暗号化するために使用されるAESオブジェクトへのポインタ
- out メッセージテキストを格納する出力バッファへのポインタ サイズはinのサイズ(sz)と一致する必要があります
- in 復号する暗号文を保持する入力バッファへのポインタ サイズはAES_BLOCK_LENGTHの倍数である必要があり、必要に応じてパディングされます
- sz 復号する暗号文の長さ
- iv 初期化ベクトルを含むバッファへのポインタ
- ivSz 初期化ベクトルの長さ
- authTag 認証タグを含むバッファへのポインタ
- authTagSz 希望する認証タグの長さ
- authIn 入力認証ベクトルを含むバッファへのポインタ
- authInSz 入力認証ベクトルの長さ
See:
Return:
- 0 入力メッセージの復号と認証に成功した場合に返されます
- AES_GCM_AUTH_E 認証タグが提供された認証コードベクトルauthTagと一致しない場合に返されます。
Example
Aes enc; // wc_AesGcmEncryptに渡されたものと同じ構造体を使用可能
// まだ完了していない場合は、wc_AesInitとwc_AesGcmSetKeyを呼び出して
// aes構造体を初期化
byte cipher[AES_BLOCK_LENGTH * n]; // nは正の整数で
cipherを16バイトの倍数にする
// cipherを復号する暗号文で初期化
byte output[sizeof(cipher)];
byte iv[] = // 16バイトのiv
byte authTag[AUTH_TAG_LENGTH];
byte authIn[] = // 認証ベクトル
wc_AesGcmDecrypt(&enc, output, cipher, sizeof(cipher), iv, sizeof(iv),
authTag, sizeof(authTag), authIn, sizeof(authIn));
function wc_GmacSetKey
int wc_GmacSetKey(
Gmac * gmac,
const byte * key,
word32 len
)
この関数は、Galoisメッセージ認証に使用されるGMACオブジェクトのキーを初期化および設定します。
Parameters:
- gmac 認証に使用されるgmacオブジェクトへのポインタ
- key 認証のための16、24、または32バイトの秘密鍵
- len キーの長さ
See:
Return:
- 0 キーの設定に成功した場合に返されます
- BAD_FUNC_ARG キーの長さが無効な場合に返されます。
Example
Gmac gmac;
key[] = { 16、24、または32バイト長のキー };
wc_AesInit(gmac.aes, HEAP_HINT, INVALID_DEVID); // devIdが更新されていることを確認
wc_GmacSetKey(&gmac, key, sizeof(key));
function wc_GmacUpdate
int wc_GmacUpdate(
Gmac * gmac,
const byte * iv,
word32 ivSz,
const byte * authIn,
word32 authInSz,
byte * authTag,
word32 authTagSz
)
この関数は、authIn入力のGmacハッシュを生成し、結果をauthTagバッファに格納します。wc_GmacUpdateを実行した後、生成されたauthTagを既知の認証タグと比較して、メッセージの真正性を検証する必要があります。
Parameters:
- gmac 認証に使用されるgmacオブジェクトへのポインタ
- iv ハッシュに使用される初期化ベクトル
- ivSz 使用される初期化ベクトルのサイズ
- authIn 検証する認証ベクトルを含むバッファへのポインタ
- authInSz 認証ベクトルのサイズ
- authTag Gmacハッシュを格納する出力バッファへのポインタ
- authTagSz Gmacハッシュを格納するために使用される出力バッファのサイズ
See:
Return: 0 Gmacハッシュの計算に成功した場合に返されます。
Example
Gmac gmac;
key[] = { 16、24、または32バイト長のキー };
iv[] = { 16バイト長のiv };
wc_AesInit(gmac.aes, HEAP_HINT, INVALID_DEVID); // devIdが更新されていることを確認
wc_GmacSetKey(&gmac, key, sizeof(key));
authIn[] = { 16バイトの認証入力 };
tag[AES_BLOCK_SIZE]; // 認証コードを格納
wc_GmacUpdate(&gmac, iv, sizeof(iv), authIn, sizeof(authIn), tag,
sizeof(tag));
function wc_AesCcmSetKey
int wc_AesCcmSetKey(
Aes * aes,
const byte * key,
word32 keySz
)
この関数は、CCM(Counter with CBC-MAC)を使用してAESオブジェクトのキーを設定します。AES構造体へのポインタを受け取り、提供されたキーで初期化します。
Parameters:
- aes 提供されたキーを格納するaes構造体
- key 暗号化と復号のための16、24、または32バイトの秘密鍵
- keySz 提供されたキーのサイズ
See:
Return: none
Example
Aes enc;
key[] = { 16、24、または32バイト長のキー };
wc_AesInit(&enc, HEAP_HINT, INVALID_DEVID); // devIdが更新されていることを確認
wc_AesCcmSetKey(&enc, key, sizeof(key));
function wc_AesCcmEncrypt
int wc_AesCcmEncrypt(
Aes * aes,
byte * out,
const byte * in,
word32 inSz,
const byte * nonce,
word32 nonceSz,
byte * authTag,
word32 authTagSz,
const byte * authIn,
word32 authInSz
)
この関数は、CCM(Counter with CBC-MAC)を使用して、入力メッセージinを出力バッファoutに暗号化します。その後、authIn入力から認証タグauthTagを計算して格納します。
Parameters:
- aes データを暗号化するために使用されるAESオブジェクトへのポインタ
- out 暗号文を格納する出力バッファへのポインタ
- in 暗号化するメッセージを保持する入力バッファへのポインタ
- sz 暗号化する入力メッセージの長さ
- nonce ナンス(1回のみ使用される数値)を含むバッファへのポインタ
- nonceSz ナンスの長さ
- authTag 認証タグを格納するバッファへのポインタ
- authTagSz 希望する認証タグの長さ
- authIn 入力認証ベクトルを含むバッファへのポインタ
- authInSz 入力認証ベクトルの長さ
See:
Return: none
Example
Aes enc;
// wc_AesInitとwc_AesCcmSetKeyでencを初期化
nonce[] = { ナンスを初期化 };
plain[] = { 平文メッセージ };
cipher[sizeof(plain)];
authIn[] = { 16バイトの認証入力 };
tag[AES_BLOCK_SIZE]; // 認証コードを格納
wc_AesCcmEncrypt(&enc, cipher, plain, sizeof(plain), nonce, sizeof(nonce),
tag, sizeof(tag), authIn, sizeof(authIn));
function wc_AesCcmDecrypt
int wc_AesCcmDecrypt(
Aes * aes,
byte * out,
const byte * in,
word32 inSz,
const byte * nonce,
word32 nonceSz,
const byte * authTag,
word32 authTagSz,
const byte * authIn,
word32 authInSz
)
この関数は、CCM(Counter with CBC-MAC)を使用して、入力暗号文inを出力バッファoutに復号します。その後、authIn入力から認証タグauthTagを計算します。ゼロ以外のエラーコードが返された場合、出力データは未定義です。ただし、呼び出し元は平文データの漏洩を防ぐために、無条件に出力バッファをゼロ化する必要があります。
Parameters:
- aes データを暗号化するために使用されるAESオブジェクトへのポインタ
- out 暗号文を格納する出力バッファへのポインタ
- in 暗号化するメッセージを保持する入力バッファへのポインタ
- sz 復号する入力暗号文の長さ
- nonce ナンス(1回のみ使用される数値)を含むバッファへのポインタ
- nonceSz ナンスの長さ
- authTag 認証タグを格納するバッファへのポインタ
- authTagSz 希望する認証タグの長さ
- authIn 入力認証ベクトルを含むバッファへのポインタ
- authInSz 入力認証ベクトルの長さ
See:
Return:
- 0 入力メッセージの復号に成功した場合に返されます
- AES_CCM_AUTH_E 認証タグが提供された認証コードベクトルauthTagと一致しない場合に返されます。
Example
Aes dec;
// wc_AesInitとwc_AesCcmSetKeyでdecを初期化
nonce[] = { ナンスを初期化 };
cipher[] = { 暗号化されたメッセージ };
plain[sizeof(cipher)];
authIn[] = { 16バイトの認証入力 };
tag[AES_BLOCK_SIZE] = { 検証のために受信した認証タグ };
int return = wc_AesCcmDecrypt(&dec, plain, cipher, sizeof(cipher),
nonce, sizeof(nonce),tag, sizeof(tag), authIn, sizeof(authIn));
if(return != 0) {
// 復号エラー、無効な認証コード
}
function wc_AesXtsInit
int wc_AesXtsInit(
XtsAes * aes,
void * heap,
int devId
)
これはAES-XTSコンテキストを初期化するためのものです。使用が完了したら、ユーザがaesキーに対してwc_AesXtsFreeを呼び出す必要があります。
Parameters:
- aes 暗号化/復号プロセスのためのAESキー
- heap メモリに使用するヒープヒント。NULLでも可
- devId 暗号コールバックまたは非同期ハードウェアで使用するID。使用しない場合はINVALID_DEVID(-2)に設定
See:
Return: 0 成功
Example
XtsAes aes;
if(wc_AesXtsInit(&aes, NULL, INVALID_DEVID) != 0)
{
// エラーを処理
}
if(wc_AesXtsSetKeyNoInit(&aes, key, sizeof(key), AES_ENCRYPTION) != 0)
{
// エラーを処理
}
wc_AesXtsFree(&aes);
function wc_AesXtsSetKeyNoInit
int wc_AesXtsSetKeyNoInit(
XtsAes * aes,
const byte * key,
word32 len,
int dir
)
これは、最初にwc_AesXtsInit()を呼び出した後、キーを正しい暗号化または復号タイプに設定するのに役立ちます。使用が完了したら、ユーザがaesキーに対してwc_AesXtsFreeを呼び出す必要があります。
Parameters:
- aes 暗号化/復号プロセスのためのAESキー
- key aesキー | tweakキーを保持するバッファ
- len キーバッファの長さ(バイト単位)。キーサイズの2倍である必要があります。 つまり、16バイトのキーの場合は32です。
- dir 方向、AES_ENCRYPTIONまたはAES_DECRYPTION
See:
Return: 0 成功
Example
XtsAes aes;
if(wc_AesXtsInit(&aes, NULL, 0) != 0)
{
// エラーを処理
}
if(wc_AesXtsSetKeyNoInit(&aes, key, sizeof(key), AES_ENCRYPTION, NULL, 0)
!= 0)
{
// エラーを処理
}
wc_AesXtsFree(&aes);
function wc_AesXtsSetKey
int wc_AesXtsSetKey(
XtsAes * aes,
const byte * key,
word32 len,
int dir,
void * heap,
int devId
)
これは、キーを正しい暗号化または復号タイプに設定するのに役立ちます。使用が完了したら、ユーザがaesキーに対してwc_AesXtsFreeを呼び出す必要があります。
Parameters:
- aes 暗号化/復号プロセスのためのAESキー
- key aesキー | tweakキーを保持するバッファ
- len キーバッファの長さ(バイト単位)。キーサイズの2倍である必要があります。 つまり、16バイトのキーの場合は32です。
- dir 方向、AES_ENCRYPTIONまたはAES_DECRYPTION
- heap メモリに使用するヒープヒント。NULLでも可
- devId 暗号コールバックまたは非同期ハードウェアで使用するID。使用しない場合はINVALID_DEVID(-2)に設定
See:
Return: 0 成功
Example
XtsAes aes;
if(wc_AesXtsSetKey(&aes, key, sizeof(key), AES_ENCRYPTION, NULL, INVALID_DEVID) != 0)
{
// エラーを処理
}
wc_AesXtsFree(&aes);
function wc_AesXtsEncryptSector
int wc_AesXtsEncryptSector(
XtsAes * aes,
byte * out,
const byte * in,
word32 sz,
word64 sector
)
wc_AesXtsEncryptと同じプロセスですが、バイト配列の代わりにword64型をtweak値として使用します。これはword64をバイト配列に変換し、wc_AesXtsEncryptを呼び出すだけです。
Parameters:
- aes ブロック暗号化/復号に使用するAESキー
- out 暗号文を保持する出力バッファ
- in 暗号化する入力平文バッファ
- sz outとinバッファの両方のサイズ
- sector tweakに使用する値
See:
Return: 0 成功
Example
XtsAes aes;
unsigned char plain[SIZE];
unsigned char cipher[SIZE];
word64 s = VALUE;
// AES_ENCRYPTIONをdirとしてキーを設定
if(wc_AesXtsEncryptSector(&aes, cipher, plain, SIZE, s) != 0)
{
// エラーを処理
}
wc_AesXtsFree(&aes);
function wc_AesXtsDecryptSector
int wc_AesXtsDecryptSector(
XtsAes * aes,
byte * out,
const byte * in,
word32 sz,
word64 sector
)
wc_AesXtsDecryptと同じプロセスですが、バイト配列の代わりにword64型をtweak値として使用します。これはword64をバイト配列に変換するだけです。
Parameters:
- aes ブロック暗号化/復号に使用するAESキー
- out 平文を保持する出力バッファ
- in 復号する入力暗号文バッファ
- sz outとinバッファの両方のサイズ
- sector tweakに使用する値
See:
Return: 0 成功
Example
XtsAes aes;
unsigned char plain[SIZE];
unsigned char cipher[SIZE];
word64 s = VALUE;
// AES_DECRYPTIONをdirとしてaesキーを設定し、tweakはAES_ENCRYPTIONで設定
if(wc_AesXtsDecryptSector(&aes, plain, cipher, SIZE, s) != 0)
{
// エラーを処理
}
wc_AesXtsFree(&aes);
function wc_AesXtsEncrypt
int wc_AesXtsEncrypt(
XtsAes * aes,
byte * out,
const byte * in,
word32 sz,
const byte * i,
word32 iSz
)
XTSモードのAES。(XTS)TweakとCipher Text Stealingを使用したXEX暗号化。
Parameters:
- aes ブロック暗号化/復号に使用するAESキー
- out 暗号文を保持する出力バッファ
- in 暗号化する入力平文バッファ
- sz outとinバッファの両方のサイズ
- i tweakに使用する値
- iSz iバッファのサイズ、常にAES_BLOCK_SIZEである必要がありますが、この入力を持つことで、ユーザが関数を呼び出す方法についてのサニティチェックが追加されます。
See:
Return: 0 成功
Example
XtsAes aes;
unsigned char plain[SIZE];
unsigned char cipher[SIZE];
unsigned char i[AES_BLOCK_SIZE];
// AES_ENCRYPTIONをdirとしてキーを設定
if(wc_AesXtsEncrypt(&aes, cipher, plain, SIZE, i, sizeof(i)) != 0)
{
// エラーを処理
}
wc_AesXtsFree(&aes);
function wc_AesXtsDecrypt
int wc_AesXtsDecrypt(
XtsAes * aes,
byte * out,
const byte * in,
word32 sz,
const byte * i,
word32 iSz
)
暗号化と同じプロセスですが、AesキーはAES_DECRYPTIONタイプです。
Parameters:
- aes ブロック暗号化/復号に使用するAESキー
- out 平文を保持する出力バッファ
- in 復号する入力暗号文バッファ
- sz outとinバッファの両方のサイズ
- i tweakに使用する値
- iSz iバッファのサイズ、常にAES_BLOCK_SIZEである必要がありますが、この入力を持つことで、ユーザが関数を呼び出す方法についてのサニティチェックが追加されます。
See:
Return: 0 成功
Example
XtsAes aes;
unsigned char plain[SIZE];
unsigned char cipher[SIZE];
unsigned char i[AES_BLOCK_SIZE];
// AES_DECRYPTIONをdirとしてキーを設定し、tweakはAES_ENCRYPTIONで設定
if(wc_AesXtsDecrypt(&aes, plain, cipher, SIZE, i, sizeof(i)) != 0)
{
// エラーを処理
}
wc_AesXtsFree(&aes);
function wc_AesXtsFree
int wc_AesXtsFree(
XtsAes * aes
)
これは、XtsAes構造体によって使用されるリソースを解放するためのものです
Parameters:
- aes 解放するAESキー
See:
Return: 0 成功
Example
XtsAes aes;
if(wc_AesXtsSetKey(&aes, key, sizeof(key), AES_ENCRYPTION, NULL, 0) != 0)
{
// エラーを処理
}
wc_AesXtsFree(&aes);
function wc_AesInit
int wc_AesInit(
Aes * aes,
void * heap,
int devId
)
Aes構造体を初期化します。使用するヒープヒントと非同期ハードウェアで使用するIDを設定します。使用が完了したら、ユーザがAes構造体に対してwc_AesFreeを呼び出す必要があります。
Parameters:
- aes 初期化するaes構造体
- heap 必要に応じてmalloc / freeに使用するヒープヒント
- devId 暗号コールバックまたは非同期ハードウェアで使用するID。使用しない場合はINVALID_DEVID(-2)に設定
See:
Return: 0 成功
Example
Aes enc;
void* hint = NULL;
int devId = INVALID_DEVID; // 非同期を使用しない場合はINVALID_DEVIDがデフォルト
// 使用する場合はここでヒープヒントを設定可能
wc_AesInit(&enc, hint, devId);
function wc_AesFree
int wc_AesFree(
Aes * aes
)
該当する場合、Aes構造体に関連付けられたリソースを解放します。内部的には時々no-opになることもありますが、新しい環境で使用するためにアプリケーションコードが移植される場合(呼び出しが適用される場合)など、一般的なベストプラクティスとしてすべてのケースで呼び出すことをお勧めします。
Parameters:
- aes 解放するaes構造体
See: wc_AesInit
Return: no return(void関数)
Example
Aes enc;
void* hint = NULL;
int devId = INVALID_DEVID; // 非同期を使用しない場合はINVALID_DEVIDがデフォルト
// 使用する場合はここでヒープヒントを設定可能
wc_AesInit(&enc, hint, devId);
// ... 興味深いことをいくつか行う ...
wc_AesFree(&enc);
function wc_AesCfbEncrypt
int wc_AesCfbEncrypt(
Aes * aes,
byte * out,
const byte * in,
word32 sz
)
CFBモードのAES。
Parameters:
- aes ブロック暗号化/復号に使用するAESキー
- out 暗号文を保持する出力バッファ(少なくとも入力バッファと同じ大きさである必要があります)
- in 暗号化する入力平文バッファ
- sz 入力バッファのサイズ
See:
Return: 0 成功、失敗時は負のエラー値
Example
Aes aes;
unsigned char plain[SIZE];
unsigned char cipher[SIZE];
// 暗号化と復号の両方にAES_ENCRYPTIONをdirとしてキーを設定
if(wc_AesCfbEncrypt(&aes, cipher, plain, SIZE) != 0)
{
// エラーを処理
}
function wc_AesCfbDecrypt
int wc_AesCfbDecrypt(
Aes * aes,
byte * out,
const byte * in,
word32 sz
)
CFBモードのAES。
Parameters:
- aes ブロック暗号化/復号に使用するAESキー
- out 復号されたテキストを保持する出力バッファ(少なくとも入力バッファと同じ大きさである必要があります)
- in 復号する入力バッファ
- sz 入力バッファのサイズ
See:
Return: 0 成功、失敗時は負のエラー値
Example
Aes aes;
unsigned char plain[SIZE];
unsigned char cipher[SIZE];
// 暗号化と復号の両方にAES_ENCRYPTIONをdirとしてキーを設定
if(wc_AesCfbDecrypt(&aes, plain, cipher, SIZE) != 0)
{
// エラーを処理
}
function wc_AesSivEncrypt
int wc_AesSivEncrypt(
const byte * key,
word32 keySz,
const byte * assoc,
word32 assocSz,
const byte * nonce,
word32 nonceSz,
const byte * in,
word32 inSz,
byte * siv,
byte * out
)
この関数は、RFC 5297で説明されているSIV(合成初期化ベクトル)暗号化を実行します。
Parameters:
- key 使用するキーを含むバイトバッファ。
- keySz キーバッファの長さ(バイト単位)。
- assoc 追加の認証された関連データ(AD)。
- assocSz ADバッファの長さ(バイト単位)。
- nonce 1回のみ使用される数値。アルゴリズムによってADと同じ方法で使用されます。
- nonceSz nonceバッファの長さ(バイト単位)。
- in 暗号化する平文バッファ。
- inSz 平文バッファの長さ。
- siv S2Vによって出力されるSIV(RFC 5297 2.4を参照)。
- out 暗号文を保持するバッファ。平文バッファと同じ長さである必要があります。
See: wc_AesSivDecrypt
Return:
- 0 暗号化に成功した場合。
- BAD_FUNC_ARG key、SIV、または出力バッファがNULLの場合に返されます。また、キーサイズが32、48、または64バイトでない場合にも返されます。
- Other AESまたはCMAC操作が失敗した場合に返されるその他の負のエラー値。
Example
byte key[] = { 32、48、または64バイトのキー };
byte assoc[] = {0x01, 0x2, 0x3};
byte nonce[] = {0x04, 0x5, 0x6};
byte plainText[] = {0xDE, 0xAD, 0xBE, 0xEF};
byte siv[AES_BLOCK_SIZE];
byte cipherText[sizeof(plainText)];
if (wc_AesSivEncrypt(key, sizeof(key), assoc, sizeof(assoc), nonce,
sizeof(nonce), plainText, sizeof(plainText), siv, cipherText) != 0) {
// 暗号化に失敗
}
function wc_AesSivDecrypt
int wc_AesSivDecrypt(
const byte * key,
word32 keySz,
const byte * assoc,
word32 assocSz,
const byte * nonce,
word32 nonceSz,
const byte * in,
word32 inSz,
byte * siv,
byte * out
)
この関数は、RFC 5297で説明されているSIV(合成初期化ベクトル)復号を実行します。ゼロ以外のエラーコードが返された場合、出力データは未定義です。ただし、呼び出し元は平文データの漏洩を防ぐために、無条件に出力バッファをゼロ化する必要があります。
Parameters:
- key 使用するキーを含むバイトバッファ。
- keySz キーバッファの長さ(バイト単位)。
- assoc 追加の認証された関連データ(AD)。
- assocSz ADバッファの長さ(バイト単位)。
- nonce 1回のみ使用される数値。基盤となるアルゴリズムによってADと同じ方法で使用されます。
- nonceSz nonceバッファの長さ(バイト単位)。
- in 復号する暗号文バッファ。
- inSz 暗号文バッファの長さ。
- siv 暗号文に付随するSIV(RFC 5297 2.4を参照)。
- out 復号された平文を保持するバッファ。暗号文バッファと同じ長さである必要があります。
See: wc_AesSivEncrypt
Return:
- 0 復号に成功した場合。
- BAD_FUNC_ARG key、SIV、または出力バッファがNULLの場合に返されます。また、キーサイズが32、48、または64バイトでない場合にも返されます。
- AES_SIV_AUTH_E S2Vによって導出されたSIVが入力SIVと一致しない場合(RFC 5297 2.7を参照)。
- Other AESまたはCMAC操作が失敗した場合に返されるその他の負のエラー値。
Example
byte key[] = { 32、48、または64バイトのキー };
byte assoc[] = {0x01, 0x2, 0x3};
byte nonce[] = {0x04, 0x5, 0x6};
byte cipherText[] = {0xDE, 0xAD, 0xBE, 0xEF};
byte siv[AES_BLOCK_SIZE] = { 暗号文に付属していたSIV };
byte plainText[sizeof(cipherText)];
if (wc_AesSivDecrypt(key, sizeof(key), assoc, sizeof(assoc), nonce,
sizeof(nonce), cipherText, sizeof(cipherText), siv, plainText) != 0) {
// 復号に失敗
}
function wc_AesEaxEncryptAuth
WOLFSSL_API int wc_AesEaxEncryptAuth(
const byte * key,
word32 keySz,
byte * out,
const byte * in,
word32 inSz,
const byte * nonce,
word32 nonceSz,
byte * authTag,
word32 authTagSz,
const byte * authIn,
word32 authInSz
)
この関数は、「EAX: A Conventional Authenticated-Encryption Mode」(https://eprint.iacr.org/2003/069)で説明されているAES EAX暗号化と認証を実行します。これは、すべての暗号化と認証操作を1つの関数呼び出しで実行する「ワンショット」APIです。
Parameters:
- key 使用するキーを含むバッファ
- keySz キーバッファの長さ(バイト単位)
- out 暗号文を保持するバッファ。平文バッファと同じ長さである必要があります
- in 暗号化する平文バッファ
- inSz 平文バッファの長さ
- nonce EAX操作に使用する暗号ナンス
- nonceSz nonceバッファの長さ(バイト単位)
- authTag 認証タグを格納するバッファへのポインタ
- authTagSz 希望する認証タグの長さ
- authIn 認証する入力データを含むバッファへのポインタ
- authInSz 入力認証データの長さ
See: wc_AesEaxDecryptAuth
Return:
- 0 暗号化に成功した場合。
- BAD_FUNC_ARG 入力または出力バッファがNULLの場合に返されます。また、キーサイズが有効なAESキーサイズ(16、24、または32バイト)でない場合にも返されます
- other AESまたはCMAC操作が失敗した場合に返されるその他の負のエラー値。
Example
byte key[] = { 32、48、または64バイトのキー };
byte nonce[] = {0x04, 0x5, 0x6};
byte plainText[] = {0xDE, 0xAD, 0xBE, 0xEF};
byte authIn[] = {0x01, 0x2, 0x3};
byte cipherText[sizeof(plainText)]; // 出力暗号文
byte authTag[length, up to AES_BLOCK_SIZE]; // 出力authTag
if (wc_AesEaxEncrypt(key, sizeof(key),
cipherText, plainText, sizeof(plainText),
nonce, sizeof(nonce),
authTag, sizeof(authTag),
authIn, sizeof(authIn)) != 0) {
// 暗号化に失敗
}
function wc_AesEaxDecryptAuth
WOLFSSL_API int wc_AesEaxDecryptAuth(
const byte * key,
word32 keySz,
byte * out,
const byte * in,
word32 inSz,
const byte * nonce,
word32 nonceSz,
const byte * authTag,
word32 authTagSz,
const byte * authIn,
word32 authInSz
)
この関数は、「EAX: A Conventional Authenticated-Encryption Mode」(https://eprint.iacr.org/2003/069)で説明されているAES EAX復号と認証を実行します。これは、すべての復号と認証操作を1つの関数呼び出しで実行する「ワンショット」APIです。ゼロ以外のエラーコードが返された場合、出力データは未定義です。ただし、呼び出し元は平文データの漏洩を防ぐために、無条件に出力バッファをゼロ化する必要があります。
Parameters:
- key 使用するキーを含むバイトバッファ
- keySz キーバッファの長さ(バイト単位)
- out 平文を保持するバッファ。入力暗号文バッファと同じ長さである必要があります
- in 復号する暗号文バッファ
- inSz 暗号文バッファの長さ
- nonce EAX操作に使用する暗号ナンス
- nonceSz nonceバッファの長さ(バイト単位)
- authTag データの真正性をチェックするために照合する認証タグを保持するバッファ
- authTagSz 入力認証タグの長さ
- authIn 認証する入力データを含むバッファへのポインタ
- authInSz 入力認証データの長さ
See: wc_AesEaxEncryptAuth
Return:
- 0 復号に成功した場合
- BAD_FUNC_ARG 入力または出力バッファがNULLの場合に返されます。また、キーサイズが有効なAESキーサイズ(16、24、または32バイト)でない場合にも返されます
- AES_EAX_AUTH_E 認証タグが提供された認証コードベクトル
authTagと一致しない場合 - other AESまたはCMAC操作が失敗した場合に返されるその他の負のエラー値。
Example
byte key[] = { 32、48、または64バイトのキー };
byte nonce[] = {0x04, 0x5, 0x6};
byte cipherText[] = {0xDE, 0xAD, 0xBE, 0xEF};
byte authIn[] = {0x01, 0x2, 0x3};
byte plainText[sizeof(cipherText)]; // 出力平文
byte authTag[length, up to AES_BLOCK_SIZE]; // 出力authTag
if (wc_AesEaxDecrypt(key, sizeof(key),
cipherText, plainText, sizeof(plainText),
nonce, sizeof(nonce),
authTag, sizeof(authTag),
authIn, sizeof(authIn)) != 0) {
// 暗号化に失敗
}
function wc_AesEaxInit
WOLFSSL_API int wc_AesEaxInit(
AesEax * eax,
const byte * key,
word32 keySz,
const byte * nonce,
word32 nonceSz,
const byte * authIn,
word32 authInSz
)
この関数は、認証付き暗号化または復号で使用するAesEaxオブジェクトを初期化します。この関数は、AES EAX増分APIのいずれかと使用する前に、AesEaxオブジェクトに対して呼び出す必要があります。ワンショットEAX API関数を使用する場合は呼び出す必要はありません。この関数で初期化されたすべてのAesEaxインスタンスは、インスタンスの使用が完了したらwc_AesEaxFree()の呼び出しで解放する必要があります。
Parameters:
- eax AEAD操作のコンテキストを保持するAES EAX構造体
- key 暗号化と復号のための16、24、または32バイトの秘密鍵
- keySz 提供されたキーの長さ(バイト単位)
- nonce EAX操作に使用する暗号ナンス
- nonceSz nonceバッファの長さ(バイト単位)
- authIn (オプション)認証ストリームに追加する入力データ 使用しない場合、この引数はNULLである必要があります
- authInSz 入力認証データのサイズ(バイト単位)
See:
- wc_AesEaxEncryptUpdate
- wc_AesEaxDecryptUpdate
- wc_AesEaxAuthDataUpdate
- wc_AesEaxEncryptFinal
- wc_AesEaxDecryptFinal
- wc_AesEaxFree
Return:
- 0 成功した場合
- error code 失敗した場合のエラーコード
Example
AesEax eax;
key[] = { 16、24、または32バイト長のキー };
nonce[] = { 任意の長さのnonce };
authIn[] = { 認証ストリームに追加するデータ };
plainText[] = {暗号化する平文データ};
cipherText[sizeof(plainText)]; // cipherTextを保持するバッファ
authTag[length, up to AES_BLOCK_SIZE]; // 計算された認証データを保持するバッファ
AesEax eax;
if ((ret = wc_AesEaxInit(eax,
key, keySz,
nonce, nonceSz,
authIn, authInSz)) != 0) {
goto cleanup;
}
// さらに認証データを追加したい場合は、この時点で提供できます
// そうでない場合は、authInパラメータにNULLを使用し、authInサイズは0です
if ((ret = wc_AesEaxEncryptUpdate(eax,
cipherText, plainText, sizeof(plainText),
NULL, 0)) != 0) {
goto cleanup;
}
if ((ret = wc_AesEaxEncryptFinal(eax, authTag, sizeof(authTag))) != 0) {
goto cleanup;
}
cleanup:
wc_AesEaxFree(eax);
function wc_AesEaxEncryptUpdate
WOLFSSL_API int wc_AesEaxEncryptUpdate(
AesEax * eax,
byte * out,
const byte * in,
word32 inSz,
const byte * authIn,
word32 authInSz
)
この関数は、AES EAXを使用して入力データを暗号化し、オプションで認証ストリームにさらに入力データを追加します。eax は、wc_AesEaxInit の呼び出しで事前に初期化されている必要があります。
Parameters:
- eax AEAD操作のコンテキストを保持するAES EAX構造体
- out 暗号文を保持する出力バッファ
- in 暗号化する平文を保持する入力バッファ
- inSz 入力データバッファのサイズ(バイト単位)
- authIn (オプション)認証ストリームに追加する入力データ 使用しない場合、この引数はNULLである必要があります
- authInSz 入力認証データのサイズ(バイト単位)
See:
- wc_AesEaxInit
- wc_AesEaxDecryptUpdate
- wc_AesEaxAuthDataUpdate
- wc_AesEaxEncryptFinal
- wc_AesEaxDecryptFinal
- wc_AesEaxFree
Return:
- 0 成功した場合
- error code 失敗した場合のエラーコード
Example
AesEax eax;
key[] = { 16、24、または32バイト長のキー };
nonce[] = { 任意の長さのnonce };
authIn[] = { 認証ストリームに追加するデータ };
plainText[] = {暗号化する平文データ};
cipherText[sizeof(plainText)]; // cipherTextを保持するバッファ
authTag[length, up to AES_BLOCK_SIZE]; // 計算された認証データを保持するバッファ
AesEax eax;
if ((ret = wc_AesEaxInit(eax,
key, keySz,
nonce, nonceSz,
authIn, authInSz)) != 0) {
goto cleanup;
}
// さらに認証データを追加したい場合は、この時点で提供できます
// そうでない場合は、authInパラメータにNULLを使用し、authInSzは0です
if ((ret = wc_AesEaxEncryptUpdate(eax,
cipherText, plainText, sizeof(plainText),
NULL, 0)) != 0) {
goto cleanup;
}
if ((ret = wc_AesEaxEncryptFinal(eax, authTag, sizeof(authTag))) != 0) {
goto cleanup;
}
cleanup:
wc_AesEaxFree(eax);
function wc_AesEaxDecryptUpdate
WOLFSSL_API int wc_AesEaxDecryptUpdate(
AesEax * eax,
byte * out,
const byte * in,
word32 inSz,
const byte * authIn,
word32 authInSz
)
この関数は、AES EAXを使用して入力データを復号し、オプションで認証ストリームにさらに入力データを追加します。eax は、wc_AesEaxInit の呼び出しで事前に初期化されている必要があります。
Parameters:
- eax AEAD操作のコンテキストを保持するAES EAX構造体
- out 復号された平文を保持する出力バッファ
- in 暗号文を保持する入力バッファ
- inSz 入力データバッファのサイズ(バイト単位)
- authIn (オプション)認証ストリームに追加する入力データ 使用しない場合、この引数はNULLである必要があります
- authInSz 入力認証データのサイズ(バイト単位)
See:
- wc_AesEaxInit
- wc_AesEaxEncryptUpdate
- wc_AesEaxAuthDataUpdate
- wc_AesEaxEncryptFinal
- wc_AesEaxDecryptFinal
- wc_AesEaxFree
Return:
- 0 成功した場合
- error code 失敗した場合のエラーコード
Example
AesEax eax;
key[] = { 16、24、または32バイト長のキー };
nonce[] = { 任意の長さのnonce };
authIn[] = { 認証ストリームに追加するデータ };
cipherText[] = {暗号化されたデータ};
plainText[sizeof(cipherText)]; // 復号されたデータを保持するバッファ
// 認証タグは、暗号化AEAD操作によって別の場所で生成されます
authTag[length, up to AES_BLOCK_SIZE] = { 認証タグ };
AesEax eax;
if ((ret = wc_AesEaxInit(eax,
key, keySz,
nonce, nonceSz,
authIn, authInSz)) != 0) {
goto cleanup;
}
// さらに認証データを追加したい場合は、この時点で提供できます
// そうでない場合は、authInパラメータにNULLを使用し、authInSzは0です
if ((ret = wc_AesEaxDecryptUpdate(eax,
plainText, cipherText, sizeof(cipherText),
NULL, 0)) != 0) {
goto cleanup;
}
if ((ret = wc_AesEaxDecryptFinal(eax, authTag, sizeof(authTag))) != 0) {
goto cleanup;
}
cleanup:
wc_AesEaxFree(eax);
function wc_AesEaxAuthDataUpdate
WOLFSSL_API int wc_AesEaxAuthDataUpdate(
AesEax * eax,
const byte * authIn,
word32 authInSz
)
この関数は、認証ストリームに入力データを追加します。eax は、wc_AesEaxInit の呼び出しで事前に初期化されている必要があります。
Parameters:
- eax AEAD操作のコンテキストを保持するAES EAX構造体
- authIn 認証ストリームに追加する入力データ
- authInSz 入力認証データのサイズ(バイト単位)
See:
- wc_AesEaxInit
- wc_AesEaxEncryptUpdate
- wc_AesEaxDecryptUpdate
- wc_AesEaxEncryptFinal
- wc_AesEaxDecryptFinal
- wc_AesEaxFree
Return:
- 0 成功した場合
- error code 失敗した場合のエラーコード
Example
AesEax eax;
key[] = { 16、24、または32バイト長のキー };
nonce[] = { 任意の長さのnonce };
authIn[] = { 認証ストリームに追加するデータ };
cipherText[] = {暗号化されたデータ};
plainText[sizeof(cipherText)]; // 復号されたデータを保持するバッファ
// 認証タグは、暗号化AEAD操作によって別の場所で生成されます
authTag[length, up to AES_BLOCK_SIZE] = { 認証タグ };
AesEax eax;
// ここでは追加する認証データなし
if ((ret = wc_AesEaxInit(eax,
key, keySz,
nonce, nonceSz,
NULL, 0)) != 0) {
goto cleanup;
}
// ここでは追加する認証データなし、後でwc_AesEaxAuthDataUpdateで追加
if ((ret = wc_AesEaxDecryptUpdate(eax,
plainText, cipherText, sizeof(cipherText),
NULL, 0)) != 0) {
goto cleanup;
}
if ((ret = wc_AesEaxAuthDataUpdate(eax, authIn, sizeof(authIn))) != 0) {
goto cleanup;
}
if ((ret = wc_AesEaxDecryptFinal(eax, authTag, sizeof(authTag))) != 0) {
goto cleanup;
}
cleanup:
wc_AesEaxFree(eax);
function wc_AesEaxEncryptFinal
WOLFSSL_API int wc_AesEaxEncryptFinal(
AesEax * eax,
byte * authTag,
word32 authTagSz
)
この関数は、暗号化AEAD操作を完了し、現在の認証ストリームに対して認証タグを生成します。eax は、wc_AesEaxInit の呼び出しで事前に初期化されている必要があります。AesEax コンテキスト構造体の使用が完了したら、wc_AesEaxFree を使用して必ず解放してください。
Parameters:
- eax AEAD操作のコンテキストを保持するAES EAX構造体
- authTag[out] 計算された認証タグを保持するバッファ
- authTagSz
authTagのサイズ(バイト単位)
See:
- wc_AesEaxInit
- wc_AesEaxEncryptUpdate
- wc_AesEaxDecryptUpdate
- wc_AesEaxAuthDataUpdate
- wc_AesEaxDecryptFinal
- wc_AesEaxFree
Return:
- 0 成功した場合
- error code 失敗した場合のエラーコード
Example
AesEax eax;
key[] = { 16、24、または32バイト長のキー };
nonce[] = { 任意の長さのnonce };
authIn[] = { 認証ストリームに追加するデータ };
plainText[] = {暗号化する平文データ};
cipherText[sizeof(plainText)]; // cipherTextを保持するバッファ
authTag[length, up to AES_BLOCK_SIZE]; // 計算された認証データを保持するバッファ
AesEax eax;
if ((ret = wc_AesEaxInit(eax,
key, keySz,
nonce, nonceSz,
authIn, authInSz)) != 0) {
goto cleanup;
}
// さらに認証データを追加したい場合は、この時点で提供できます
// そうでない場合は、authInパラメータにNULLを使用し、authInSzは0です
if ((ret = wc_AesEaxEncryptUpdate(eax,
cipherText, plainText, sizeof(plainText),
NULL, 0)) != 0) {
goto cleanup;
}
if ((ret = wc_AesEaxEncryptFinal(eax, authTag, sizeof(authTag))) != 0) {
goto cleanup;
}
cleanup:
wc_AesEaxFree(eax);
function wc_AesEaxDecryptFinal
WOLFSSL_API int wc_AesEaxDecryptFinal(
AesEax * eax,
const byte * authIn,
word32 authInSz
)
この関数は、復号AEAD操作を完了し、認証タグの計算を完了して、ユーザが提供したタグに対してその有効性をチェックします。eax は、wc_AesEaxInit の呼び出しで事前に初期化されている必要があります。AesEax コンテキスト構造体の使用が完了したら、wc_AesEaxFree を使用して必ず解放してください。
Parameters:
- eax AEAD操作のコンテキストを保持するAES EAX構造体
- authIn 計算された認証タグと照合するための入力認証タグ
- authInSz
authInのサイズ(バイト単位)
See:
- wc_AesEaxInit
- wc_AesEaxEncryptUpdate
- wc_AesEaxDecryptUpdate
- wc_AesEaxAuthDataUpdate
- wc_AesEaxEncryptFinal
- wc_AesEaxFree
Return:
- 0 データが正常に認証された場合
- AES_EAX_AUTH_E 認証タグが提供された認証コードベクトル
authInと一致しない場合 - other error code 失敗した場合のその他のエラーコード
Example
AesEax eax;
key[] = { 16、24、または32バイト長のキー };
nonce[] = { 任意の長さのnonce };
authIn[] = { 認証ストリームに追加するデータ };
cipherText[] = {暗号化されたデータ};
plainText[sizeof(cipherText)]; // 復号されたデータを保持するバッファ
// 認証タグは、暗号化AEAD操作によって別の場所で生成されます
authTag[length, up to AES_BLOCK_SIZE] = { 認証タグ };
AesEax eax;
if ((ret = wc_AesEaxInit(eax,
key, keySz,
nonce, nonceSz,
authIn, authInSz)) != 0) {
goto cleanup;
}
// さらに認証データを追加したい場合は、この時点で提供できます
// そうでない場合は、authInパラメータにNULLを使用し、authInSzは0です
if ((ret = wc_AesEaxDecryptUpdate(eax,
plainText, cipherText, sizeof(cipherText),
NULL, 0)) != 0) {
goto cleanup;
}
if ((ret = wc_AesEaxDecryptFinal(eax, authTag, sizeof(authTag))) != 0) {
goto cleanup;
}
cleanup:
wc_AesEaxFree(eax);
function wc_AesEaxFree
WOLFSSL_API int wc_AesEaxFree(
AesEax * eax
)
この関数は、AesEaxラッパー構造体内のAesインスタンスによって使用されるリソース、特にキーを解放します。wc_AesEaxInitで初期化された後、すべての必要なEAX操作が完了した時点でAesEax構造体に対して呼び出す必要があります。
Parameters:
- eax 解放するAES EAXインスタンス
See:
- wc_AesEaxInit
- wc_AesEaxEncryptUpdate
- wc_AesEaxDecryptUpdate
- wc_AesEaxAuthDataUpdate
- wc_AesEaxEncryptFinal
- wc_AesEaxDecryptFinal
Return: 0 成功
Example
AesEax eax;
if(wc_AesEaxInit(eax, key, keySz, nonce, nonceSz, authIn, authInSz) != 0) {
// エラーを処理し、その後解放
wc_AesEaxFree(&eax);
}
function wc_AesCtsEncrypt
int wc_AesCtsEncrypt(
const byte * key,
word32 keySz,
byte * out,
const byte * in,
word32 inSz,
const byte * iv
)
この関数は、CTSモードを使用してAES暗号化を実行します。これは、すべての操作を1回の呼び出しで処理するワンショットAPIです。
Parameters:
- key 暗号化に使用されるAESキーへのポインタ。
- keySz AESキーのサイズ(バイト単位)(16、24、または32バイト)。
- out 暗号化された暗号文を保持するバッファ。少なくとも入力と同じサイズである必要があります。
- in 暗号化する平文入力データへのポインタ。
- inSz 平文入力データのサイズ(バイト単位)。
- iv 暗号化に使用される初期化ベクトル(IV)へのポインタ。16バイトである必要があります。
- key 暗号化に使用されるAESキーへのポインタ。
- keySz AESキーのサイズ(バイト単位)(16、24、または32バイト)。
- out 暗号化された暗号文を保持するバッファ。少なくとも入力平文と同じサイズである必要があります。
- in 暗号化する平文入力データへのポインタ。
- inSz 平文入力データのサイズ(バイト単位)。
- iv 暗号化に使用される初期化ベクトル(IV)へのポインタ。16バイトである必要があります。 Example
byte key[16] = { 0 };
byte iv[16] = { 0 };
byte plaintext[] = { 0x01, 0x02, 0x03, 0x04, 0x05 };
byte ciphertext[sizeof(plaintext)];
int ret = wc_AesCtsEncrypt(key, sizeof(key), ciphertext, plaintext,
sizeof(plaintext), iv);
if (ret != 0) {
// 暗号化エラーを処理
}
See:
Return:
- 0 暗号化に成功した場合。
- BAD_FUNC_ARG 入力引数が無効な場合。
- other negative error codes 暗号化失敗のためのその他の負のエラーコード。
- 0 暗号化に成功した場合。
- BAD_FUNC_ARG 入力引数が無効な場合。
- other negative error codes 暗号化失敗のためのその他の負のエラーコード。
Example
byte key[16] = { 0 };
byte iv[16] = { 0 };
byte plaintext[] = { 0x01, 0x02, 0x03, 0x04, 0x05 };
byte ciphertext[sizeof(plaintext)];
int ret = wc_AesCtsEncrypt(key, sizeof(key), ciphertext, plaintext,
sizeof(plaintext), iv);
if (ret != 0) {
// 暗号化エラーを処理
}
function wc_AesCtsDecrypt
int wc_AesCtsDecrypt(
const byte * key,
word32 keySz,
byte * out,
const byte * in,
word32 inSz,
const byte * iv
)
この関数は、CTSモードを使用してAES復号を実行します。これは、すべての操作を1回の呼び出しで処理するワンショットAPIです。
Parameters:
- key 復号に使用されるAESキーへのポインタ。
- keySz AESキーのサイズ(バイト単位)(16、24、または32バイト)。
- out 復号された平文を保持するバッファ。少なくとも入力暗号文と同じサイズである必要があります。
- in 復号する暗号文入力データへのポインタ。
- inSz 暗号文入力データのサイズ(バイト単位)。
- iv 復号に使用される初期化ベクトル(IV)へのポインタ。16バイトである必要があります。 Example
byte key[16] = { 0 };
byte iv[16] = { 0 };
byte ciphertext[] = { 0x01, 0x02, 0x03, 0x04, 0x05 };
byte plaintext[sizeof(ciphertext)];
int ret = wc_AesCtsDecrypt(key, sizeof(key), plaintext, ciphertext,
sizeof(ciphertext), iv);
if (ret != 0) {
// 復号エラーを処理
}
See: wc_AesCtsEncrypt
Return:
- 0 復号に成功した場合。
- BAD_FUNC_ARG 入力引数が無効な場合。
- other negative error codes 復号失敗のためのその他の負のエラーコード。
function wc_AesCtsEncryptUpdate
int wc_AesCtsEncryptUpdate(
Aes * aes,
byte * out,
word32 * outSz,
const byte * in,
word32 inSz
)
この関数は、AES CTS暗号化の更新ステップを実行します。平文のチャンクを処理し、中間データを保存します。
Parameters:
- aes 操作のコンテキストを保持するAes構造体へのポインタ。
- out 暗号化された暗号文を保持するバッファ。この更新ステップからの出力を保存するのに十分な大きさである必要があります。
- outSz
outバッファに書き込まれた出力データのサイズ(バイト単位)。入力時には、outバッファに書き込むことができる最大バイト数を含める必要があります。 - in 暗号化する平文入力データへのポインタ。
- inSz 平文入力データのサイズ(バイト単位)。 Example
Aes aes;
wc_AesInit(&aes, NULL, INVALID_DEVID);
byte key[16] = { 0 };
byte iv[16] = { 0 };
byte plaintext[] = { ... };
byte ciphertext[sizeof(plaintext)];
word32 outSz = sizeof(ciphertext);
wc_AesSetKey(&aes, key, sizeof(key), iv, AES_ENCRYPTION);
int ret = wc_AesCtsEncryptUpdate(&aes, ciphertext, &outSz, plaintext, sizeof(plaintext));
if (ret != 0) {
// エラーを処理
}
wc_AesFree(&aes);
Return:
- 0 処理に成功した場合。
- BAD_FUNC_ARG 入力引数が無効な場合。
function wc_AesCtsEncryptFinal
int wc_AesCtsEncryptFinal(
Aes * aes,
byte * out,
word32 * outSz
)
この関数は、AES CTS暗号化操作を完了します。残りの平文を処理し、暗号化を完了します。
Parameters:
- aes 操作のコンテキストを保持するAes構造体へのポインタ。
- out 最終的な暗号化された暗号文を保持するバッファ。この最終ステップから残りの暗号文を保存するのに十分な大きさである必要があります。
- outSz
outバッファに書き込まれた出力データのサイズ(バイト単位)。入力時には、outバッファに書き込むことができる最大バイト数を含める必要があります。 Example
Aes aes;
wc_AesInit(&aes, NULL, INVALID_DEVID);
byte key[16] = { 0 };
byte iv[16] = { 0 };
byte plaintext[] = { ... };
byte ciphertext[sizeof(plaintext)];
word32 outSz = sizeof(ciphertext);
wc_AesSetKey(&aes, key, sizeof(key), iv, AES_ENCRYPTION);
// wc_AesCtsEncryptUpdateを使用して必要な更新ステップを実行
int ret = wc_AesCtsEncryptFinal(&aes, ciphertext, &outSz);
if (ret != 0) {
// エラーを処理
}
wc_AesFree(&aes);
Return:
- 0 暗号化の完了に成功した場合。
- BAD_FUNC_ARG 入力引数が無効な場合。
function wc_AesCtsDecryptUpdate
int wc_AesCtsDecryptUpdate(
Aes * aes,
byte * out,
word32 * outSz,
const byte * in,
word32 inSz
)
この関数は、AES CTS復号の更新ステップを実行します。暗号文のチャンクを処理し、中間データを保存します。
Parameters:
- aes 操作のコンテキストを保持するAes構造体へのポインタ。
- out 復号された平文を保持するバッファ。この更新ステップからの出力を保存するのに十分な大きさである必要があります。
- outSz
outバッファに書き込まれた出力データのサイズ(バイト単位)。入力時には、outバッファに書き込むことができる最大バイト数を含める必要があります。 - in 復号する暗号文入力データへのポインタ。
- inSz 暗号文入力データのサイズ(バイト単位)。 Example
Aes aes;
wc_AesInit(&aes, NULL, INVALID_DEVID);
byte key[16] = { 0 };
byte iv[16] = { 0 };
byte ciphertext[] = { ... };
byte plaintext[sizeof(ciphertext)];
word32 outSz = sizeof(plaintext);
wc_AesSetKey(&aes, key, sizeof(key), iv, AES_DECRYPTION);
int ret = wc_AesCtsDecryptUpdate(&aes, plaintext, &outSz, ciphertext, sizeof(ciphertext));
if (ret != 0) {
// エラーを処理
}
wc_AesFree(&aes);
Return:
- 0 処理に成功した場合。
- BAD_FUNC_ARG 入力引数が無効な場合。
function wc_AesCtsDecryptFinal
int wc_AesCtsDecryptFinal(
Aes * aes,
byte * out,
word32 * outSz
)
この関数は、AES CTS復号操作を完了します。残りの暗号文を処理し、復号を完了します。
Parameters:
- aes 操作のコンテキストを保持するAes構造体へのポインタ。
- out 最終的な復号された平文を保持するバッファ。この最終ステップから残りの平文を保存するのに十分な大きさである必要があります。
- outSz
outバッファに書き込まれた出力データのサイズ(バイト単位)。入力時には、outバッファに書き込むことができる最大バイト数を含める必要があります。 Example
Aes aes;
wc_AesInit(&aes, NULL, INVALID_DEVID);
byte key[16] = { 0 };
byte iv[16] = { 0 };
byte ciphertext[] = { ... };
byte plaintext[sizeof(ciphertext)];
word32 outSz = sizeof(plaintext);
wc_AesSetKey(&aes, key, sizeof(key), iv, AES_DECRYPTION);
// wc_AesCtsDecryptUpdateを使用して必要な更新ステップを実行
int ret = wc_AesCtsDecryptFinal(&aes, plaintext, &outSz);
if (ret != 0) {
// エラーを処理
}
wc_AesFree(&aes);
Return:
- 0 復号の完了に成功した場合。
- BAD_FUNC_ARG 入力引数が無効な場合。
Source code
int wc_AesSetKey(Aes* aes, const byte* key, word32 len,
const byte* iv, int dir);
int wc_AesSetIV(Aes* aes, const byte* iv);
int wc_AesCbcEncrypt(Aes* aes, byte* out,
const byte* in, word32 sz);
int wc_AesCbcDecrypt(Aes* aes, byte* out,
const byte* in, word32 sz);
int wc_AesCtrEncrypt(Aes* aes, byte* out,
const byte* in, word32 sz);
int wc_AesEncryptDirect(Aes* aes, byte* out, const byte* in);
int wc_AesDecryptDirect(Aes* aes, byte* out, const byte* in);
int wc_AesSetKeyDirect(Aes* aes, const byte* key, word32 len,
const byte* iv, int dir);
int wc_AesGcmSetKey(Aes* aes, const byte* key, word32 len);
int wc_AesGcmEncrypt(Aes* aes, byte* out,
const byte* in, word32 sz,
const byte* iv, word32 ivSz,
byte* authTag, word32 authTagSz,
const byte* authIn, word32 authInSz);
int wc_AesGcmDecrypt(Aes* aes, byte* out,
const byte* in, word32 sz,
const byte* iv, word32 ivSz,
const byte* authTag, word32 authTagSz,
const byte* authIn, word32 authInSz);
int wc_GmacSetKey(Gmac* gmac, const byte* key, word32 len);
int wc_GmacUpdate(Gmac* gmac, const byte* iv, word32 ivSz,
const byte* authIn, word32 authInSz,
byte* authTag, word32 authTagSz);
int wc_AesCcmSetKey(Aes* aes, const byte* key, word32 keySz);
int wc_AesCcmEncrypt(Aes* aes, byte* out,
const byte* in, word32 inSz,
const byte* nonce, word32 nonceSz,
byte* authTag, word32 authTagSz,
const byte* authIn, word32 authInSz);
int wc_AesCcmDecrypt(Aes* aes, byte* out,
const byte* in, word32 inSz,
const byte* nonce, word32 nonceSz,
const byte* authTag, word32 authTagSz,
const byte* authIn, word32 authInSz);
int wc_AesXtsInit(XtsAes* aes, void* heap, int devId);
int wc_AesXtsSetKeyNoInit(XtsAes* aes, const byte* key,
word32 len, int dir);
int wc_AesXtsSetKey(XtsAes* aes, const byte* key,
word32 len, int dir, void* heap, int devId);
int wc_AesXtsEncryptSector(XtsAes* aes, byte* out,
const byte* in, word32 sz, word64 sector);
int wc_AesXtsDecryptSector(XtsAes* aes, byte* out,
const byte* in, word32 sz, word64 sector);
int wc_AesXtsEncrypt(XtsAes* aes, byte* out,
const byte* in, word32 sz, const byte* i, word32 iSz);
int wc_AesXtsDecrypt(XtsAes* aes, byte* out,
const byte* in, word32 sz, const byte* i, word32 iSz);
int wc_AesXtsFree(XtsAes* aes);
int wc_AesInit(Aes* aes, void* heap, int devId);
int wc_AesFree(Aes* aes);
int wc_AesCfbEncrypt(Aes* aes, byte* out, const byte* in, word32 sz);
int wc_AesCfbDecrypt(Aes* aes, byte* out, const byte* in, word32 sz);
int wc_AesSivEncrypt(const byte* key, word32 keySz, const byte* assoc,
word32 assocSz, const byte* nonce, word32 nonceSz,
const byte* in, word32 inSz, byte* siv, byte* out);
int wc_AesSivDecrypt(const byte* key, word32 keySz, const byte* assoc,
word32 assocSz, const byte* nonce, word32 nonceSz,
const byte* in, word32 inSz, byte* siv, byte* out);
WOLFSSL_API int wc_AesEaxEncryptAuth(const byte* key, word32 keySz, byte* out,
const byte* in, word32 inSz,
const byte* nonce, word32 nonceSz,
/* 計算された認証タグの出力 */
byte* authTag, word32 authTagSz,
/* 認証する入力データ */
const byte* authIn, word32 authInSz);
WOLFSSL_API int wc_AesEaxDecryptAuth(const byte* key, word32 keySz, byte* out,
const byte* in, word32 inSz,
const byte* nonce, word32 nonceSz,
/* 検証する認証タグ */
const byte* authTag, word32 authTagSz,
/* 認証する入力データ */
const byte* authIn, word32 authInSz);
WOLFSSL_API int wc_AesEaxInit(AesEax* eax,
const byte* key, word32 keySz,
const byte* nonce, word32 nonceSz,
const byte* authIn, word32 authInSz);
WOLFSSL_API int wc_AesEaxEncryptUpdate(AesEax* eax, byte* out,
const byte* in, word32 inSz,
const byte* authIn, word32 authInSz);
WOLFSSL_API int wc_AesEaxDecryptUpdate(AesEax* eax, byte* out,
const byte* in, word32 inSz,
const byte* authIn, word32 authInSz);
WOLFSSL_API int wc_AesEaxAuthDataUpdate(AesEax* eax,
const byte* authIn, word32 authInSz);
WOLFSSL_API int wc_AesEaxEncryptFinal(AesEax* eax,
byte* authTag, word32 authTagSz);
WOLFSSL_API int wc_AesEaxDecryptFinal(AesEax* eax,
const byte* authIn, word32 authInSz);
WOLFSSL_API int wc_AesEaxFree(AesEax* eax);
int wc_AesCtsEncrypt(const byte* key, word32 keySz, byte* out,
const byte* in, word32 inSz,
const byte* iv);
int wc_AesCtsEncrypt(const byte* key, word32 keySz, byte* out,
const byte* in, word32 inSz,
const byte* iv);
int wc_AesCtsDecrypt(const byte* key, word32 keySz, byte* out,
const byte* in, word32 inSz,
const byte* iv);
int wc_AesCtsEncryptUpdate(Aes* aes, byte* out, word32* outSz,
const byte* in, word32 inSz);
int wc_AesCtsEncryptFinal(Aes* aes, byte* out, word32* outSz);
int wc_AesCtsDecryptUpdate(Aes* aes, byte* out, word32* outSz,
const byte* in, word32 inSz);
int wc_AesCtsDecryptFinal(Aes* aes, byte* out, word32* outSz);
Updated on 2025-12-12 at 03:08:17 +0000