# AES_Encrypt

## 構文

      #include <twl/aes.h>

      #define AES_ENCRYPT_HEADER_SIZE 16

      AESResult AES_Encrypt(
                  const void* src,
                  u32         srcSize,
                  void*       dst,
                  AESCallback callback,
                  void*       arg );

## 引数

src | 平文へのポインタ。4バイトアライメントでなければなりません。また、メインメモリ上を指していなければなりません。
srcSize | 平文のサイズ。0 より大きくなければなりません。
dst | 暗号文を格納するバッファへのポインタ。4バイトアライメントでなければなりません。また、メインメモリ上を指していなければなりません。 srcSize + `AES_ENCRYPT_HEADER_SIZE` バイトの領域が必要です。
callback | 暗号化完了時に呼び出されるコールバック関数へのポインタ。 NULL を指定することもできます。
arg | 上記コールバック関数に渡されるユーザ定義のパラメータ。 NULL を含む任意の値を指定することができます。

## 返り値

AES の処理を正常に開始できた場合は AES_RESULT_SUCCESS を返します。 それ以外の返り値はエラーです。

## 説明

AES アルゴリズムを使用して暗号化を行います。 復号化には `AES_Decrypt()` を使用します。

`AES_SetKey()` で設定された鍵を用いて src から srcSize バイトを暗号化します。 暗号化結果は dst から srcSize + `AES_ENCRYPT_HEADER_SIZE` バイトの領域に書き込まれます。 暗号化処理が完了するとその結果と arg を引数として callback が呼び出されます。 callback は割り込みハンドラから呼び出されるため、 割り込み禁止状態で呼び出されることに注意してください。 また、逆に割り込み禁止状態では callback が 呼び出されないことにも注意してください。

この関数は処理を開始するとすぐに制御を返します。 処理が正常に開始されると返り値は `AES_RESULT_SUCCESS` になりますが、 その後、処理中にエラーが発生した場合にはエラー値と arg を引数として callback が呼び出されます。 このコールバックによるエラー通知は割り込みハンドラから起動されますので 場合によっては関数から処理が返る前にコールバックによってエラーが通知される可能性があることに注意してください。

暗号化の鍵はあらかじめ `AES_SetKey()` で設定しておく必要があります。

## 参照

`AES_Decrypt`

## 履歴

2008/09/06 AES_InitRand が削除されたことに対応。
2007/12/25 初版