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
 |