#include "Includes.h" /* --------------------------------------------------------------------------------------------------- - 函数名称: aes128_init - 函数功能: aes128运算初始化 - 输入参数: 16个字节的秘钥 - 创建日期: 2019-12-12 ----------------------------------------------------------------------------------------------------*/ void aes128_init(uint8_t *aes_key) { //__write_hw_reg32(AES_INTE,1); //使能aes中断 __write_hw_reg32(AES_CTL,2); //标准aes算法,AES 分组数据输入方式控制(CPU 方式) __write_hw_reg32(AES_KEY_LEN,0);//0:128bits秘钥 1:192bits秘钥 2:256bits秘钥 //写入aes秘钥 __write_hw_reg32(AES_KEY0,(aes_key[0] )|(aes_key[1] <<8)|(aes_key[2] <<16)|(aes_key[3] <<24)); __write_hw_reg32(AES_KEY1,(aes_key[4] )|(aes_key[5] <<8)|(aes_key[6] <<16)|(aes_key[7] <<24)); __write_hw_reg32(AES_KEY2,(aes_key[8] )|(aes_key[9] <<8)|(aes_key[10]<<16)|(aes_key[11]<<24)); __write_hw_reg32(AES_KEY3,(aes_key[12])|(aes_key[13]<<8)|(aes_key[14]<<16)|(aes_key[15]<<24)); __write_hw_reg32(AES_KEY_UPDATE,1); //AES 密钥更新 } /* --------------------------------------------------------------------------------------------------- - 函数名称: aes128_operation - 函数功能: aes128加密解密运算 - 输入参数: type:0代表解密 1代表加密 source_data:aes运算前的数据 aes_data:aes运算后的数据 - 创建日期: 2019-04-02 ----------------------------------------------------------------------------------------------------*/ void aes128_operation(uint8_t type,uint8_t *source_data,uint8_t *aes_data) { if(type==1)__write_hw_reg32(AES_CTL,6);//加密 else __write_hw_reg32(AES_CTL,2); //解密 //写入源数据 __write_hw_reg32(AES_IN0,(source_data[0] )|(source_data[1] <<8)|(source_data[2] <<16)|(source_data[3] <<24)); __write_hw_reg32(AES_IN1,(source_data[4] )|(source_data[5] <<8)|(source_data[6] <<16)|(source_data[7] <<24)); __write_hw_reg32(AES_IN2,(source_data[8] )|(source_data[9] <<8)|(source_data[10]<<16)|(source_data[11]<<24)); __write_hw_reg32(AES_IN3,(source_data[12])|(source_data[13]<<8)|(source_data[14]<<16)|(source_data[15]<<24)); __write_hw_reg32(AES_START,1);//开始aes运算 while((!(*AES_INTR))); //读中断原始状态寄存器,判读aes运算是否完成 __write_hw_reg32(AES_INTS,1); //清除中断状态寄存器和中断原始状态寄存器 //读出aes运算后的数据 uint32_t temp=*AES_OUT0; aes_data[0]=temp; aes_data[1]=temp>>8; aes_data[2]=temp>>16; aes_data[3]=temp>>24; temp=*AES_OUT1; aes_data[4]=temp; aes_data[5]=temp>>8; aes_data[6]=temp>>16; aes_data[7]=temp>>24; temp=*AES_OUT2; aes_data[8]=temp; aes_data[9]=temp>>8; aes_data[10]=temp>>16; aes_data[11]=temp>>24; temp=*AES_OUT3; aes_data[12]=temp; aes_data[13]=temp>>8; aes_data[14]=temp>>16; aes_data[15]=temp>>24; }