• 大小: 11.97MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-07-12
  • 语言: C/C++
  • 标签: AES加密  HLS  RTL  

资源简介

使用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\link-cvtres.read.1.tlog
     文件           2  2017-01-20 18:29  AES_VLSI\C++\C++\Debug\link-cvtres.write.1.tlog
     文件           2  2017-01-20 18:29  AES_VLSI\C++\C++\Debug\link-rc.read.1.tlog
     文件           2  2017-01-20 18:29  AES_VLSI\C++\C++\Debug\link-rc.write.1.tlog
     文件           2  2017-01-20 18:29  AES_VLSI\C++\C++\Debug\link.2896-cvtres.read.1.tlog
     文件           2  2017-01-20 18:29  AES_VLSI\C++\C++\Debug\link.2896-cvtres.write.1.tlog
     文件           2  2017-01-20 18:29  AES_VLSI\C++\C++\Debug\link.2896-rc.read.1.tlog
     文件           2  2017-01-20 18:29  AES_VLSI\C++\C++\Debug\link.2896-rc.write.1.tlog
     文件           2  2017-01-20 18:29  AES_VLSI\C++\C++\Debug\link.2896.read.1.tlog
     文件           2  2017-01-20 18:29  AES_VLSI\C++\C++\Debug\link.2896.write.1.tlog
     文件           2  2017-01-20 18:29  AES_VLSI\C++\C++\Debug\link.5408-cvtres.read.1.tlog
     文件           2  2017-01-20 18:29  AES_VLSI\C++\C++\Debug\link.5408-cvtres.write.1.tlog
     文件           2  2017-01-20 18:29  AES_VLSI\C++\C++\Debug\link.5408-rc.read.1.tlog
     文件           2  2017-01-20 18:29  AES_VLSI\C++\C++\Debug\link.5408-rc.write.1.tlog
     文件           2  2017-01-20 18:29  AES_VLSI\C++\C++\Debug\link.5408.read.1.tlog
     文件           2  2017-01-20 18:29  AES_VLSI\C++\C++\Debug\link.5408.write.1.tlog
     文件           2  2017-01-20 18:29  AES_VLSI\C++\C++\Debug\link.6200-cvtres.read.1.tlog
     文件           2  2017-01-20 18:29  AES_VLSI\C++\C++\Debug\link.6200-cvtres.write.1.tlog
     文件           2  2017-01-20 18:29  AES_VLSI\C++\C++\Debug\link.6200-rc.read.1.tlog
     文件           2  2017-01-20 18:29  AES_VLSI\C++\C++\Debug\link.6200-rc.write.1.tlog
............此处省略810个文件信息

评论

共有 条评论