Files
wolfssl/doc/dox_comments/header_files-ja/aes.h

753 lines
36 KiB
C
Raw Normal View History

/*!
\ingroup AES
\brief AES構造を初期化します
\return 0
\return BAD_FUNC_ARG
\param aes AES構造へのポインタ
\param key 16,2432
\param len
\param iv 使
_Example_
\code
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
}
\endcode
\sa wc_AesSetKeyDirect
\sa wc_AesSetIV
*/
int wc_AesSetKey(Aes* aes, const byte* key, word32 len,
const byte* iv, int dir);
/*!
\ingroup AES
\brief AESオブジェクトの初期化ベクトルを設定しますAESオブジェクトは
\return 0
\return BAD_FUNC_ARG AESポインタがNULLの場合に返されます
\param aes AES構造へのポインタ
_Example_
\code
Aes enc;
// set enc key
byte iv[] = { some 16 byte iv };
if (ret = wc_AesSetIV(&enc, iv) != 0) {
// failed to set aes iv
}
\endcode
\sa wc_AesSetKeyDirect
\sa wc_AesSetKey
*/
int wc_AesSetIV(Aes* aes, const byte* iv);
/*!
\ingroup AES
\brief AESでCipher Block Chainingを使用して出力バッファに出力バッファーに入れますAESSetKeyを呼び出すことによってAESオブジェクトが初期化されていることを必要としますAESブロック長であると仮定しWolfSSL_AES_CBC_LENGTH_CHECKSが定義されている場合は任意選択でチェックおよび適用されますPKCS7OpenSSL AES-CBCメソッドとは異なりますWOLFSSLと対応するOpenSSL関数を相互運用するにはOpenSSLコマンドライン関数で-nopadオプションを指定してWolfSSL AESCCENCRYPTメソッドのように動作し
\return 0
\return BAD_ALIGN_E:
\return BAD_LENGTH_E AESブロック長の倍数でない場合はwolfssl_aes_cbc_length_checksで構築されている場合に返されます
\param aes 使AESオブジェクトへのポインタ
\param out
\param in
_Example_
\code
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
}
\endcode
\sa wc_AesSetKey
\sa wc_AesSetIV
\sa wc_AesCbcDecrypt
*/
int wc_AesCbcEncrypt(Aes* aes, byte* out,
const byte* in, word32 sz);
/*!
\ingroup AES
\brief AESでCipher Block Chainingを使用して出力バッファに出力バッファーに入れますAESSetKeyを呼び出すことによってAES構造が初期化されていることを必要としますAESブロック長で整列していたと仮定しOpenSSL AES-CBCメソッドとは異なりますPKCS7WolfSSL機能と同等のOpenSSL関数を相互運用するにはOpenSSLコマンドライン関数で-nopadオプションを指定しwolfssl aescbceNcryptメソッドのように動作し
\return 0
\return BAD_ALIGN_E
\return BAD_LENGTH_E AESブロック長の倍数でない場合はwolfssl_aes_cbc_length_checksで構築されている場合に返されます
\param aes 使AESオブジェクトへのポインタ
\param out
\param in
_Example_
\code
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
}
\endcode
\sa wc_AesSetKey
\sa wc_AesCbcEncrypt
*/
int wc_AesCbcDecrypt(Aes* aes, byte* out,
const byte* in, word32 sz);
/*!
\ingroup AES
\brief /AESを使用してCTRモードを使用して出力バッファーに出力バッファーに入れますwolfssl_aes_counterがコンパイル時に有効になっている場合にのみ有効になりますAES構造体をAessetKeyで初期化する必要があります使_注APIを使用することについて/AES構造体を区別する必要があります
\return int WolfSSLエラーまたは成功状況に対応する整数値
\param aes 使AESオブジェクトへのポインタ
\param out
\param in
_Example_
\code
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
\endcode
\sa wc_AesSetKey
*/
int wc_AesCtrEncrypt(Aes* aes, byte* out,
const byte* in, word32 sz);
/*!
\ingroup AES
\brief INOUTPUTブロックOUTですAES構造体のキーを使用しますWC_AESSETKEYで初期化される必要がありますWC_AESSETKEYはIVセットがNULLに呼び出されたはずですConfigure Option WolfSSL_AES_DIRECTが有効になっている場合にのみ有効になります__ warningECBモードは安全性が低いと考えられていますECB APIを直接使用しないでください
\return int WolfSSLエラーまたは成功状況に対応する整数値
\param aes 使AESオブジェクトへのポインタ
\param out
_Example_
\code
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);
\endcode
\sa wc_AesDecryptDirect
\sa wc_AesSetKeyDirect
*/
int wc_AesEncryptDirect(Aes* aes, byte* out, const byte* in);
/*!
\ingroup AES
\brief 1ININOUTPUT OUTですAES構造体のキーを使用しますWC_AESSETKEYで初期化される必要がありますWC_AESSETKEYはIVセットがNULLに呼び出されたはずですConfigure Option WolfSSL_AES_DIRECTが有効になっている場合にのみ有効になります__ warningECBモードは安全性が低いと考えられていますECB APIを直接使用しないでください
\return int WolfSSLエラーまたは成功状況に対応する整数値
\param aes 使AESオブジェクトへのポインタ
\param out
_Example_
\code
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);
\endcode
\sa wc_AesEncryptDirect
\sa wc_AesSetKeyDirect
*/
int wc_AesDecryptDirect(Aes* aes, byte* out, const byte* in);
/*!
\ingroup AES
\brief CTRモードのAESキーをAESで設定するために使用されますIVDIRAESオブジェクトを初期化しますwolfssl_aes_directが有効になっている場合にのみ有効になりますWC_AessetKeyDirectは内部的にWC_AESSETKEYを使用します__ warningECBモードは安全性が低いと考えられていますECB APIを直接使用しないでください
\return 0
\return BAD_FUNC_ARG
\param aes 使AESオブジェクトへのポインタ
\param key 16,2432
\param len
\param iv 使
_Example_
\code
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
}
\endcode
\sa wc_AesEncryptDirect
\sa wc_AesDecryptDirect
\sa wc_AesSetKey
*/
int wc_AesSetKeyDirect(Aes* aes, const byte* key, word32 len,
const byte* iv, int dir);
/*!
\ingroup AES
\brief AES GCMGalois / Counter Mode使AESオブジェクトを初期化しますConfigureオプションhous_aesgcmが有効になっている場合にのみ有効になります
\return 0
\return BAD_FUNC_ARG
\param aes 使AESオブジェクトへのポインタ
\param key 16,2432
_Example_
\code
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
}
\endcode
\sa wc_AesGcmEncrypt
\sa wc_AesGcmDecrypt
*/
int wc_AesGcmSetKey(Aes* aes, const byte* key, word32 len);
/*!
\ingroup AES
\brief INに保持しOUTに格納しますIVAuthinAuthTagへの入力認証ベクトルをエンコードします
\return 0
\param aes - 使AESオブジェクトへのポインタ
\param out
\param in
\param sz
\param iv
\param ivSz
\param authTag
\param authTagSz
\param authIn
_Example_
\code
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));
\endcode
\sa wc_AesGcmSetKey
\sa wc_AesGcmDecrypt
*/
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);
/*!
\ingroup AES
\brief INに保持しOUTに格納しますauthtagに対してAuthinをチェックします
\return 0
\return AES_GCM_AUTH_E authtag
\param aes 使AESオブジェクトへのポインタ
\param out
\param in
\param sz
\param iv
\param ivSz
\param authTag
\param authTagSz
\param authIn
_Example_
\code
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));
\endcode
\sa wc_AesGcmSetKey
\sa wc_AesGcmEncrypt
*/
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);
/*!
\ingroup AES
\brief GAROISメッセージ認証に使用されるGMACオブジェクトのキーを初期化して設定します
\return 0
\return BAD_FUNC_ARG
\param gmac 使GMACオブジェクトへのポインタ
\param key 16,2432
_Example_
\code
Gmac gmac;
key[] = { some 16, 24, or 32 byte length key };
wc_GmacSetKey(&gmac, key, sizeof(key));
\endcode
\sa wc_GmacUpdate
*/
int wc_GmacSetKey(Gmac* gmac, const byte* key, word32 len);
/*!
\ingroup AES
\brief Authin InputのGMACハッシュを生成しAuthtagバッファに格納しますwc_gmacupdateを実行した後authtagを既知の認証タグに比較してメッセージの信頼性を検証する必要があります
\return 0 GMACハッシュの計算に成功しました
\param gmac 使GMACオブジェクトへのポインタ
\param iv 使
\param ivSz 使
\param authIn
\param authInSz
\param authTag GMACハッシュを保存する出力バッファへのポインタ
_Example_
\code
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));
\endcode
\sa wc_GmacSetKey
*/
int wc_GmacUpdate(Gmac* gmac, const byte* iv, word32 ivSz,
const byte* authIn, word32 authInSz,
byte* authTag, word32 authTagSz);
/*!
\ingroup AES
\brief CCMを使用してAESオブジェクトのキーを設定しますCBC-MACのカウンタAES構造体へのポインタを取り
\return none
\param aes AES構造
\param key 16,2432
_Example_
\code
Aes enc;
key[] = { some 16, 24, or 32 byte length key };
wc_AesCcmSetKey(&aes, key, sizeof(key));
\endcode
\sa wc_AesCcmEncrypt
\sa wc_AesCcmDecrypt
*/
int wc_AesCcmSetKey(Aes* aes, const byte* key, word32 keySz);
/*!
\ingroup AES
\brief CCMを使用してINOUTOUTOUTをCCMCBC-MACのカウンタAuthin Inputから認証タグAuthtAgを計算して格納します
\return none
\param aes 使AESオブジェクトへのポインタ
\param out
\param in
\param sz
\param nonce nonceを含むバッファへのポインタ1使
\param nonceSz
\param authTag
\param authTagSz
\param authIn
_Example_
\code
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));
\endcode
\sa wc_AesCcmSetKey
\sa wc_AesCcmDecrypt
*/
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);
/*!
\ingroup AES
\brief CCMを使用してCCMCBC-MACのカウンタ使Authin InputからAuthatAgAuthatAgを計算しますAES_CCM_AUTH_Eを返します
\return 0
\return AES_CCM_AUTH_E authtag
\param aes 使AESオブジェクトへのポインタ
\param out
\param in
\param sz
\param nonce nonceを含むバッファへのポインタ1使
\param nonceSz
\param authTag
\param authTagSz
\param authIn
_Example_
\code
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
}
\endcode
\sa wc_AesCcmSetKey
\sa wc_AesCcmEncrypt
*/
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);
/*!
\ingroup AES
\brief AESキーでWC_AESXTSFREEを呼び出すことがユーザーになりました
\return 0
\param aes ENCRYPT /AESキー
\param key AESキーを保持しているバッファー| ..Tweak Key
\param len 216
\param dir AES_EncryptionまたはAES_Decryptionのいずれか
\param heap 使nullになることができます
_Example_
\code
XtsAes aes;
if(wc_AesXtsSetKey(&aes, key, sizeof(key), AES_ENCRYPTION, NULL, 0) != 0)
{
// Handle error
}
wc_AesXtsFree(&aes);
\endcode
\sa wc_AesXtsEncrypt
\sa wc_AesXtsDecrypt
\sa wc_AesXtsFree
*/
int wc_AesXtsSetKey(XtsAes* aes, const byte* key,
word32 len, int dir, void* heap, int devId);
/*!
\ingroup AES
\brief WC_AESXTSENCRYPTと同じプロセスですがTweak値としてWord64型を使用しますWord64をバイト配列に変換しWC_AESXTSENCRYPTを呼び出します
\return 0
\param aes /使AESキー
\param out
\param in
\param sz
_Example_
\code
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);
\endcode
\sa wc_AesXtsEncrypt
\sa wc_AesXtsDecrypt
\sa wc_AesXtsSetKey
\sa wc_AesXtsFree
*/
int wc_AesXtsEncryptSector(XtsAes* aes, byte* out,
const byte* in, word32 sz, word64 sector);
/*!
\ingroup AES
\brief WC_AESXTSDECRYPTと同じプロセスではなくBYTE配列の代わりにWord64タイプを使用しますWord64をバイト配列に変換するだけです
\return 0
\param aes /使AESキー
\param out
\param in
\param sz
_Example_
\code
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);
\endcode
\sa wc_AesXtsEncrypt
\sa wc_AesXtsDecrypt
\sa wc_AesXtsSetKey
\sa wc_AesXtsFree
*/
int wc_AesXtsDecryptSector(XtsAes* aes, byte* out,
const byte* in, word32 sz, word64 sector);
/*!
\ingroup AES
\brief XTSモードのあるAESXTSXEX暗号化と暗号テキストを盗んだ暗号化
\return 0
\param aes /使AESキー
\param out
\param in
\param sz
\param i Tweakに使用する値
_Example_
\code
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);
\endcode
\sa wc_AesXtsDecrypt
\sa wc_AesXtsSetKey
\sa wc_AesXtsFree
*/
int wc_AesXtsEncrypt(XtsAes* aes, byte* out,
const byte* in, word32 sz, const byte* i, word32 iSz);
/*!
\ingroup AES
\brief AESキーはAES_Decryptionタイプです
\return 0
\param aes /使AESキー
\param out
\param in
\param sz
\param i Tweakに使用する値
_Example_
\code
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);
\endcode
\sa wc_AesXtsEncrypt
\sa wc_AesXtsSetKey
\sa wc_AesXtsFree
*/
int wc_AesXtsDecrypt(XtsAes* aes, byte* out,
const byte* in, word32 sz, const byte* i, word32 iSz);
/*!
\ingroup AES
\brief XTSAES構造によって使用されるすべてのリソースを解放することです
\return 0
_Example_
\code
XtsAes aes;
if(wc_AesXtsSetKey(&aes, key, sizeof(key), AES_ENCRYPTION, NULL, 0) != 0)
{
// Handle error
}
wc_AesXtsFree(&aes);
\endcode
\sa wc_AesXtsEncrypt
\sa wc_AesXtsDecrypt
\sa wc_AesXtsSetKey
*/
int wc_AesXtsFree(XtsAes* aes);
/*!
\ingroup AES
\brief AES構造を初期化しますASYNCハードウェアで使用するためのヒープヒントとIDを設定する
\return 0
\param aes AES構造
\param heap malloc / freeに使用するヒントヒント
_Example_
\code
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(&aes, hint, devId);
\endcode
\sa wc_AesSetKey
\sa wc_AesSetIV
*/
int wc_AesInit(Aes* aes, void* heap, int devId);
/*!
\ingroup AES
\brief CFBモードを持つAES
\return 0
\param aes /使AESキー
\param out InpectBufferと同じくらい大きい必要があります
\param in
_Example_
\code
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
}
\endcode
\sa wc_AesCfbDecrypt
\sa wc_AesSetKey
*/
int wc_AesCfbEncrypt(Aes* aes, byte* out, const byte* in, word32 sz);
/*!
\ingroup AES
\brief CFBモードを持つAES
\return 0
\param aes /使AESキー
\param out inputBufferと同じ大きさでなければなりません
\param in
_Example_
\code
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
}
\endcode
\sa wc_AesCfbEncrypt
\sa wc_AesSetKey
*/
int wc_AesCfbDecrypt(Aes* aes, byte* out, const byte* in, word32 sz);
/*!
\ingroup AES
\brief RFC 5297SIV
\return 0
\return BAD_FUNC_ARG SIVNULLの場合32,4864
\return Other AESまたはCMAC操作が失敗した場合に返されるその他の負のエラー値
\param key 使
\param keySz
\param assoc AD
\param assocSz ADバッファのバイト数
\param nonce 使ADと同じ方法でアルゴリズムによって使用されます
\param nonceSz NOCEバッファの長さ
\param in
\param inSz
\param siv S2VによるSIV出力RFC 5297 2.4
_Example_
\code
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
}
\endcode
\sa wc_AesSivDecrypt
*/
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);
/*!
\ingroup AES
\brief RFC 5297SIV
\return 0
\return BAD_FUNC_ARG SIVNULLの場合32,4864
\return AES_SIV_AUTH_E S2Vによって派生したSIVが入力SIVと一致しない場合RFC 5297 2.7
\return Other AESまたはCMAC操作が失敗した場合に返されるその他の負のエラー値
\param key 使
\param keySz
\param assoc AD
\param assocSz ADバッファのバイト数
\param nonce 使ADと同じ方法で使
\param nonceSz NOCEバッファの長さ
\param in
\param inSz
\param siv SIVRFC 5297 2.4
_Example_
\code
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
}
\endcode
\sa wc_AesSivEncrypt
*/
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);