Files
kunlun/export/inc/crypto/iot_crypto_aes_api.h
2024-09-28 14:24:04 +08:00

173 lines
5.9 KiB
C
Executable File

/****************************************************************************
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
be copied by any method or incorporated into another program without
the express written consent of Aerospace C.Power. This Information or any portion
thereof remains the property of Aerospace C.Power. The Information contained herein
is believed to be accurate and Aerospace C.Power assumes no responsibility or
liability for its use in any way and conveys no license or title under
any patent or copyright and makes no representation or warranty that this
Information is free from patent or copyright infringement.
****************************************************************************/
#ifndef IOT_CRYPTO_AES_API_H
#define IOT_CRYPTO_AES_API_H
#ifdef __cplusplus
extern "C" {
#endif
#include "iot_crypto_error_api.h"
/** \defgroup CRYPTO_APIs CRYPTO APIs
*/
#define IOT_AES_ENCRYPT 1
#define IOT_AES_DECRYPT 0
/** @addtogroup CRYPTO_APIs
* @{
*/
/**
* @brief iot_crypto_aes_setkey_enc() - set AES enc key
* @param tm: time zone param
*
* @retval: error code. see CRYPTO_RET_XXX
*/
uint32_t iot_crypto_aes_setkey_enc(const uint8_t *key, uint32_t keybits);
/**
* @brief iot_crypto_aes_setkey_dec() - set AES dec key
* @param key: key buffer
* @param keybits: key length
*
* @retval: error code. see CRYPTO_RET_XXX
*/
uint32_t iot_crypto_aes_setkey_dec(const uint8_t *key, uint32_t keybits);
/**
* @brief iot_crypto_aes_ecb() - AES ECB
* @param mode: 1->enc mode, 0->dec mode
* @param len: buffer len
* @param input: input buffer
* @param output: output buffer
*
* @retval: error code. see CRYPTO_RET_XXX
*/
uint32_t iot_crypto_aes_ecb(uint8_t mode, uint32_t len,
const uint8_t *input, uint8_t *output);
/**
* @brief iot_crypto_aes_cbc() - AES CBC
* @param mode: 1->enc mode, 0->dec mode
* @param len: buffer len
* @param len: iv buffer
* @param input: input buffer
* @param output: output buffer
*
* @retval: error code. see CRYPTO_RET_XXX
*/
uint32_t iot_crypto_aes_cbc(uint8_t mode, uint32_t len, uint8_t *iv,
const uint8_t *input, uint8_t *output);
/**
* @brief iot_crypto_aes_ctr() - AES CTR
* @param len: buffer len
* @param nc_off offset in the current stream_block
* @param nonce_counter 128-bit nonce and counter.
* @param stream_block saved stream-block for resuming.
* @param input: input buffer
* @param output: output buffer
*
* @retval: error code. see CRYPTO_RET_XXX
*/
uint32_t iot_crypto_aes_ctr( int len, size_t *nc_off, uint8_t *nonce_counter,
uint8_t *stream_block, const uint8_t *input, uint8_t *output);
/**
* @brief iot_crypto_aes_ecb_with_key() - set aes key and AES ECB calculation
* @param key: key buffer
* @param keybits: key length
* @param mode: 1->enc mode, 0->dec mode
* @param len: buffer len
* @param input: input buffer
* @param output: output buffer
*
* @retval: error code. see CRYPTO_RET_XXX
*/
uint32_t iot_crypto_aes_ecb_with_key(const uint8_t *key, uint32_t keybits,
uint8_t mode, uint32_t len, const uint8_t *input, uint8_t *output);
/**
* @brief iot_crypto_aes_cbc_with_key() - set aes key and AES CBC calculation
* @param key: key buffer
* @param keybits: key bit length
* @param mode: 1->enc mode, 0->dec mode
* @param len: buffer len
* @param in_iv: input iv buffer
* @param input: input buffer
* @param output: output buffer
* @param out_iv: output iv buffer
* @param round: round count
*
* @retval: error code. see CRYPTO_RET_XXX
*/
uint32_t iot_crypto_aes_cbc_with_key(const uint8_t *key, uint32_t keybits,
uint8_t mode, uint32_t len, uint8_t *in_iv, const uint8_t *input,
uint8_t *output, uint8_t *out_iv, uint32_t round);
/**
* @brief iot_crypto_aes_ctr_with_key() - set aes key and AES CTR calculation
* @param key: key buffer
* @param keybits: key length
* @param len: buffer len
* @param nc_off offset in the current stream_block
* @param nonce_counter 128-bit nonce and counter.
* @param stream_block saved stream-block for resuming.
* @param input: input buffer
* @param output: output buffer
*
* @retval: error code. see CRYPTO_RET_XXX
*/
uint32_t iot_crypto_aes_ctr_with_key(const uint8_t *key, uint32_t keybits,
int len, size_t *nc_off, uint8_t *nonce_counter, uint8_t *stream_block,
const uint8_t *input, uint8_t *output);
/**
* @brief iot_crypto_aes_gcm
*
* @param is_enc: 1 - encrypt, 0 - decrypt
* @param key: key buffer
* @param keybits: key bit number
* @param input: for encrypt, this is plaintext
* for decrypt, this is chipertext
* @param input_len: input text byte length
* @param iv: input iv buffer
* @param iv_len: iv byte length
* @param add: add buffer
* @param add_len: add byte length
* @param output: for encrypt, this is chipertext
* for decrypt, this is plaintext
* @param tag: output tag buffer
*
* @retval: error code. see CRYPTO_RET_XXX
*/
uint32_t iot_crypto_aes_gcm(uint8_t is_enc, uint8_t *key,
uint32_t keybits, uint8_t *input, uint32_t input_len, uint8_t *iv,
uint32_t iv_len, uint8_t *add, uint32_t add_len, uint8_t *output,
uint8_t *tag);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif //IOT_CRYPTO_AES_API_H