资源简介
使用HLS完成AES-128部分运算通路的设计,21个周期可以完成128个bit的加密。
附上可综合的纯RTL Code以及C++代码。
可通过我的优化选项来学习如何优化HLS工具生产的代码。
代码片段和文件信息
#include
#include
#define AES_128
#ifdef AES_128
#define Nk 4
#define Nb 4
#define Nr 10
#endif
#ifdef AES_192
#define Nk 6
#define Nb 4
#define Nr 12
#endif
#ifdef AES_256
#define Nk 8
#define Nb 4
#define Nr 14
#endif
#define BYTE unsigned char
#define WORD unsigned int
BYTE xtime(BYTE A);
BYTE Multiplication(BYTE ABYTE B);
BYTE* Four_Term_Multiplication(BYTE A[4]BYTE B[4]);
BYTE SubBytes(BYTE IN);
BYTE InvSubBytes(BYTE IN);
WORD SubWord(WORD IN);
WORD RotWord(WORD IN);
WORD Rcon(WORD I);
WORD* KeyExpansion(BYTE key[4*Nk]);
WORD* ModifiedKeyExpansion(BYTE key[4*Nk]);
void ShiftRows(BYTE S[4][Nb]);
void InvShiftRows(BYTE S[4][Nb]);
void MixColumns(BYTE S[4][Nb]);
void InvMixColumns(BYTE S[4][Nb]);
void AddRoundKey(BYTE S[4][Nb]WORD w_bias[Nb]);
void Cipher(BYTE in[4*Nb]BYTE out[4*Nb]WORD w[Nb*(Nr+1)]);
void InvCipher(BYTE in[4*Nb]BYTE out[4*Nb]WORD w[Nb*(Nr+1)]);
void EqInvCipher(BYTE in[4*Nb]BYTE out[4*Nb]WORD dw[Nb*(Nr+1)]);
void DispArray(char *ArraynameBYTE *arrayint heightint width);
void main(int argc char*argv[])
{
BYTE Input[4*Nb]={0x000x110x220x330x440x550x660x770x880x990xaa0xbb0xcc0xdd0xee0xff};
BYTE key[4*Nk]={0x000x010x020x030x040x050x060x070x080x090x0a0x0b0x0c0x0d0x0e0x0f};
BYTE CipherOut[4*Nb]InvCipherOut[4*Nb]EqInvCipherOut[4*Nb];
WORD* w=KeyExpansion(key);
WORD* dw=ModifiedKeyExpansion(key);
Cipher(InputCipherOutw);
InvCipher(CipherOutInvCipherOutw);
EqInvCipher(CipherOutEqInvCipherOutdw);
DispArray(“CipherIn“(BYTE *)Input14*Nb);
DispArray(“CipherOut“(BYTE *)CipherOut14*Nb);
DispArray(“InvCipherOut“(BYTE *)InvCipherOut14*Nb);
DispArray(“EqInvCipherOut“(BYTE *)EqInvCipherOut14*Nb);
}
BYTE xtime(BYTE A)
{
BYTE result=(A<<1);
if(A&0x80)
result=result^0x1b;
return result;
}
BYTE Multiplication(BYTE ABYTE B)
{
BYTE temp=B;
BYTE sum=0;
char i;
for(i=0;i<8;i++)
{
if(A&(0x01< sum=sum^temp;
temp=xtime(temp);
}
return sum;
}
BYTE* Four_Term_Multiplication(BYTE A[4]BYTE B[4])
{
BYTE* result=(BYTE*)malloc(4*sizeof(BYTE));
result[0]=Multiplication(A[0]B[0])^Multiplication(A[3]B[1])^Multiplication(A[2]B[2])^Multiplication(A[1]B[3]);
result[1]=Multiplication(A[1]B[0])^Multiplication(A[0]B[1])^Multiplication(A[3]B[2])^Multiplication(A[2]B[3]);
result[2]=Multiplication(A[2]B[0])^Multiplication(A[1]B[1])^Multiplication(A[0]B[2])^Multiplication(A[3]B[3]);
result[3]=Multiplication(A[3]B[0])^Multiplication(A[2]B[1])^Multiplication(A[1]B[2])^Multiplication(A[0]B[3]);
return result;
}
BYTE SubBytes(BYTE IN)
{
const static BYTE S_Box[16][16]={
{0x630x7c0x770x7b0xf20x6b0x6f0xc50x300x010x670x2b0xfe0xd70xab0x76}
{0xca0x820xc90x7d0xfa0x590x470xf00xad0xd40xa20xaf0x9c0xa40x720xc0}
{0xb70xfd0x930x260x360x3f0xf70xcc0x340xa50xe50xf10x710xd80x310x15}
{0
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-06-19 12:33 AES_VLSI\
目录 0 2017-01-20 19:39 AES_VLSI\C++\
目录 0 2017-01-20 17:34 AES_VLSI\C++\C++\
文件 4001 2017-01-17 13:14 AES_VLSI\C++\C++\C++.vcxproj
文件 942 2017-01-17 13:14 AES_VLSI\C++\C++\C++.vcxproj.filters
目录 0 2017-01-20 19:39 AES_VLSI\C++\C++\Debug\
文件 72 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\C++.lastbuildstate
文件 2041 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\C++.log
文件 1762 2017-01-20 19:39 AES_VLSI\C++\C++\Debug\CL.read.1.tlog
文件 348 2017-01-20 19:39 AES_VLSI\C++\C++\Debug\CL.write.1.tlog
文件 1222 2017-01-20 18:28 AES_VLSI\C++\C++\Debug\cl.command.1.tlog
文件 2 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\li
文件 2 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\li
文件 2 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\li
文件 2 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\li
文件 2 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\li
文件 2 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\li
文件 2 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\li
文件 2 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\li
文件 2 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\li
文件 2 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\li
文件 2 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\li
文件 2 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\li
文件 2 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\li
文件 2 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\li
文件 2 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\li
文件 2 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\li
文件 2 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\li
文件 2 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\li
文件 2 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\li
文件 2 2017-01-20 18:29 AES_VLSI\C++\C++\Debug\li
............此处省略810个文件信息
相关资源
- 51单片机控制RTL8019AS实现以太网通讯
- 混合加密程序 VC++包括DES加密和AES加密
- AES加密算法C++语言实现
- AES加密可加密文件
- 快速Hartley变换C++实现
- AES加密算法(C++实现)
- AES加密算法c语言实现代码
- AES128/192/256 C语言实现AES加密/解密实测
- AES加密算法C语言实现,有测试代码,
- C语言环境下的AES加密算法,支持128位
- C语言实现的AES加密解密
- AES加密解密系统 VC++6.0 实现
- C语言 stm32 AES加密解密
- aes加密算法matlab
- aes加密算法的verilog和c++代码
- AES加密源码使用C++实现
- zw_AES加密算法c语言实现代码.zip
- xilinx Vivado HLS技术性能优化指南
- Vivado HLS 视频课程总结
- AES加密MFC程序源码
- C语言实现AES加密、解密算法
- CPU自制入门代码AZPR_RTL.zip
- AES加密MFC实现
- vcl60.bpl adortl60.bpl dbrtl60.bpl rtl60.bpl t
- AES加密解密 c++ 实现全代码
- aes加密算法 c语言源码 连续加解密
评论
共有 条评论