本文档适用于已下载相关算法的 N32G032 芯片,主要说明该类芯片中算法接口和使用方法。
对于 U32 数据类型参数,若采用 U8 强制转换 U32 形式,则需要确保 U8 地址按字对齐。
1.1. 支持的算法 N32G032 芯片提供的算法如下:
-AES: 加密/解密(AES-128/192/256)
-SM4: 加密/解密
-RNG: 随机数生成
1.2. 基本数据类型
typedef unsigned char bool; typedef unsigned char u8; typedef signed char s8; typedef unsigned short u16; typedef signed short s16; typedef unsigned int u32; typedef signed int s32; typedef unsigned long long u64; typedef signed long long s64;
2. AES算法API说明
2.1. 算法库使用方法
算法库使用方法如下:
1. 将 n32g032_aes.h 、 n32g032_algo_common.h 中 ; 将 n32g032_algo_common.lib 、n32g032_aes.lib 程中;
2. 按 2.3 节函数说明调用函数,例程见附录一提供的 demo
2.2. 数据类型定义 #define AES_ECB (0x11111111)
#define AES_CBC (0x22222222) #define AES_CTR (0x33333333) #define AES_ENC (0x44444444) #define AES_DEC (0x55555555) enum { AES_Crypto_OK = 0x0, //AES opreation success AES_Init_OK = 0x0, //AES Init opreation success AES_Crypto_ModeError = 0x5a5a5a5a, //Working mode error(Neither ECB nor CBC nor CTR) AES_Crypto_EnOrDeError, //En&De error(Neither encryption nor decryption) AES_Crypto_ParaNull, // the part of input(output/iv) Null AES_Crypto_LengthError, // if Working mode is ECB or CBC,the length of input message must be 4 times and cannot be zero; //if Working mode is CTR,the length of input message cannot be zero; othets: return AES_Crypto_LengthError ......
2.3. 函数接口说明
AES 算法库包含的函数:
uint32_t AES_Init(AES_PARM *parm) AES:初始化 uint32_t AES_Crypto(AES_PARM *parm) AES:加解密函数 void AES_Close(void) AES:关闭函数 void AES_Version(uint8_t *type, uint8_t *customer, uint8_t date[3], uint8_t *version):AES 版本获取函数
2.3.1.AES算法初始化
AES_Init AES 算法初始化
函数原型:uint32_t AES_Init(AES_PARM *parm)
参数说明:parm 输入,指向 AES _PARM 结构体的指针
返回值:AES_Init_OK:运算正确 其他:运算错误
注意事项:1.调用方式请参考附录一。
AES_Crypto AES 算法加解密
函数原型:uint32_t AES_Crypto(AES_PARM *parm)
参数说明:parm 输入,指向 AES _PARM 结构体的指针
返回值:AES_Crypto_OK:运算正确 其他:运算错误
注意事项:在调用本函数前,若还未初始化或已切换到其他算法,先调用 AES_Init 函数