187 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			187 lines
		
	
	
		
			6.1 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_ASYNC_H_
 | ||
|  | #define _IOT_CRYPTO_ASYNC_H_
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #include "iot_config.h"
 | ||
|  | #include "iot_crypto_dsa_async_api.h"
 | ||
|  | 
 | ||
|  | /* ecdsa */ | ||
|  | #define IOT_CRYPTO_ASYNC_ECDSA_PUB_LEN     64
 | ||
|  | #define IOT_CRYPTO_ASYNC_ECDSA_PRI_LEN     32
 | ||
|  | #define IOT_CRYPTO_ASYNC_ECDSA_R_S_LEN     32
 | ||
|  | 
 | ||
|  | /* sm2 */ | ||
|  | #define IOT_CRYPTO_ASYNC_SM2_PUB_LEN       64
 | ||
|  | #define IOT_CRYPTO_ASYNC_SM2_PRI_LEN       32
 | ||
|  | #define IOT_CRYPTO_ASYNC_R_S_LEN           32
 | ||
|  | #define IOT_CRYPTO_ASYNC_SM2_USER_ID_LEN   16
 | ||
|  | 
 | ||
|  | /* sg */ | ||
|  | #define IOT_CRYPTO_ASYNC_ECP_LEN           1
 | ||
|  | #define IOT_CRYPTO_ASYNC_CHIP_ID_LEN       24
 | ||
|  | 
 | ||
|  | /* save the pack status and set 1 byte align */ | ||
|  | #pragma pack(push)
 | ||
|  | #pragma pack(1)
 | ||
|  | 
 | ||
|  | typedef struct _iot_crypto_async_src_info { | ||
|  |     /* crypto done callback function */ | ||
|  |     iot_crypto_async_done_func_t cb; | ||
|  |     /* TODO: add others information */ | ||
|  | } iot_crypto_async_src_info_t; | ||
|  | 
 | ||
|  | typedef struct _iot_crypto_async_msg_info { | ||
|  |     /* buffer length */ | ||
|  |     uint32_t len; | ||
|  |     /* data buffer */ | ||
|  |     uint8_t data[0]; | ||
|  | } iot_crypto_async_msg_info_t; | ||
|  | 
 | ||
|  | typedef struct _iot_crypto_async_sm2_sign_info_t { | ||
|  |     /* crypto done callback function */ | ||
|  |     iot_crypto_async_done_func_t cb; | ||
|  |     iot_crypto_async_hdr_t hdr; | ||
|  |     uint8_t id[IOT_CRYPTO_ASYNC_SM2_USER_ID_LEN]; | ||
|  |     uint8_t pub_key[IOT_CRYPTO_ASYNC_SM2_PUB_LEN]; | ||
|  |     uint8_t pri_key[IOT_CRYPTO_ASYNC_SM2_PRI_LEN]; | ||
|  |     iot_crypto_async_msg_info_t msg; | ||
|  | } iot_crypto_async_sm2_sign_info_t; | ||
|  | 
 | ||
|  | typedef struct _iot_crypto_async_sm2_verify_info_t { | ||
|  |     /* crypto done callback function */ | ||
|  |     iot_crypto_async_done_func_t cb; | ||
|  |     iot_crypto_async_hdr_t hdr; | ||
|  |     uint8_t id[IOT_CRYPTO_ASYNC_SM2_USER_ID_LEN]; | ||
|  |     uint8_t pub_key[IOT_CRYPTO_ASYNC_SM2_PUB_LEN]; | ||
|  |     uint8_t r[IOT_CRYPTO_ASYNC_R_S_LEN]; | ||
|  |     uint8_t s[IOT_CRYPTO_ASYNC_R_S_LEN]; | ||
|  |     iot_crypto_async_msg_info_t msg; | ||
|  | } iot_crypto_async_sm2_verify_info_t; | ||
|  | 
 | ||
|  | typedef struct _iot_crypto_async_ecdsa_sign_info_t { | ||
|  |     /* crypto done callback function */ | ||
|  |     iot_crypto_async_done_func_t cb; | ||
|  |     iot_crypto_async_hdr_t hdr; | ||
|  |     uint32_t ecp; | ||
|  |     uint8_t pri_key[IOT_CRYPTO_ASYNC_ECDSA_PRI_LEN]; | ||
|  |     iot_crypto_async_msg_info_t msg; | ||
|  | } iot_crypto_async_ecdsa_sign_info_t; | ||
|  | 
 | ||
|  | typedef struct _iot_crypto_async_ecdsa_verify_info_t { | ||
|  |     /* crypto done callback function */ | ||
|  |     iot_crypto_async_done_func_t cb; | ||
|  |     iot_crypto_async_hdr_t hdr; | ||
|  |     uint32_t ecp; | ||
|  |     uint8_t pub_key[IOT_CRYPTO_ASYNC_SM2_PUB_LEN]; | ||
|  |     uint8_t r[IOT_CRYPTO_ASYNC_ECDSA_R_S_LEN]; | ||
|  |     uint8_t s[IOT_CRYPTO_ASYNC_ECDSA_R_S_LEN]; | ||
|  |     iot_crypto_async_msg_info_t msg; | ||
|  | } iot_crypto_async_ecdsa_verify_info_t; | ||
|  | 
 | ||
|  | typedef struct _iot_crypto_async_sm2_gen_key_info_t { | ||
|  |     /* crypto done callback function */ | ||
|  |     iot_crypto_async_done_func_t cb; | ||
|  |     iot_crypto_async_hdr_t hdr; | ||
|  |     uint8_t pub_key[IOT_CRYPTO_ASYNC_SM2_PUB_LEN]; | ||
|  |     uint8_t pri_key[IOT_CRYPTO_ASYNC_SM2_PRI_LEN]; | ||
|  |     iot_crypto_ret_sm2_kdf_gen_t gen_key; | ||
|  | } iot_crypto_async_sm2_gen_key_info_t; | ||
|  | 
 | ||
|  | typedef struct _iot_crypto_async_sm2_gen_keypair_info_t { | ||
|  |     /* crypto done callback function */ | ||
|  |     iot_crypto_async_done_func_t cb; | ||
|  |     iot_crypto_async_hdr_t hdr; | ||
|  |     iot_crypto_ret_sm2_gen_keypair_info_t ret_info; | ||
|  | } iot_crypto_async_sm2_gen_keypair_info_t; | ||
|  | 
 | ||
|  | typedef struct _iot_crypto_async_ecdsa_gen_keypair_info_t { | ||
|  |     /* crypto done callback function */ | ||
|  |     iot_crypto_async_done_func_t cb; | ||
|  |     iot_crypto_async_hdr_t hdr; | ||
|  |     iot_crypto_ret_ecdsa_gen_keypair_info_t ret_info; | ||
|  | } iot_crypto_async_ecdsa_gen_keypair_info_t; | ||
|  | 
 | ||
|  | typedef struct _iot_crypto_async_sg_auth_sign_info { | ||
|  |     /* crypto done callback function */ | ||
|  |     iot_crypto_async_done_func_t cb; | ||
|  |     iot_crypto_async_hdr_t hdr; | ||
|  |     uint32_t random_type; | ||
|  |     uint32_t random_len; | ||
|  |     uint32_t gen_key_len; | ||
|  |     uint32_t chip_id_len; | ||
|  |     uint8_t root_pub[IOT_CRYPTO_ASYNC_SM2_PUB_LEN]; | ||
|  |     uint8_t local_pub[IOT_CRYPTO_ASYNC_SM2_PUB_LEN]; | ||
|  |     uint8_t local_pri[IOT_CRYPTO_ASYNC_SM2_PRI_LEN]; | ||
|  |     uint8_t sign_r[IOT_CRYPTO_ASYNC_R_S_LEN]; | ||
|  |     uint8_t sign_s[IOT_CRYPTO_ASYNC_R_S_LEN]; | ||
|  |     uint8_t user_id[IOT_CRYPTO_ASYNC_SM2_USER_ID_LEN]; | ||
|  |     uint8_t chip_id[IOT_CRYPTO_ASYNC_CHIP_ID_LEN]; | ||
|  |     uint8_t auth_ecp; | ||
|  |     uint8_t auth_pub[IOT_CRYPTO_ASYNC_SM2_PUB_LEN]; | ||
|  |     uint8_t random[0]; | ||
|  | } iot_crypto_async_sg_auth_sign_info_t; | ||
|  | 
 | ||
|  | typedef struct _iot_crypto_async_sg_auth_verify_info { | ||
|  |     /* crypto done callback function */ | ||
|  |     iot_crypto_async_done_func_t cb; | ||
|  |     iot_crypto_async_hdr_t hdr; | ||
|  |     uint32_t random_type; | ||
|  |     uint32_t random_len; | ||
|  |     uint32_t gen_key_len; | ||
|  |     uint32_t local_ecp; | ||
|  |     uint32_t chip_id_len; | ||
|  |     uint8_t root_pub[IOT_CRYPTO_ASYNC_SM2_PUB_LEN]; | ||
|  |     uint8_t local_pri[IOT_CRYPTO_ASYNC_SM2_PRI_LEN]; | ||
|  |     uint8_t sign_r[IOT_CRYPTO_ASYNC_R_S_LEN]; | ||
|  |     uint8_t sign_s[IOT_CRYPTO_ASYNC_R_S_LEN]; | ||
|  |     uint8_t random_r[IOT_CRYPTO_ASYNC_R_S_LEN]; | ||
|  |     uint8_t random_s[IOT_CRYPTO_ASYNC_R_S_LEN]; | ||
|  |     uint8_t user_id[IOT_CRYPTO_ASYNC_SM2_USER_ID_LEN]; | ||
|  |     uint8_t chip_id[IOT_CRYPTO_ASYNC_CHIP_ID_LEN]; | ||
|  |     uint8_t auth_ecp; | ||
|  |     uint8_t auth_pub[IOT_CRYPTO_ASYNC_SM2_PUB_LEN]; | ||
|  |     uint8_t random[0]; | ||
|  | } iot_crypto_async_sg_auth_verify_info_t; | ||
|  | 
 | ||
|  | /* restore the pack status */ | ||
|  | #pragma pack(pop)
 | ||
|  | 
 | ||
|  | #if IOT_CRYPTO_ASYNC_SUPPORT
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief iot_crypto_async_init         crypto async context init | ||
|  |  * | ||
|  |  * @retval: none | ||
|  |  */ | ||
|  | void iot_crypto_async_init(void); | ||
|  | 
 | ||
|  | #else /* IOT_CRYPTO_ASYNC_SUPPORT */
 | ||
|  | 
 | ||
|  | #define iot_crypto_async_init()
 | ||
|  | 
 | ||
|  | #endif /* IOT_CRYPTO_ASYNC_SUPPORT */
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #endif /* _IOT_CRYPTO_ASYNC_H_ */
 |