19#include "hitls_build.h"
20#ifdef HITLS_CRYPTO_AES
28#define CRYPT_AES_128 128
29#define CRYPT_AES_192 192
30#define CRYPT_AES_256 256
32#define CRYPT_AES_MAX_ROUNDS 14
33#define CRYPT_AES_MAX_KEYLEN (4 * (CRYPT_AES_MAX_ROUNDS + 1))
41 uint32_t key[CRYPT_AES_MAX_KEYLEN];
53int32_t CRYPT_AES_SetEncryptKey128(CRYPT_AES_Key *ctx,
const uint8_t *key, uint32_t len);
63int32_t CRYPT_AES_SetEncryptKey192(CRYPT_AES_Key *ctx,
const uint8_t *key, uint32_t len);
73int32_t CRYPT_AES_SetEncryptKey256(CRYPT_AES_Key *ctx,
const uint8_t *key, uint32_t len);
83int32_t CRYPT_AES_SetDecryptKey128(CRYPT_AES_Key *ctx,
const uint8_t *key, uint32_t len);
93int32_t CRYPT_AES_SetDecryptKey192(CRYPT_AES_Key *ctx,
const uint8_t *key, uint32_t len);
103int32_t CRYPT_AES_SetDecryptKey256(CRYPT_AES_Key *ctx,
const uint8_t *key, uint32_t len);
114int32_t CRYPT_AES_Encrypt(
const CRYPT_AES_Key *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
125int32_t CRYPT_AES_Decrypt(
const CRYPT_AES_Key *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
127#ifdef HITLS_CRYPTO_CBC
138int32_t CRYPT_AES_CBC_Encrypt(
const CRYPT_AES_Key *ctx,
const uint8_t *in, uint8_t *out, uint32_t len, uint8_t *iv);
150int32_t CRYPT_AES_CBC_Decrypt(
const CRYPT_AES_Key *ctx,
const uint8_t *in, uint8_t *out, uint32_t len, uint8_t *iv);
153#if defined(HITLS_CRYPTO_CTR) || defined(HITLS_CRYPTO_GCM)
164int32_t CRYPT_AES_CTR_Encrypt(
const CRYPT_AES_Key *ctx,
const uint8_t *in, uint8_t *out, uint32_t len, uint8_t *iv);
167#ifdef HITLS_CRYPTO_ECB
177int32_t CRYPT_AES_ECB_Encrypt(
const CRYPT_AES_Key *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
188int32_t CRYPT_AES_ECB_Decrypt(
const CRYPT_AES_Key *ctx,
const uint8_t *in, uint8_t *out, uint32_t len);
191#ifdef HITLS_CRYPTO_CFB
203int32_t CRYPT_AES_CFB_Decrypt(
const CRYPT_AES_Key *ctx,
const uint8_t *in, uint8_t *out, uint32_t len, uint8_t *iv);
206#ifdef HITLS_CRYPTO_XTS
217int32_t CRYPT_AES_XTS_Encrypt(
const CRYPT_AES_Key *ctx,
const uint8_t *in,
218 uint8_t *out, uint32_t len,
const uint8_t *tweak);
230int32_t CRYPT_AES_XTS_Decrypt(
const CRYPT_AES_Key *ctx,
const uint8_t *in,
231 uint8_t *out, uint32_t len,
const uint8_t *t);
241void CRYPT_AES_Clean(CRYPT_AES_Key *ctx);