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

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