57 lines
2.9 KiB
C
57 lines
2.9 KiB
C
|
|
#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;
|
|
}
|
|
|