#ifndef __lk_sm4_h__ #define __lk_sm4_h__ #ifdef __cpluscplus extern "C" { #endif #include "stm32f10x.h" //#include #include #ifdef __cpluscplus } #endif #define u8 unsigned char #define u32 unsigned long void four_uCh2uLong(u8 *in, u32 *out); //四字节转换成u32 void uLong2four_uCh(u32 in, u8 *out); //u32转换成四字节 unsigned long move(u32 data, int length); //左移,保留丢弃位放置尾部 unsigned long func_key(u32 input); //先使用Sbox进行非线性变化,再将线性变换L置换为L' unsigned long func_data(u32 input); //先使用Sbox进行非线性变化,再进行线性变换L void print_hex(u8 *data, int len); //无符号字符数组转16进制打印 extern u16 encode_fun(u8 len,u8 *key, u8 *input, u8 *output); //加密函数 extern void decode_fun(u8 len,u8 *key, u8 *input, u8 *output); //解密函数 typedef struct _sm4_data_{ u32 mkey[4]; //存储密钥的u32数据 u32 key[36]; //用于密钥扩展算法与系统参数FK运算后的结果存储 u32 rkey[36]; //用于存放加密数据 }sm4daInfo; #ifdef __cpluscplus extern "C" { #endif #ifdef __cpluscplus } #endif #endif