コンテンツにスキップ

Algorithms - AES

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)
入力バッファの平文メッセージを暗号化し、AESでCipher Block Chainingを使用して出力バッファに出力します。 この関数呼び出しには、メッセージの暗号化前にwc_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)
入力バッファからの暗号メッセージを復号し、AESでCipher Block Chainingを使用して出力バッファに出力します。 この関数呼び出しには、メッセージの暗号化前にwc_AesSetKeyを呼び出してAESオブジェクトが初期化されている必要があります。 この関数は、元のメッセージがAESブロック長で整列していたと仮定し、入力された長さがブロック長の倍数になると予想しています。 これはOpenSSL AES-CBCメソッドとは異なります。これは、PKCS#7パディングを自動的に追加するため、ブロックマルチ入力を必要としません。 wolfSSL機能と同等のOpenSSL関数を相互運用するには、OpenSSLコマンドライン関数で-nopadオプションを指定し、 wolfSSL_ AesCbcEncryptメソッドのように動作し、復号中にエラーを発生させません。
int wc_AesCtrEncrypt(Aes * aes, byte * out, const byte * in, word32 sz)
入力バッファからメッセージを暗号化/復号し、AES CTRモードを使用して出力バッファーに出力します。 この関数は、wolfSSL_Aes_Counterがコンパイル時に有効になっている場合にのみ有効になります。 この機能を呼び出す前に、Aes構造体をwc_AesSetKeyで初期化する必要があります。 この関数は復号と暗号化の両方に使用されます。_注:暗号化と復号のための同じAPIを使用することについて。ユーザーは暗号化/復号のためのAes構造体を区別する必要があります。
int wc_AesEncryptDirect(Aes * aes, byte * out, const byte * in)
この関数は、入力ブロックinで与えられた単一の平文データブロックを暗号化して単一の出力ブロックoutに出力します。 その際に、Aes構造体で提供されたの鍵を使用します。鍵はこの機能を呼び出す前にwc_AesSetKeyで初期化されている必要があります。 wc_AesSetKeyへの入力ivにはNULLを指定して呼び出してください。 これは、Configure Option WolfSSL_AES_DIRECTが有効になっている場合にのみ有効になります。 __ warning:ほぼすべてのユースケースでECBモードは安全性が低いと考えられています。 可能な限りECB APIを直接使用しないでください。
int wc_AesDecryptDirect(Aes * aes, byte * out, const byte * in)
この関数は、入力ブロックinで与えられた単一の暗号データブロックを復号して単一の出力ブロックoutに出力します。 提供されたAes構造体の鍵を使用します。Aes構造体は、この機能を呼び出す前にwc_AesSetKeyで初期化される必要があります。wc_AesSetKeyは、ivがNULLで呼び出される必要があります。 これは、Configure Option WOLFSSL_AES_DIRECTが有効になっている場合にのみ有効になります。 __ warning:ほぼすべてのユースケースでECBモードは安全性が低いと考えられています。可能な限りECB APIを直接使用しないでください。
int wc_AesSetKeyDirect(Aes * aes, const byte * key, word32 len, const byte * iv, int dir)
この関数は、CTRモードのAES鍵をAESで設定するために使用されます。 指定された鍵、iv(初期化ベクトル)、および暗号化dir(方向)でAESオブジェクトを初期化します。 構成オプションWOLFSSL_AES_DIRECTが有効になっている場合にのみ有効になります。 wc_AesEncryptDirectとwc_AesDecryptDirectを呼び出す際のAes構造体の初期化にはこの関数を使う必要があります。 現在wc_AesSetKeyDirectは内部的にwc_AesSetKeyを使用します。 __ warning:ほぼすべてのユースケースでECBモードは安全性が低いと考えられています。 可能な限りECB APIを直接使用しないでください
int wc_AesGcmSetKey(Aes * aes, const byte * key, word32 len)
この機能は、AES GCM(Galois/Counter Mode)の鍵を設定するために使用されます。 与えられたkeyでAes構造体を初期化します。コンパイル時にConfigureオプション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に格納します。 また、指定された認証タグ、authTagに対して、入力認証ベクトル、authInをチェックします。
int wc_GmacSetKey(Gmac * gmac, const byte * key, word32 len)
この関数は、GAROISメッセージ認証に使用されるGmac構造体の鍵を初期化して設定します。
int wc_GmacUpdate(Gmac * gmac, const byte * iv, word32 ivSz, const byte * authIn, word32 authInSz, byte * authTag, word32 authTagSz)
この関数はauthIn InputのGMACハッシュを生成し、結果をauthTagバッファに格納します。 wc_GmacUpdateを実行した後、生成されたauthTagを既知の認証タグに比較してメッセージの信頼性を検証する必要があります。
int wc_AesCcmSetKey(Aes * aes, const byte * key, word32 keySz)
この関数は、CCMを使用してAESオブジェクトの鍵を設定します(CBC-MACのカウンタ)。Aes構造体へのポインタを取り、引数で与えられたkeyで初期化します。
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を使用して、入力メッセージ、IN、OUT、OUT、OUTをCCM(CBC-MACのカウンタ)を暗号化します。 その後、Authin Inputから認証タグ、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を使用して、入力暗号テキストを、CCM(CBC-MACのカウンタ)を使用して出力バッファーに復号します。その後、authIn入力からauthTagを計算します。認証タグが無効な場合は、出力バッファをゼロに設定し、AES_CCM_AUTH_Eを返します。
int wc_AesXtsSetKey(XtsAes * aes, const byte * key, word32 len, int dir, void * heap, int devId)
この関数は、AES XTSモードを使用する暗号化または復号で使用する鍵の設定に使用します。完了したら、AESキーでwc_AesXtsFreeを呼び出すことがユーザーになりました。
int wc_AesXtsEncryptSector(XtsAes * aes, byte * out, const byte * in, word32 sz, word64 sector)
wc_AesXtsEncryptと同じ処理を行いますが、バイト配列の代わりにTweak値としてword64型を使用します。本関数でword64をバイト配列に変換し、wc_AesXtsEncryptを呼び出します。
int wc_AesXtsDecryptSector(XtsAes * aes, byte * out, const byte * in, word32 sz, word64 sector)
wc_AesXtsDecryptと同じ処理を行いますが、バイト配列の代わりにTweak値としてword64タイプを使用します。本関数でword64をバイト配列に変換するだけです。
int wc_AesXtsEncrypt(XtsAes * aes, byte * out, const byte * in, word32 sz, const byte * i, word32 iSz)
AES XTSモードで暗号化します。(XTS)XEX暗号化と平文がブロック長の倍数でない場合の処理(Ciphertext Stealing)を行います。
int wc_AesXtsDecrypt(XtsAes * aes, byte * out, const byte * in, word32 sz, const byte * i, word32 iSz)
暗号化と同じプロセスですが、XtsAes構造体はAES_Decryptionタイプです。
int wc_AesXtsFree(XtsAes * aes)
この関数はXtsAes構造体で使用されるすべてのリソースを解放します。
int wc_AesInit(Aes * aes, void * heap, int devId)
Aes構造体を初期化します。ヒープヒントを設定し、ASYNCハードウェアを使用する場合のIDも設定します。Aes構造体の使用が終了した際にwc_AesFreeを呼び出すのはユーザーに任されています。
int wc_AesFree(Aes * aes)
Aes構造体に関連つけられたリソースを可能なら解放します。 内部的にはノーオペレーションとなることもありますが、ベストプラクティスとしてどのケースでもこの関数を呼び出すことを推奨します。
int wc_AesCfbEncrypt(Aes * aes, byte * out, const byte * in, word32 sz)
AES CFBモードで暗号化を行います。
int wc_AesCfbDecrypt(Aes * aes, byte * out, const byte * in, word32 sz)
AES CFBモードで復号を行います。
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(合成初期化ベクトル)復号を実行します
int wc_AesCbcDecryptWithKey(byte * out, const byte * in, word32 inSz, const byte * key, word32 keySz, const byte * iv)
入力バッファーから暗号を復号化し、AESでCipher Block Chainingを使用して出力バッファに出力バッファーに入れます。この関数は、AES構造を初期化する必要はありません。代わりに、キーとIV(初期化ベクトル)を取り、これらを使用してAESオブジェクトを初期化してから暗号テキストを復号化します。

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 鍵を初期化するために使用される初期化ベクトルへのポインタ Example
Aes enc;
int ret = 0;
byte key[] = { some 16, 24 or 32 byte key };
byte iv[]  = { some 16 byte iv };
if (ret = wc_AesSetKey(&enc, key, AES_BLOCK_SIZE, iv,
AES_ENCRYPTION) != 0) {
// failed to set aes key
}

See:

Return:

  • 0 鍵と初期化ベクトルを正常に設定しました
  • BAD_FUNC_ARG 鍵の長さが無効な場合に返されます。

function wc_AesSetIV

int wc_AesSetIV(
    Aes * aes,
    const byte * iv
)

この関数は、指定されたAes構造体の初期化ベクトルを設定します。Aes構造体は、この関数を呼び出す前に初期化されていることが必要です。

Parameters:

  • aes 初期化ベクトルを設定するAes構造体へのポインタ Example
Aes enc;
// set enc key
byte iv[]  = { some 16 byte iv };
if (ret = wc_AesSetIV(&enc, iv) != 0) {
// failed to set aes iv
}

See:

Return:

  • 0 初期化ベクトルを正常に設定します。
  • BAD_FUNC_ARG Aes構造体へのポインタがNULLの場合に返されます。

function wc_AesCbcEncrypt

int wc_AesCbcEncrypt(
    Aes * aes,
    byte * out,
    const byte * in,
    word32 sz
)

入力バッファの平文メッセージを暗号化し、AESでCipher Block Chainingを使用して出力バッファに出力します。 この関数呼び出しには、メッセージの暗号化前にwc_AesSetKeyを呼び出してAESオブジェクトが初期化されている必要があります。 この関数は、入力メッセージがAESブロック長であると仮定し、入力された長さがブロック長の倍数になることを想定しているため、 ビルド構成でWOLFSSL_AES_CBC_LENGTH_CHECKSが定義されている場合は任意選択でチェックおよび適用されます。 ブロック多入力を保証するために、PKCS#7スタイルのパディングを事前に追加する必要があります。 これは自動的にパディングを追加するOpenSSL AES-CBCメソッドとは異なります。 WOLFSSLと対応するOpenSSL関数を相互運用するには、OpenSSLコマンドライン関数で-nopadオプションを指定して、 wolfSSL_AesCbcEncryptメソッドのように動作し、暗号化中に追加のパディングを追加しません。

Parameters:

  • aes データの暗号化に使用されるAESオブジェクトへのポインタ
  • out 暗号化されたメッセージの暗号文を格納する出力バッファへのポインタ
  • in 暗号化されるメッセージを含む入力バッファへのポインタ Example
Aes enc;
int ret = 0;
// initialize enc with AesSetKey, using direction AES_ENCRYPTION
byte msg[AES_BLOCK_SIZE * n]; // multiple of 16 bytes
// fill msg with data
byte cipher[AES_BLOCK_SIZE * n]; // Some multiple of 16 bytes
if ((ret = wc_AesCbcEncrypt(&enc, cipher, message, sizeof(msg))) != 0 ) {
// block align error
}

See:

Return:

  • 0 メッセージの暗号化に成功しました。
  • BAD_ALIGN_E: ブロックアライメントエラー検出時に返される可能性があります
  • BAD_LENGTH_E ライブラリーがWOLFSSL_AES_CBC_LENGTH_CHECKSで構築されている場合で、入力長がAESブロック長の倍数でない場合に返されます。

function wc_AesCbcDecrypt

int wc_AesCbcDecrypt(
    Aes * aes,
    byte * out,
    const byte * in,
    word32 sz
)

入力バッファからの暗号メッセージを復号し、AESでCipher Block Chainingを使用して出力バッファに出力します。 この関数呼び出しには、メッセージの暗号化前にwc_AesSetKeyを呼び出してAESオブジェクトが初期化されている必要があります。 この関数は、元のメッセージがAESブロック長で整列していたと仮定し、入力された長さがブロック長の倍数になると予想しています。 これはOpenSSL AES-CBCメソッドとは異なります。これは、PKCS#7パディングを自動的に追加するため、ブロックマルチ入力を必要としません。 wolfSSL機能と同等のOpenSSL関数を相互運用するには、OpenSSLコマンドライン関数で-nopadオプションを指定し、 wolfSSL_ AesCbcEncryptメソッドのように動作し、復号中にエラーを発生させません。

Parameters:

  • aes データを復号するために使用されるAESオブジェクトへのポインタ。
  • out 復号されたメッセージのプレーンテキストを保存する出力バッファへのポインタ。 サイズはAES_BLOCK_SIZEの倍数でなければなりません。必要な場合はパディングは追加されます。
  • in 復号する暗号テキストを含む入力バッファへのポインタ。 サイズはAES_BLOCK_SIZEの倍数でなければなりません。パディングされている必要があります。
  • sz 入力バッファのサイズ Example
Aes dec;
int ret = 0;
// initialize dec with AesSetKey, using direction AES_DECRYPTION
byte cipher[AES_BLOCK_SIZE * n]; // some multiple of 16 bytes
// fill cipher with cipher text
byte plain [AES_BLOCK_SIZE * n];
if ((ret = wc_AesCbcDecrypt(&dec, plain, cipher, sizeof(cipher))) != 0 ) {
// block align error
}

See:

Return:

  • 0 メッセージを正常に復号しました
  • BAD_ALIGN_E ブロックアライメントエラー検出時に返される可能性があります
  • BAD_LENGTH_E ライブラリーがWOLFSSL_AES_CBC_LENGTH_CHECKSで構築されている場合で、入力長がAESブロック長の倍数でない場合に返されます。

function wc_AesCtrEncrypt

int wc_AesCtrEncrypt(
    Aes * aes,
    byte * out,
    const byte * in,
    word32 sz
)

入力バッファからメッセージを暗号化/復号し、AES CTRモードを使用して出力バッファーに出力します。 この関数は、wolfSSL_Aes_Counterがコンパイル時に有効になっている場合にのみ有効になります。 この機能を呼び出す前に、Aes構造体をwc_AesSetKeyで初期化する必要があります。 この関数は復号と暗号化の両方に使用されます。_注:暗号化と復号のための同じAPIを使用することについて。ユーザーは暗号化/復号のためのAes構造体を区別する必要があります。

Parameters:

  • aes データを復号するために使用されるAes構造体へのポインタ
  • out 暗号化されたメッセージの暗号化テキストを保存する出力バッファへのポインタ サイズはAES_BLOCK_SIZEの倍数でなければなりません。必要な場合はパディングは追加されます。
  • in 暗号化されるプレーンテキストを含む入力バッファへのポインタ。 サイズはAES_BLOCK_SIZEの倍数でなければなりません。パディングされている必要があります。
  • sz 入力バッファのサイズ Example
Aes enc;
Aes dec;
// initialize enc and dec with AesSetKeyDirect, using direction
AES_ENCRYPTION
// since the underlying API only calls Encrypt and by default calling
encrypt on
// a cipher results in a decryption of the cipher

byte msg[AES_BLOCK_SIZE * n]; //n being a positive integer making msg
some multiple of 16 bytes
// fill plain with message text
byte cipher[AES_BLOCK_SIZE * n];
byte decrypted[AES_BLOCK_SIZE * n];
wc_AesCtrEncrypt(&enc, cipher, msg, sizeof(msg)); // encrypt plain
wc_AesCtrEncrypt(&dec, decrypted, cipher, sizeof(cipher));
// decrypt cipher text

See: wc_AesSetKey

Return: int WolfSSLエラーまたは成功状況に対応する整数値

function wc_AesEncryptDirect

int wc_AesEncryptDirect(
    Aes * aes,
    byte * out,
    const byte * in
)

この関数は、入力ブロックinで与えられた単一の平文データブロックを暗号化して単一の出力ブロックoutに出力します。 その際に、Aes構造体で提供されたの鍵を使用します。鍵はこの機能を呼び出す前にwc_AesSetKeyで初期化されている必要があります。 wc_AesSetKeyへの入力ivにはNULLを指定して呼び出してください。 これは、Configure Option WolfSSL_AES_DIRECTが有効になっている場合にのみ有効になります。 __ warning:ほぼすべてのユースケースでECBモードは安全性が低いと考えられています。 可能な限りECB APIを直接使用しないでください。

Parameters:

  • aes データの暗号化に使用されるAes構造体へのポインタ
  • out 暗号化されたメッセージの暗号化テキストを保存する出力バッファへのポインタ Example
Aes enc;
// initialize enc with AesSetKey, using direction AES_ENCRYPTION
byte msg [AES_BLOCK_SIZE]; // 16 bytes
// initialize msg with plain text to encrypt
byte cipher[AES_BLOCK_SIZE];
wc_AesEncryptDirect(&enc, cipher, msg);

See:

Return: int WolfSSLエラーまたは成功状況に対応する整数値

function wc_AesDecryptDirect

int wc_AesDecryptDirect(
    Aes * aes,
    byte * out,
    const byte * in
)

この関数は、入力ブロックinで与えられた単一の暗号データブロックを復号して単一の出力ブロックoutに出力します。 提供されたAes構造体の鍵を使用します。Aes構造体は、この機能を呼び出す前にwc_AesSetKeyで初期化される必要があります。wc_AesSetKeyは、ivがNULLで呼び出される必要があります。 これは、Configure Option WOLFSSL_AES_DIRECTが有効になっている場合にのみ有効になります。 __ warning:ほぼすべてのユースケースでECBモードは安全性が低いと考えられています。可能な限りECB APIを直接使用しないでください。

Parameters:

  • aes データの復号に使用されるAESオブジェクトへのポインタ
  • out 復号された平文テキストを格納する出力バッファへのポインタ Example
Aes dec;
// initialize enc with AesSetKey, using direction AES_DECRYPTION
byte cipher [AES_BLOCK_SIZE]; // 16 bytes
// initialize cipher with cipher text to decrypt
byte msg[AES_BLOCK_SIZE];
wc_AesDecryptDirect(&dec, msg, cipher);

See:

Return: int WolfSSLエラーまたは成功状況に対応する整数値

function wc_AesSetKeyDirect

int wc_AesSetKeyDirect(
    Aes * aes,
    const byte * key,
    word32 len,
    const byte * iv,
    int dir
)

この関数は、CTRモードのAES鍵をAESで設定するために使用されます。 指定された鍵、iv(初期化ベクトル)、および暗号化dir(方向)でAESオブジェクトを初期化します。 構成オプションWOLFSSL_AES_DIRECTが有効になっている場合にのみ有効になります。 wc_AesEncryptDirectとwc_AesDecryptDirectを呼び出す際のAes構造体の初期化にはこの関数を使う必要があります。 現在wc_AesSetKeyDirectは内部的にwc_AesSetKeyを使用します。 __ warning:ほぼすべてのユースケースでECBモードは安全性が低いと考えられています。 可能な限りECB APIを直接使用しないでください

Parameters:

  • aes データの暗号化に使用されるAESオブジェクトへのポインタ
  • key 暗号化と復号のための16,24、または32バイトの秘密鍵
  • len 渡された鍵の長さ
  • iv 鍵を初期化するために使用される初期化ベクトル
  • dir 暗号化の方向を指定します。wc_AesEncryptDirectに使用する際にはAES_ENCRYPTION、wc_AesDecryptDirectにはAES_DECRYPTIONを指定します。 (注意: wc_AesSetKeyDirect をAesカウンターモードに使用する際には暗号化/復号によらず、AES_ENCRYPTIONを指定してください。)

See:

Return:

  • 0 鍵の設定に成功しました。
  • BAD_FUNC_ARG 与えられたキーが無効な長さの場合に返されます。

Example

Aes enc;
int ret = 0;
byte key[] = { some 16, 24, or 32 byte key };
byte iv[]  = { some 16 byte iv };
if (ret = wc_AesSetKeyDirect(&enc, key, sizeof(key), iv,
AES_ENCRYPTION) != 0) {
// failed to set aes key
}

function wc_AesGcmSetKey

int wc_AesGcmSetKey(
    Aes * aes,
    const byte * key,
    word32 len
)

この機能は、AES GCM(Galois/Counter Mode)の鍵を設定するために使用されます。 与えられたkeyでAes構造体を初期化します。コンパイル時にConfigureオプションHAVE_AESGCMが有効になっている場合にのみ有効になります。

Parameters:

  • aes データの暗号化に使用されるAes構造体へのポインタ
  • key 暗号化と復号のための16,24、または32バイトの秘密鍵 Example
Aes enc;
int ret = 0;
byte key[] = { some 16, 24,32 byte key };
if (ret = wc_AesGcmSetKey(&enc, key, sizeof(key)) != 0) {
// failed to set aes key
}

See:

Return:

  • 0 鍵の設定に成功しました。
  • BAD_FUNC_ARG 与えられた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_SIZEの倍数でなければなりません。パディングされている必要があります。
  • sz 暗号化する入力メッセージの長さ
  • iv 初期化ベクトルを含むバッファへのポインタ
  • ivSz 初期化ベクトルの長さ
  • authTag 認証タグを保存するバッファへのポインタ
  • authTagSz 希望の認証タグの長さ
  • authIn 入力認証ベクトルを含むバッファへのポインタ Example
Aes enc;
// initialize aes structure by calling wc_AesGcmSetKey

byte plain[AES_BLOCK_LENGTH * n]; //n being a positive integer
making plain some multiple of 16 bytes
// initialize plain with msg to encrypt
byte cipher[sizeof(plain)];
byte iv[] = // some 16 byte iv
byte authTag[AUTH_TAG_LENGTH];
byte authIn[] = // Authentication Vector

wc_AesGcmEncrypt(&enc, cipher, plain, sizeof(cipher), iv, sizeof(iv),
        authTag, sizeof(authTag), authIn, sizeof(authIn));

See:

Return: 0 入力メッセージの暗号化に成功しました

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に格納します。 また、指定された認証タグ、authTagに対して、入力認証ベクトル、authInをチェックします。

Parameters:

  • aes データの復号に使用されるAes構造体へのポインタ
  • out メッセージテキストを保存する出力バッファへのポインタ。サイズは入力バッファinのサイズ(sz)と同じでなければならない。
  • in 暗号テキストを保持する入力バッファへのポインタ。サイズはAES_BLOCK_SIZEの倍数でなければならない。
  • sz 復号する暗号テキストの長さ
  • iv 初期化ベクトルを含むバッファへのポインタ
  • ivSz 初期化ベクトルの長さ
  • authTag 認証タグを含むバッファへのポインタ
  • authTagSz 希望の認証タグの長さ
  • authIn 入力認証ベクトルを含むバッファへのポインタ Example
Aes enc; //can use the same struct as was passed to wc_AesGcmEncrypt
// initialize aes structure by calling wc_AesGcmSetKey if not already done

byte cipher[AES_BLOCK_LENGTH * n]; //n being a positive integer
making cipher some multiple of 16 bytes
// initialize cipher with cipher text to decrypt
byte output[sizeof(cipher)];
byte iv[] = // some 16 byte iv
byte authTag[AUTH_TAG_LENGTH];
byte authIn[] = // Authentication Vector

wc_AesGcmDecrypt(&enc, output, cipher, sizeof(cipher), iv, sizeof(iv),
        authTag, sizeof(authTag), authIn, sizeof(authIn));

See:

Return:

  • 0 入力メッセージの復号に成功しました
  • AES_GCM_AUTH_E 認証タグが提供された認証コードベクトルと一致しない場合、authtag。

function wc_GmacSetKey

int wc_GmacSetKey(
    Gmac * gmac,
    const byte * key,
    word32 len
)

この関数は、GAROISメッセージ認証に使用されるGmac構造体の鍵を初期化して設定します。

Parameters:

  • gmac 認証に使用されるGmac構造体へのポインタ
  • key 認証のための16,24、または32バイトの秘密鍵 Example
Gmac gmac;
key[] = { some 16, 24, or 32 byte length key };
wc_GmacSetKey(&gmac, key, sizeof(key));

See: wc_GmacUpdate

Return:

  • 0 鍵の設定に成功しました
  • BAD_FUNC_ARG 引数keyの長さが無効な場合は返されます。

function wc_GmacUpdate

int wc_GmacUpdate(
    Gmac * gmac,
    const byte * iv,
    word32 ivSz,
    const byte * authIn,
    word32 authInSz,
    byte * authTag,
    word32 authTagSz
)

この関数はauthIn InputのGMACハッシュを生成し、結果をauthTagバッファに格納します。 wc_GmacUpdateを実行した後、生成されたauthTagを既知の認証タグに比較してメッセージの信頼性を検証する必要があります。

Parameters:

  • gmac 認証に使用されるGmac構造体へのポインタ
  • iv ハッシュに使用される初期化ベクトル
  • ivSz 使用される初期化ベクトルのサイズ
  • authIn 確認する認証ベクトルを含むバッファへのポインタ
  • authInSz 認証ベクトルのサイズ
  • authTag GMACハッシュを保存する出力バッファへのポインタ Example
Gmac gmac;
key[] = { some 16, 24, or 32 byte length key };
iv[] = { some 16 byte length iv };

wc_GmacSetKey(&gmac, key, sizeof(key));
authIn[] = { some 16 byte authentication input };
tag[AES_BLOCK_SIZE]; // will store authentication code

wc_GmacUpdate(&gmac, iv, sizeof(iv), authIn, sizeof(authIn), tag,
sizeof(tag));

See: wc_GmacSetKey

Return: 0 GMACハッシュの計算に成功しました。

function wc_AesCcmSetKey

int wc_AesCcmSetKey(
    Aes * aes,
    const byte * key,
    word32 keySz
)

この関数は、CCMを使用してAESオブジェクトの鍵を設定します(CBC-MACのカウンタ)。Aes構造体へのポインタを取り、引数で与えられたkeyで初期化します。

Parameters:

  • aes 引数keyを保管するためのAes構造体
  • key 暗号化と復号のための16,24、または32バイトの秘密鍵 Example
Aes enc;
key[] = { some 16, 24, or 32 byte length key };

wc_AesCcmSetKey(&aes, key, sizeof(key));

See:

Return: none

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を使用して、入力メッセージ、IN、OUT、OUT、OUTをCCM(CBC-MACのカウンタ)を暗号化します。 その後、Authin Inputから認証タグ、AuthtAgを計算して格納します。

Parameters:

  • aes データの暗号化に使用されるAes構造体へのポインタ
  • out 暗号テキストを保存する出力バッファへのポインタ
  • in 暗号化するメッセージを保持している入力バッファへのポインタ
  • sz 暗号化する入力メッセージの長さ
  • nonce nonceを含むバッファへのポインタ(1回だけ使用されている数)
  • nonceSz ノンスの長さ
  • authTag 認証タグを保存するバッファへのポインタ
  • authTagSz 希望の認証タグの長さ
  • authIn 入力認証ベクトルを含むバッファへのポインタ Example
Aes enc;
// initialize enc with wc_AesCcmSetKey

nonce[] = { initialize nonce };
plain[] = { some plain text message };
cipher[sizeof(plain)];

authIn[] = { some 16 byte authentication input };
tag[AES_BLOCK_SIZE]; // will store authentication code

wc_AesCcmEncrypt(&enc, cipher, plain, sizeof(plain), nonce, sizeof(nonce),
        tag, sizeof(tag), authIn, sizeof(authIn));

See:

Return: none

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を使用して、入力暗号テキストを、CCM(CBC-MACのカウンタ)を使用して出力バッファーに復号します。その後、authIn入力からauthTagを計算します。認証タグが無効な場合は、出力バッファをゼロに設定し、AES_CCM_AUTH_Eを返します。

Parameters:

  • aes データの復号に使用されるAes構造体へのポインタ
  • out 復号したテキストを出力する出力バッファへのポインタ
  • in 復号するメッセージを保持している入力バッファへのポインタ
  • sz 入力暗号テキストのサイズ
  • nonce nonceを含むバッファへのポインタ(1回だけ使用されている数)
  • nonceSz ノンスの長さ
  • authTag 認証タグを保存するバッファへのポインタ
  • authTagSz 希望の認証タグの長さ
  • authIn 入力認証ベクトルを含むバッファへのポインタ Example
Aes dec;
// initialize dec with wc_AesCcmSetKey

nonce[] = { initialize nonce };
cipher[] = { encrypted message };
plain[sizeof(cipher)];

authIn[] = { some 16 byte authentication input };
tag[AES_BLOCK_SIZE] = { authentication tag received for verification };

int return = wc_AesCcmDecrypt(&dec, plain, cipher, sizeof(cipher),
nonce, sizeof(nonce),tag, sizeof(tag), authIn, sizeof(authIn));
if(return != 0) {
// decrypt error, invalid authentication code
}

See:

Return:

  • 0 入力メッセージの復号に成功しました
  • AES_CCM_AUTH_E 認証タグが提供された認証コードベクトルと一致しない場合

function wc_AesXtsSetKey

int wc_AesXtsSetKey(
    XtsAes * aes,
    const byte * key,
    word32 len,
    int dir,
    void * heap,
    int devId
)

この関数は、AES XTSモードを使用する暗号化または復号で使用する鍵の設定に使用します。完了したら、AESキーでwc_AesXtsFreeを呼び出すことがユーザーになりました。

Parameters:

  • aes 暗号化または復号処理に使用するXtsAes構造体
  • key 補正値(Tewak)を加味したAES鍵を保持しているバッファ
  • len 鍵バッファのサイズ。鍵サイズの2倍にする必要があります。(すなわち、16バイトの鍵の場合は32)
  • dir 処理方向、AES_EncryptionまたはAES_Decryptionのいずれかを指定します。
  • heap メモリに使用するヒープヒント。NULLを設定することもできます。 Example
XtsAes aes;

if(wc_AesXtsSetKey(&aes, key, sizeof(key), AES_ENCRYPTION, NULL, 0) != 0)
{
    // Handle error
}
wc_AesXtsFree(&aes);

See:

Return: 0 成功

function wc_AesXtsEncryptSector

int wc_AesXtsEncryptSector(
    XtsAes * aes,
    byte * out,
    const byte * in,
    word32 sz,
    word64 sector
)

wc_AesXtsEncryptと同じ処理を行いますが、バイト配列の代わりにTweak値としてword64型を使用します。本関数でword64をバイト配列に変換し、wc_AesXtsEncryptを呼び出します。

Parameters:

  • aes ブロック暗号化/復号に使用するXtsAes構造体
  • out 暗号テキストを保持するための出力バッファ
  • in 暗号化する入力プレーンテキストバッファ
  • sz バッファ(in, out両方)のサイズ Example
XtsAes aes;
unsigned char plain[SIZE];
unsigned char cipher[SIZE];
word64 s = VALUE;

//set up keys with AES_ENCRYPTION as dir

if(wc_AesXtsEncryptSector(&aes, cipher, plain, SIZE, s) != 0)
{
    // Handle error
}
wc_AesXtsFree(&aes);

See:

Return: 0 成功

function wc_AesXtsDecryptSector

int wc_AesXtsDecryptSector(
    XtsAes * aes,
    byte * out,
    const byte * in,
    word32 sz,
    word64 sector
)

wc_AesXtsDecryptと同じ処理を行いますが、バイト配列の代わりにTweak値としてword64タイプを使用します。本関数でword64をバイト配列に変換するだけです。

Parameters:

  • aes ブロック暗号化/復号に使用するXtsAes構造体
  • out プレーンテキストを保持するための出力バッファ
  • in 復号する暗号テキストバッファ
  • sz バッファ(in, out両方)のサイズ Example
XtsAes aes;
unsigned char plain[SIZE];
unsigned char cipher[SIZE];
word64 s = VALUE;

//set up aes key with AES_DECRYPTION as dir and tweak with AES_ENCRYPTION

if(wc_AesXtsDecryptSector(&aes, plain, cipher, SIZE, s) != 0)
{
    // Handle error
}
wc_AesXtsFree(&aes);

See:

Return: 0 成功

function wc_AesXtsEncrypt

int wc_AesXtsEncrypt(
    XtsAes * aes,
    byte * out,
    const byte * in,
    word32 sz,
    const byte * i,
    word32 iSz
)

AES XTSモードで暗号化します。(XTS)XEX暗号化と平文がブロック長の倍数でない場合の処理(Ciphertext Stealing)を行います。

Parameters:

  • aes ブロック暗号化/復号に使用するXtsAes構造体
  • out 暗号テキストを保持するための出力バッファ
  • in 暗号化する入力プレーンテキストを含むバッファ
  • sz バッファ(in, out両方)のサイズ
  • i Tweakに使用する値 Example
XtsAes aes;
unsigned char plain[SIZE];
unsigned char cipher[SIZE];
unsigned char i[AES_BLOCK_SIZE];

//set up key with AES_ENCRYPTION as dir

if(wc_AesXtsEncrypt(&aes, cipher, plain, SIZE, i, sizeof(i)) != 0)
{
    // Handle error
}
wc_AesXtsFree(&aes);

See:

Return: 0 成功

function wc_AesXtsDecrypt

int wc_AesXtsDecrypt(
    XtsAes * aes,
    byte * out,
    const byte * in,
    word32 sz,
    const byte * i,
    word32 iSz
)

暗号化と同じプロセスですが、XtsAes構造体はAES_Decryptionタイプです。

Parameters:

  • aes ブロック暗号化/復号に使用するXtsAes構造体
  • out プレーンテキストを保持するための出力バッファ
  • in 復号する暗号テキストを含むバッファ
  • sz バッファ(in, out両方)のサイズ
  • i Tweakに使用する値 Example
XtsAes aes;
unsigned char plain[SIZE];
unsigned char cipher[SIZE];
unsigned char i[AES_BLOCK_SIZE];

//set up key with AES_DECRYPTION as dir and tweak with AES_ENCRYPTION

if(wc_AesXtsDecrypt(&aes, plain, cipher, SIZE, i, sizeof(i)) != 0)
{
    // Handle error
}
wc_AesXtsFree(&aes);

See:

Return: 0 成功

function wc_AesXtsFree

int wc_AesXtsFree(
    XtsAes * aes
)

この関数はXtsAes構造体で使用されるすべてのリソースを解放します。

See:

Return: 0 成功 Example

XtsAes aes;

if(wc_AesXtsSetKey(&aes, key, sizeof(key), AES_ENCRYPTION, NULL, 0) != 0)
{
    // Handle error
}
wc_AesXtsFree(&aes);

function wc_AesInit

int wc_AesInit(
    Aes * aes,
    void * heap,
    int devId
)

Aes構造体を初期化します。ヒープヒントを設定し、ASYNCハードウェアを使用する場合のIDも設定します。Aes構造体の使用が終了した際にwc_AesFreeを呼び出すのはユーザーに任されています。

Parameters:

  • aes 初期化対象のAes構造体
  • heap 必要に応じてmalloc / freeに使用するヒープヒント Example
Aes enc;
void* hint = NULL;
int devId = INVALID_DEVID; //if not using async INVALID_DEVID is default

//heap hint could be set here if used

wc_AesInit(&enc, hint, devId);

See:

Return: 0 成功

function wc_AesFree

int wc_AesFree(
    Aes * aes
)

Aes構造体に関連つけられたリソースを可能なら解放します。 内部的にはノーオペレーションとなることもありますが、ベストプラクティスとしてどのケースでもこの関数を呼び出すことを推奨します。

Parameters:

  • aes FreeすべきAes構造体へのポインタ Example
Aes enc;
void* hint = NULL;
int devId = INVALID_DEVID; //if not using async INVALID_DEVID is default
//heap hint could be set here if used
wc_AesInit(&enc, hint, devId);
// ... do some interesting things ...
wc_AesFree(&enc);

See: wc_AesInit

Return: 戻り値なし

function wc_AesCfbEncrypt

int wc_AesCfbEncrypt(
    Aes * aes,
    byte * out,
    const byte * in,
    word32 sz
)

AES CFBモードで暗号化を行います。

Parameters:

  • aes ブロック暗号化/復号に使用するAes構造体
  • out 暗号テキストを保持するための出力バッファは、少なくとも入力プレーンテキストバッファと同じサイズが必要です。
  • in 暗号化する入力プレーンテキストバッファ Example
Aes aes;
unsigned char plain[SIZE];
unsigned char cipher[SIZE];

//set up key with AES_ENCRYPTION as dir for both encrypt and decrypt

if(wc_AesCfbEncrypt(&aes, cipher, plain, SIZE) != 0)
{
    // Handle error
}

See:

Return: 0 成功時に返ります。失敗時には負値が返されます。

function wc_AesCfbDecrypt

int wc_AesCfbDecrypt(
    Aes * aes,
    byte * out,
    const byte * in,
    word32 sz
)

AES CFBモードで復号を行います。

Parameters:

  • aes ブロック暗号化/復号に使用するAes構造体
  • out 復号されたテキストを保持するための出力バッファは、少なくとも入力バッファと同じサイズが必要です。
  • in 復号する暗号データを保持した入力バッファ Example
Aes aes;
unsigned char plain[SIZE];
unsigned char cipher[SIZE];

//set up key with AES_ENCRYPTION as dir for both encrypt and decrypt

if(wc_AesCfbDecrypt(&aes, plain, cipher, SIZE) != 0)
{
    // Handle error
}

See:

Return: 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 ナンス(一度だけ使用される値)。ADと同じ方法でアルゴリズムによって使用されます。
  • nonceSz バイト単位のナンスバッファの長さ。
  • in 暗号化する平文のバッファ。
  • inSz 平文バッファの長さ
  • siv S2VによるSIV出力(RFC 5297 2.4参照)。 Example
byte key[] = { some 32, 48, or 64 byte key };
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) {
    // failed to encrypt
}

See: wc_AesSivDecrypt

Return:

  • 0 暗号化に成功した場合
  • BAD_FUNC_ARG 鍵、SIV、または出力バッファがNULLの場合。鍵サイズが32,48、または64バイトの場合にも返されます。
  • Other その他の負のエラー値。AESまたはCMAC操作が失敗した場合に返されます。

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 ナンス(一度だけ使用される値)。ADと同じ方法で、基礎となるアルゴリズムによって使用されます。
  • nonceSz バイト単位のナンスバッファの長さ。
  • in 復号する暗号文バッファ。
  • inSz 暗号文バッファの長さ
  • siv 暗号文に付随するSIV(RFC 5297 2.4を参照)。 Example
byte key[] = { some 32, 48, or 64 byte key };
byte assoc[] = {0x01, 0x2, 0x3};
byte nonce[] = {0x04, 0x5, 0x6};
byte cipherText[] = {0xDE, 0xAD, 0xBE, 0xEF};
byte siv[AES_BLOCK_SIZE] = { the SIV that came with the ciphertext };
byte plainText[sizeof(cipherText)];
if (wc_AesSivDecrypt(key, sizeof(key), assoc, sizeof(assoc), nonce,
    sizeof(nonce), cipherText, sizeof(cipherText), siv, plainText) != 0) {
    // failed to decrypt
}

See: wc_AesSivEncrypt

Return:

  • 0 復号に成功した場合
  • BAD_FUNC_ARG 鍵、SIV、または出力バッファがNULLの場合。キーサイズが32,48、または64バイトの場合にも返されます。
  • AES_SIV_AUTH_E S2Vによって派生したSIVが入力SIVと一致しない場合(RFC 5297 2.7を参照)。
  • Other その他の負のエラー値。AESまたはCMAC操作が失敗した場合に返されます。

function wc_AesCbcDecryptWithKey

int wc_AesCbcDecryptWithKey(
    byte * out,
    const byte * in,
    word32 inSz,
    const byte * key,
    word32 keySz,
    const byte * iv
)

入力バッファーから暗号を復号化し、AESでCipher Block Chainingを使用して出力バッファに出力バッファーに入れます。この関数は、AES構造を初期化する必要はありません。代わりに、キーとIV(初期化ベクトル)を取り、これらを使用してAESオブジェクトを初期化してから暗号テキストを復号化します。

Parameters:

  • out 復号化されたメッセージのプレーンテキストを保存する出力バッファへのポインタ
  • in 復号化される暗号テキストを含む入力バッファへのポインタ
  • inSz 入力メッセージのサイズ
  • key 復号化のための16,24、または32バイトの秘密鍵 Example
int ret = 0;
byte key[] = { some 16, 24, or 32 byte key };
byte iv[]  = { some 16 byte iv };
byte cipher[AES_BLOCK_SIZE * n]; //n being a positive integer making
cipher some multiple of 16 bytes
// fill cipher with cipher text
byte plain [AES_BLOCK_SIZE * n];
if ((ret = wc_AesCbcDecryptWithKey(plain, cipher, AES_BLOCK_SIZE, key,
AES_BLOCK_SIZE, iv)) != 0 ) {
// Decrypt Error
}

See:

Return:

  • 0 メッセージの復号化に成功しました
  • BAD_ALIGN_E ブロック整列エラーに戻りました
  • BAD_FUNC_ARG aesetivの間にキーの長さが無効な場合、またはAESオブジェクトがNULLの場合
  • MEMORY_E wolfssl_small_stackが有効になっていて、xmallocがAESオブジェクトのインスタンス化に失敗した場合に返されます。

Updated on 2024-10-10 at 02:34:11 +0000