168 lines
5.2 KiB
C
168 lines
5.2 KiB
C
/****************************************************************************
|
|
|
|
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_H
|
|
#define IOT_CRYPTO_H
|
|
|
|
#include "iot_crypto_aes_api.h"
|
|
#include "iot_crypto_hash_api.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef enum {
|
|
SM4_ECB,
|
|
SM4_CBC,
|
|
SM4_CFB,
|
|
SM4_OFB
|
|
}SEC_SYS_SM4_MODE;
|
|
|
|
typedef enum {
|
|
SM4_OPT_DEC,
|
|
SM4_OPT_ENC,
|
|
}SEC_SYS_SM4_OPT_MODE;
|
|
|
|
typedef enum {
|
|
AES_ECB,
|
|
AES_CBC,
|
|
AES_CFB,
|
|
AES_OFB
|
|
}SEC_SYS_AES_CALC_MODE;
|
|
|
|
typedef enum {
|
|
AES_OPT_DEC,
|
|
AES_OPT_ENC,
|
|
}SEC_SYS_AES_OPT_MODE;
|
|
|
|
typedef enum {
|
|
DES_ECB,
|
|
DES_CBC,
|
|
DES_CFB,
|
|
DES_OFB
|
|
}SEC_SYS_DES_MODE;
|
|
|
|
typedef enum {
|
|
DES_OPT_ENC,
|
|
DES_OPT_DEC,
|
|
}SEC_SYS_DES_OPT_MODE;
|
|
|
|
#define SM2_GEN_PUBKEY_LEN (64)
|
|
#define SM2_GEN_PRIKEY_LEN (32)
|
|
|
|
#define ECDSA_GEN_PUBKEY_LEN (64)
|
|
#define ECDSA_GEN_PRIKEY_LEN (32)
|
|
|
|
/**
|
|
* @brief iot_crypto_init() - Initialize crypto module
|
|
*
|
|
*/
|
|
void iot_crypto_init();
|
|
|
|
/**
|
|
* @brief uint32_t iot_crypto_sm4
|
|
*
|
|
* @param opt_mode: dec or enc
|
|
* @param mode: ecb or cbc
|
|
* @param indata: input data
|
|
* @param indata_len: indata len
|
|
* @param outdata: output data
|
|
* @param outdata_len: output len
|
|
* @param sm4_key: sm4 key
|
|
* @param iv: sm4 iv
|
|
* @param round: round count
|
|
*
|
|
* @retval: error code. see CRYPTO_RET_XXX
|
|
*/
|
|
uint32_t iot_crypto_sm4(SEC_SYS_SM4_OPT_MODE opt_mode, SEC_SYS_SM4_MODE mode,
|
|
uint8_t *indata, uint32_t indata_len, uint8_t *outdata,
|
|
uint32_t *outdata_len, uint8_t sm4_key[16], uint8_t iv[16], uint32_t round);
|
|
|
|
/**
|
|
* @brief uint32_t iot_crypto_sm4_ind
|
|
*
|
|
* @param opt_mode: dec or enc
|
|
* @param mode: ecb or cbc
|
|
* @param indata: input data
|
|
* @param indata_len: indata len
|
|
* @param outdata: output data
|
|
* @param outdata_len: output len
|
|
* @param sm4_key: sm4 key
|
|
* @param iv: sm4 iv
|
|
* @param round: round count
|
|
*
|
|
* @retval: error code. see CRYPTO_RET_XXX
|
|
*/
|
|
uint32_t iot_crypto_sm4_ind(SEC_SYS_SM4_OPT_MODE opt_mode, SEC_SYS_SM4_MODE mode,
|
|
uint8_t *indata, uint32_t indata_len, uint8_t *outdata, uint32_t *outdata_len,
|
|
uint8_t sm4_key[16], uint8_t iv[16], uint32_t round);
|
|
|
|
/**
|
|
* @brief uint32_t iot_crypto_des
|
|
*
|
|
* @param opt_mode: enc or dec
|
|
* @param mode: ecb or cbc
|
|
* @param tdes: 0: des 1:3des
|
|
* @param indata: input data
|
|
* @param indata_len: input data len
|
|
* @param outdata: output data
|
|
* @param outdata_len: outdata_len data len
|
|
* @param des_key: des key
|
|
* @param iv: des iv
|
|
*
|
|
* @retval: error code. see CRYPTO_RET_XXX
|
|
*/
|
|
uint32_t iot_crypto_des(SEC_SYS_DES_OPT_MODE opt_mode, SEC_SYS_DES_MODE mode,
|
|
uint8_t tdes, uint8_t *indata, uint32_t indata_len, uint8_t *outdata,
|
|
uint32_t *outdata_len, uint8_t des_key[24], uint8_t iv[8]);
|
|
|
|
/**
|
|
* @brief iot_crypto_rng_get_random() - generate random data from RNG
|
|
* @param buf: random data buffer
|
|
* @param len: random data len
|
|
*/
|
|
void iot_crypto_rng_get_random(uint8_t *buf, uint32_t len);
|
|
|
|
/**
|
|
* @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
|
|
* @param round run round loop count
|
|
*
|
|
* @retval: error code. see CRYPTO_RET_XXX
|
|
*/
|
|
uint32_t iot_crypto_aes_gcm_cert(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, uint32_t round);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif //IOT_CRYPTO_H
|