//gcc pixmap_io.c -c
//g++ -O3 one_round_test.cpp pixmap_io.o -o one_round_test -std=c++11
+//
+
+
#include <iostream>
#include <list>
#include<math.h>
}
}
+inline uchar circ(uchar x,int n) {return (x << n) | (x >> (8 - n));}
void diff(uchar *Y, uchar *X, int h) {
Y[3] = X[0]^X[1]^X[2];
}
else if(h==8) {
- Y[0] = X[0]^X[2]^X[3]^X[5]^X[6]^X[7];
+ /*Y[0] = X[0]^X[2]^X[3]^X[5]^X[6]^X[7];
Y[1] = X[0]^X[1]^X[3]^X[4]^X[6]^X[7];
Y[2] = X[0]^X[1]^X[2]^X[4]^X[5]^X[7];
Y[3] = X[1]^X[2]^X[3]^X[4]^X[5]^X[6];
Y[5] = X[1]^X[2]^X[4]^X[6]^X[7];
Y[6] = X[2]^X[3]^X[4]^X[5]^X[7];
Y[7] = X[0]^X[3]^X[4]^X[5]^X[6];
+ */
+
+
+ uchar X0=X[0];
+ uchar X1=X[1];
+ uchar X2=X[2];
+ uchar X3=X[3];
+ uchar X4=X[4];
+ uchar X5=X[5];
+ uchar X6=X[6];
+ uchar X7=X[7];
+
+ Y[0] = X0^X2^X3^X5^X6^X7;
+ Y[1] = X0^X1^X3^X4^X6^X7;
+ Y[2] = X0^X1^X2^X4^X5^X7;
+ Y[3] = X1^X2^X3^X4^X5^X6;
+ Y[4] = X0^X1^X5^X6^X7;
+ Y[5] = X1^X2^X4^X6^X7;
+ Y[6] = X2^X3^X4^X5^X7;
+ Y[7] = X0^X3^X4^X5^X6;
+
+
}
else if(h==16) {
- Y[0] = X[3] ^ X[4] ^ X[6] ^ X[8] ^ X[9] ^ X[13] ^ X[14];
+ Y[0] = X[3] ^ X[4] ^ X[6] ^ X[8] ^ X[9] ^ X[13] ^ X[14];
Y[1] = X[2] ^ X[5] ^ X[7] ^ X[8] ^ X[9] ^ X[12] ^ X[15];
Y[2] = X[1] ^ X[4] ^ X[6] ^ X[10] ^ X[11] ^ X[12] ^ X[15];
Y[3] = X[0] ^ X[5] ^ X[7] ^ X[10] ^ X[11] ^ X[13] ^ X[14];
Y[12] = X[1] ^ X[2] ^ X[6] ^ X[7] ^ X[9] ^ X[11] ^ X[12];
Y[13] = X[0] ^ X[3] ^ X[6] ^ X[7] ^ X[8] ^ X[10] ^ X[13];
Y[14] = X[0] ^ X[3] ^ X[4] ^ X[5] ^ X[9] ^ X[11] ^ X[14];
- Y[15] = X[1] ^ X[2] ^ X[4] ^ X[5] ^ X[8] ^ X[10] ^ X[15];
+ Y[15] = X[1] ^ X[2] ^ X[4] ^ X[5] ^ X[8] ^ X[10] ^ X[15];
+
+
+/* uchar X0=X[0];
+ uchar X1=X[1];
+ uchar X2=X[2];
+ uchar X3=X[3];
+ uchar X4=X[4];
+ uchar X5=X[5];
+ uchar X6=X[6];
+ uchar X7=X[7];
+ uchar X8=X[8];
+ uchar X9=X[9];
+ uchar X10=X[10];
+ uchar X11=X[11];
+ uchar X12=X[12];
+ uchar X13=X[13];
+ uchar X14=X[14];
+ uchar X15=X[15];
+
+
+ Y[0] = X3 ^ X4 ^ X6 ^ X8 ^ X9 ^ X13 ^ X14;
+ Y[1] = X2 ^ X5 ^ X7 ^ X8 ^ X9 ^ X12 ^ X15;
+ Y[2] = X1 ^ X4 ^ X6 ^ X10 ^ X11 ^ X12 ^ X15;
+ Y[3] = X0 ^ X5 ^ X7 ^ X10 ^ X11 ^ X13 ^ X14;
+ Y[4] = X0 ^ X2 ^ X5 ^ X8 ^ X11 ^ X14 ^ X15;
+ Y[5] = X1 ^ X3 ^ X4 ^ X9 ^ X10 ^ X14 ^ X15;
+ Y[6] = X0 ^ X2 ^ X7 ^ X9 ^ X10 ^ X12 ^ X13;
+ Y[7] = X1 ^ X3 ^ X6 ^ X8 ^ X11 ^ X12 ^ X13;
+ Y[8] = X0 ^ X1 ^ X4 ^ X7 ^ X10 ^ X13 ^ X15;
+ Y[9] = X0 ^ X1 ^ X5 ^ X6 ^ X11 ^ X12 ^ X14;
+ Y[10] = X2 ^ X3 ^ X5 ^ X6 ^ X8 ^ X13 ^ X15;
+ Y[11] = X2 ^ X3 ^ X4 ^ X7 ^ X9 ^ X12 ^ X14;
+ Y[12] = X1 ^ X2 ^ X6 ^ X7 ^ X9 ^ X11 ^ X12;
+ Y[13] = X0 ^ X3 ^ X6 ^ X7 ^ X8 ^ X10 ^ X13;
+ Y[14] = X0 ^ X3 ^ X4 ^ X5 ^ X9 ^ X11 ^ X14;
+ Y[15] = X1 ^ X2 ^ X4 ^ X5 ^ X8 ^ X10 ^ X15;
+*/
+
+
}
else if(h==32) {
}
// Second Diffusion Operation
+
+ /*for(int a=0;a<h;a+=4) {
+ fX2[a]=circ(X[a],3);
+ fX2[a+1]=circ(X[a+1],5);
+ fX2[a+2]=circ(X[a+2],1);
+ fX2[a+3]=circ(X[a+3],6);
+ }*/
diff(fX2,fX,h);
RM1[a+1]=fX2[a+1]^RM1[PboxRM[a+1]];
RM1[a+2]=fX2[a+2]^RM1[PboxRM[a+2]];
RM1[a+3]=fX2[a+3]^RM1[PboxRM[a+3]];
+ }
+/*
+ for(int a=0;a<h;a+=4) {
+ RM1[a]=RM1[PboxRM[a]];
+ RM1[a+1]=RM1[PboxRM[a+1]];
+ RM1[a+2]=RM1[PboxRM[a+2]];
+ RM1[a+3]=RM1[PboxRM[a+3]];
}
+
+ for(int a=0;a<h;a+=4) {
+ RM1[a]=fX2[a]^RM1[a];
+ RM1[a+1]=fX2[a+1]^RM1[a+1];
+ RM1[a+2]=fX2[a+2]^RM1[a+2];
+ RM1[a+3]=fX2[a+3]^RM1[a+3];
+ }
+*/
+
+
}
}
}
- if(change) {
- buffer[4]++;
- }
}
+ if(change) {
+
+ seq[4]++;
+ }
+ if(change==2) {
+
+ seq[9]++;
+ }
+
int total_len=imsize;
int rp=1;
RM2[i]=RM1[i];
}
+ cout<<"imsize "<<imsize<<endl;
- for(int i=0;i<imsize;i++){
+/* for(int i=0;i<imsize;i++){
cout<<(int)seq[i]<<" ";
}
cout<<endl;
-
+*/
time=0;
t=TimeStart();
-
- hash_DSD_BIN(seq, RM1,len,PboxRM,Sbox1,h);
-
+ for(int i=0;i<nb_test;i++)
+ {
+ hash_DSD_BIN(seq, RM1,len,PboxRM,Sbox1,h);
+ }
time+=TimeStop(t);
cout<<"Hash Time "<<time<<endl;
-
+ cout<<(double)imsize*nb_test/time<<"\t";
for(int i=0;i<h;i++){
cout<<(int)RM1[i]<<" ";