Skip to content

Commit

Permalink
Squashed 'security' changes from cf8aead..47283e6 (#400)
Browse files Browse the repository at this point in the history
47283e6 add description in description.json (#103)
4b98198 add crc32c (#88)
f89c4fd change doc format, and include guard name (#102)
a7a98cc optimize adler32's timing (#90)

Co-authored-by: sdausr <sdausr@xilinx.com>
  • Loading branch information
2 people authored and GitHub Enterprise committed Sep 24, 2021
1 parent 895cc9b commit 270c4fb
Show file tree
Hide file tree
Showing 32 changed files with 4,771 additions and 308 deletions.
2 changes: 1 addition & 1 deletion security/L1/benchmarks/adler32/description.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"gui": false,
"name": "Xilinx Adler32 Benchmark",
"description": "",
"description": "Adler32 checksum algorithm benchmark",
"flow": "vitis",
"platform_whitelist": [
"u50",
Expand Down
2 changes: 1 addition & 1 deletion security/L1/benchmarks/aes256CbcDecrypt/description.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"gui": false,
"name": "Xilinx AES256CBC Decryption Benchmark",
"description": "",
"description": "AES256 in CBC Mode Decryption Benchmark",
"flow": "vitis",
"platform_type": "",
"platform_whitelist": [
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"gui": false,
"name": "Xilinx AES256CBC Decryption SC Benchmark",
"description": "",
"description": "AES256 CBC Mode Decryption Benchmark with System Compiler",
"flow": "vitis",
"platform_type": "",
"platform_whitelist": [
Expand Down
2 changes: 1 addition & 1 deletion security/L1/benchmarks/aes256CbcEncrypt/description.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"gui": true,
"name": "Xilinx AES256CBC Encryption Benchmark",
"description": "",
"description": "AES256 CBC Mode Encryption Benchmark",
"flow": "vitis",
"platform_type": "",
"platform_whitelist": [
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"gui": false,
"name": "Xilinx AES256CBC Encryption SC Benchmark",
"description": "",
"description": "AES256 CBC Mode Encryption Benchmark with System Compiler",
"flow": "vitis",
"platform_type": "",
"platform_whitelist": [
Expand Down
2 changes: 1 addition & 1 deletion security/L1/benchmarks/crc32/description.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"gui": false,
"name": "Xilinx CRC32 Benchmark",
"description": "",
"description": "CRC32 Checksum Algorithm Benchmarking",
"flow": "vitis",
"platform_whitelist": [
"u50",
Expand Down
2 changes: 1 addition & 1 deletion security/L1/benchmarks/hmac_sha1/description.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"gui": true,
"name": "Xilinx HMAC-SHA1 Benchmark",
"description": "",
"description": "HMAC-SHA1 Algorithm Benchmarking",
"flow": "vitis",
"platform_type": "",
"platform_whitelist": [
Expand Down
2 changes: 1 addition & 1 deletion security/L1/benchmarks/rc4Encrypt/description.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"gui": true,
"name": "Xilinx RC4 Encryption Benchmark",
"description": "",
"description": "RC4 Encryption Algorithm Benchmarking",
"flow": "vitis",
"platform_type": "",
"platform_whitelist": [
Expand Down
136 changes: 58 additions & 78 deletions security/L1/include/xf_security/adler32.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -93,39 +93,32 @@ void adler32(hls::stream<ap_uint<32> >& adlerStrm,
#pragma HLS PIPELINE II = 1
#pragma HLS loop_tripcount max = 100 min = 100
inData = inStrm.read();
ap_uint<12> sTmp[W];
#pragma HLS array_partition variable = sTmp dim = 1
for (int i = 0; i < W; i++) {
#pragma HLS unroll
sTmp[i] = 0;
for (int j = 0; j <= i; j++) {
sTmp[i] += inData(j * 8 + 7, j * 8);
}
}

s2 += s1 * W;

if (W == 16) {
s2 += internal::treeAdd<12, 4>::f(sTmp);
} else if (W == 8) {
s2 += internal::treeAdd<12, 3>::f(sTmp);
} else if (W == 4) {
s2 += internal::treeAdd<12, 2>::f(sTmp);
} else if (W == 2) {
s2 += internal::treeAdd<12, 1>::f(sTmp);
} else if (W == 1) {
s2 += internal::treeAdd<12, 0>::f(sTmp);
ap_uint<12> sTmp0 = inData.range(7, 0);
ap_uint<16> sTmp1 = inData.range(7, 0);
for (int i = 1; i < W; i++) {
sTmp0 += inData.range(i * 8 + 7, i * 8);
sTmp1 += sTmp0;
}

ap_uint<32> sTmp2 = s1 * W + sTmp1;
for (int j = 0; j <= W; j++) {
if (s2 >= internal::BASE[W - j]) {
s2 -= internal::BASE[W - j];
if (sTmp2 >= internal::BASE[W - j]) {
sTmp2 -= internal::BASE[W - j];
break;
}
}

s1 += sTmp[W - 1];
if (s1 >= internal::BASE[0]) s1 -= internal::BASE[0];
if ((s2 + sTmp2) >= internal::BASE[0]) {
s2 -= (internal::BASE[0] - sTmp2);
} else {
s2 += sTmp2;
}

if ((s1 + sTmp0) >= internal::BASE[0]) {
s1 -= (internal::BASE[0] - sTmp0);
} else {
s1 += sTmp0;
}
}

for (int j = 0; j < len % W; j++) {
Expand Down Expand Up @@ -174,39 +167,33 @@ void adler32(hls::stream<ap_uint<32> >& adlerStrm,
#pragma HLS PIPELINE II = 1
#pragma HLS loop_tripcount max = 100 min = 100
inData = inStrm.read();
ap_uint<12> sTmp[W];
#pragma HLS array_partition variable = sTmp dim = 1
for (int i = 0; i < W; i++) {
#pragma HLS unroll
sTmp[i] = 0;
for (int j = 0; j <= i; j++) {
sTmp[i] += inData(j * 8 + 7, j * 8);
}
}

s2 += s1 * W;

if (W == 16) {
s2 += internal::treeAdd<12, 4>::f(sTmp);
} else if (W == 8) {
s2 += internal::treeAdd<12, 3>::f(sTmp);
} else if (W == 4) {
s2 += internal::treeAdd<12, 2>::f(sTmp);
} else if (W == 2) {
s2 += internal::treeAdd<12, 1>::f(sTmp);
} else if (W == 1) {
s2 += internal::treeAdd<12, 0>::f(sTmp);
ap_uint<12> sTmp0 = inData.range(7, 0);
ap_uint<16> sTmp1 = inData.range(7, 0);
for (int i = 1; i < W; i++) {
sTmp0 += inData.range(i * 8 + 7, i * 8);
sTmp1 += sTmp0;
}

ap_uint<32> sTmp2 = s1 * W + sTmp1;
for (int j = 0; j <= W; j++) {
if (s2 >= internal::BASE[W - j]) {
s2 -= internal::BASE[W - j];
if (sTmp2 >= internal::BASE[W - j]) {
sTmp2 -= internal::BASE[W - j];
break;
}
}

s1 += sTmp[W - 1];
if (s1 >= internal::BASE[0]) s1 -= internal::BASE[0];
if ((s2 + sTmp2) >= internal::BASE[0]) {
s2 -= (internal::BASE[0] - sTmp2);
} else {
s2 += sTmp2;
}

if ((s1 + sTmp0) >= internal::BASE[0]) {
s1 -= (internal::BASE[0] - sTmp0);
} else {
s1 += sTmp0;
}

inPackLen = inPackLenStrm.read();
}

Expand Down Expand Up @@ -259,39 +246,32 @@ void adler32(hls::stream<ap_uint<32> >& adlerStrm,
#pragma HLS loop_tripcount max = 100 min = 100
inPackLen = inPackLenStrm.read();
inData = inStrm.read();
ap_uint<12> sTmp[W];
#pragma HLS array_partition variable = sTmp dim = 1
for (int i = 0; i < W; i++) {
#pragma HLS unroll
sTmp[i] = 0;
for (int j = 0; j <= i; j++) {
sTmp[i] += inData(j * 8 + 7, j * 8);
}
}

s2 += s1 * W;

if (W == 16) {
s2 += internal::treeAdd<12, 4>::f(sTmp);
} else if (W == 8) {
s2 += internal::treeAdd<12, 3>::f(sTmp);
} else if (W == 4) {
s2 += internal::treeAdd<12, 2>::f(sTmp);
} else if (W == 2) {
s2 += internal::treeAdd<12, 1>::f(sTmp);
} else if (W == 1) {
s2 += internal::treeAdd<12, 0>::f(sTmp);
ap_uint<12> sTmp0 = inData.range(7, 0);
ap_uint<16> sTmp1 = inData.range(7, 0);
for (int i = 1; i < W; i++) {
sTmp0 += inData.range(i * 8 + 7, i * 8);
sTmp1 += sTmp0;
}

ap_uint<32> sTmp2 = s1 * W + sTmp1;
for (int j = 0; j <= W; j++) {
if (s2 >= internal::BASE[W - j]) {
s2 -= internal::BASE[W - j];
if (sTmp2 >= internal::BASE[W - j]) {
sTmp2 -= internal::BASE[W - j];
break;
}
}

s1 += sTmp[W - 1];
if (s1 >= internal::BASE[0]) s1 -= internal::BASE[0];
if ((s2 + sTmp2) >= internal::BASE[0]) {
s2 -= (internal::BASE[0] - sTmp2);
} else {
s2 += sTmp2;
}

if ((s1 + sTmp0) >= internal::BASE[0]) {
s1 -= (internal::BASE[0] - sTmp0);
} else {
s1 += sTmp0;
}
}

if (inPackLen != 0) {
Expand Down
Loading

0 comments on commit 270c4fb

Please sign in to comment.