X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/Cipher_code.git/blobdiff_plain/3ec5ac6eaae843080a637d31fe99abea7c327f94..50cc69e2c323701acf1102861274d3ab3a54b002:/OneRoundIoT/EnhancedOneRound/enhanced_oneround.cpp?ds=inline diff --git a/OneRoundIoT/EnhancedOneRound/enhanced_oneround.cpp b/OneRoundIoT/EnhancedOneRound/enhanced_oneround.cpp index 13971e6..cefdb77 100644 --- a/OneRoundIoT/EnhancedOneRound/enhanced_oneround.cpp +++ b/OneRoundIoT/EnhancedOneRound/enhanced_oneround.cpp @@ -197,8 +197,8 @@ void encrypt_ecb_prng(uchar* seq_in, uchar *seq_out, int len,uchar* RM, int *Pbo uchar Y[h]; uchar fX[h]; uchar gY[h]; - uchar *RM1=&RM[0]; - uchar *RM2=&RM[h]; + uchar RM1[h]; + uchar RM2[h]; uchar tmp[h]; mylong *rm1=(mylong*)RM1; mylong *rm2=(mylong*)RM2; @@ -487,7 +487,7 @@ void encrypt_ecb_rm(uchar* seq_in, uchar *seq_out, int len,uchar* RM, int *Pbox, RM1=&RM[PboxSRM[it]*h]; - RM2=&RM[h*h+PboxSRM[len/2-it]*h]; + RM2=&RM[h*h+PboxSRM[len/2-it-1]*h]; @@ -629,7 +629,7 @@ void decrypt_ecb_rm(uchar* seq_in, uchar *seq_out, int len, uchar* RM, int *Pbox RM1=&RM[PboxSRM[it]*h]; - RM2=&RM[h*h+PboxSRM[len/2-it]*h]; + RM2=&RM[h*h+PboxSRM[len/2-it-1]*h]; @@ -1133,14 +1133,19 @@ void encrypt_cbc_rm(uchar* seq_in, uchar *seq_out, int len,uchar* RM, int *Pbox, } + + for(int it=0;it<len/2;it++) { int ind1=Pbox[it]*h; int ind2=Pbox[it+len/2]*h; RM1=&RM[PboxSRM[it]*h]; - RM2=&RM[h*h+PboxSRM[len/2-it]*h]; + RM2=&RM[h*h+PboxSRM[len/2-it-1]*h]; + + + for(int a=0;a<h;a+=4) { X[a]=seq_in[ind2+a]; X[a+1]=seq_in[ind2+a+1]; @@ -1240,6 +1245,8 @@ void encrypt_cbc_rm(uchar* seq_in, uchar *seq_out, int len,uchar* RM, int *Pbox, } */ + + for(int a=0;a<h;a+=4) { seq_out[ind2+a]=gY[a]; seq_out[ind2+a+1]=gY[a+1]; @@ -1253,6 +1260,7 @@ void encrypt_cbc_rm(uchar* seq_in, uchar *seq_out, int len,uchar* RM, int *Pbox, seq_out[ind1+a+2]=fX[a+2]; seq_out[ind1+a+3]=fX[a+3]; } + for(int a=0;a<h;a+=4) { IV1[a]=fX[a]; IV1[a+1]=fX[a+1]; @@ -1317,7 +1325,7 @@ void decrypt_cbc_rm(uchar* seq_in, uchar *seq_out, int len, uchar* RM, int *Pbox RM1=&RM[PboxSRM[it]*h]; - RM2=&RM[h*h+PboxSRM[len/2-it]*h]; + RM2=&RM[h*h+PboxSRM[len/2-it-1]*h]; @@ -1430,269 +1438,6 @@ void decrypt_cbc_rm(uchar* seq_in, uchar *seq_out, int len, uchar* RM, int *Pbox -/* - -template<int h> -void encrypt_cbc(uchar* seq_in, uchar *seq_out, int len,uchar* RM, int *Pbox, int *PboxSRM, uchar *Sbox1, uchar *Sbox2, uint myrand, int debug) { - - uchar X[h]; - uchar Y[h]; - uchar fX[h]; - uchar gY[h]; - uchar IV1[h]; - uchar IV2[h]; - uchar *RM1; - uchar *RM2; - - int h2=h*h; - - - - - for(int a=0;a<h;a+=4) { - myrand=xorshift32(myrand); - uint mm=myrand; - IV1[a]=(mm&255); - mm>>=8; - IV1[a+1]=(mm&255); - mm>>=8; - IV1[a+2]=(mm&255); - mm>>=8; - IV1[a+3]=(mm&255); - } - - for(int a=0;a<h;a+=4) { - myrand=xorshift32(myrand); - uint mm=myrand; - IV2[a]=(mm&255); - mm>>=8; - IV2[a+1]=(mm&255); - mm>>=8; - IV2[a+2]=(mm&255); - mm>>=8; - IV2[a+3]=(mm&255); - - } - - - - for(int it=0;it<len/2;it++) { - int ind1=Pbox[it]*h; - int ind2=Pbox[it+len/2]*h; - - - - RM1=&RM[PboxSRM[it]*h]; - RM2=&RM[h*h+PboxSRM[it]*h]; - - - for(int a=0;a<h;a+=4) { - X[a]=seq_in[ind2+a]; - X[a+1]=seq_in[ind2+a+1]; - X[a+2]=seq_in[ind2+a+2]; - X[a+3]=seq_in[ind2+a+3]; - } - - for(int a=0;a<h;a+=4) { - Y[a]=seq_in[ind1+a]; - Y[a+1]=seq_in[ind1+a+1]; - Y[a+2]=seq_in[ind1+a+2]; - Y[a+3]=seq_in[ind1+a+3]; - } - - - for(int a=0;a<h;a+=4) { - fX[a]=Sbox2[Sbox1[X[a]^RM1[a]^IV1[a]]^Y[a]]; - fX[a+1]=Sbox2[Sbox1[X[a+1]^RM1[a+1]^IV1[a+1]]^Y[a+1]]; - fX[a+2]=Sbox2[Sbox1[X[a+2]^RM1[a+2]^IV1[a+2]]^Y[a+2]]; - fX[a+3]=Sbox2[Sbox1[X[a+3]^RM1[a+3]^IV1[a+3]]^Y[a+3]]; - } - - for(int a=0;a<h;a+=4) { - gY[a]=Sbox1[Sbox2[fX[a]^Y[a]^IV2[a]]^RM2[a]]; - gY[a+1]=Sbox1[Sbox2[fX[a+1]^Y[a+1]^IV2[a+1]]^RM2[a+1]]; - gY[a+2]=Sbox1[Sbox2[fX[a+2]^Y[a+2]^IV2[a+2]]^RM2[a+2]]; - gY[a+3]=Sbox1[Sbox2[fX[a+3]^Y[a+3]^IV2[a+3]]^RM2[a+3]]; - - } - - for(int a=0;a<h;a+=4) { - seq_out[ind2+a]=gY[a]; - seq_out[ind2+a+1]=gY[a+1]; - seq_out[ind2+a+2]=gY[a+2]; - seq_out[ind2+a+3]=gY[a+3]; - } - - for(int a=0;a<h;a+=4) { - seq_out[ind1+a]=fX[a]; - seq_out[ind1+a+1]=fX[a+1]; - seq_out[ind1+a+2]=fX[a+2]; - seq_out[ind1+a+3]=fX[a+3]; - } - for(int a=0;a<h;a+=4) { - IV1[a]=fX[a]; - IV1[a+1]=fX[a+1]; - IV1[a+2]=fX[a+2]; - IV1[a+3]=fX[a+3]; - } - - for(int a=0;a<h;a+=4) { - IV2[a]=gY[a]; - IV2[a+1]=gY[a+1]; - IV2[a+2]=gY[a+2]; - IV2[a+3]=gY[a+3]; - } - - } - - - - -} - - - - - - - - -template<int h> -void decrypt_cbc(uchar* seq_in, uchar *seq_out, int len, uchar* RM, int *Pbox, int *PboxSRM, uchar *Sbox1, uchar *Sbox2, uchar *Inv_Sbox1, uchar *Inv_Sbox2, uint myrand, int debug) { - - uchar invfX[h]; - uchar invgY[h]; - uchar fX[h]; - uchar gY[h]; - uchar IV1[h]; - uchar IV2[h]; - uchar *RM1; - uchar *RM2; - - for(int a=0;a<h;a+=4) { - myrand=xorshift32(myrand); - uint mm=myrand; - IV1[a]=(mm&255); - mm>>=8; - IV1[a+1]=(mm&255); - mm>>=8; - IV1[a+2]=(mm&255); - mm>>=8; - IV1[a+3]=(mm&255); - } - - for(int a=0;a<h;a+=4) { - myrand=xorshift32(myrand); - uint mm=myrand; - IV2[a]=(mm&255); - mm>>=8; - IV2[a+1]=(mm&255); - mm>>=8; - IV2[a+2]=(mm&255); - mm>>=8; - IV2[a+3]=(mm&255); - - } - - - - - - - for(int it=0;it<len/2;it++) { - int ind1=Pbox[it]*h; - int ind2=Pbox[it+len/2]*h; - - - RM1=&RM[PboxSRM[it]*h]; - RM2=&RM[h*h+PboxSRM[it]*h]; - - - for(int a=0;a<h;a+=4) { - gY[a]=seq_in[ind2+a]; - gY[a+1]=seq_in[ind2+a+1]; - gY[a+2]=seq_in[ind2+a+2]; - gY[a+3]=seq_in[ind2+a+3]; - } - - for(int a=0;a<h;a+=4) { - fX[a]=seq_in[ind1+a]; - fX[a+1]=seq_in[ind1+a+1]; - fX[a+2]=seq_in[ind1+a+2]; - fX[a+3]=seq_in[ind1+a+3]; - } - - - for(int a=0;a<h;a+=4) { - invgY[a]=Inv_Sbox1[gY[a]]^RM2[a]; - invgY[a+1]=Inv_Sbox1[gY[a+1]]^RM2[a+1]; - invgY[a+2]=Inv_Sbox1[gY[a+2]]^RM2[a+2]; - invgY[a+3]=Inv_Sbox1[gY[a+3]]^RM2[a+3]; - } - - - for(int a=0;a<h;a+=4) { - invgY[a]=Inv_Sbox2[invgY[a]]^fX[a]^IV2[a]; - invgY[a+1]=Inv_Sbox2[invgY[a+1]]^fX[a+1]^IV2[a+1]; - invgY[a+2]=Inv_Sbox2[invgY[a+2]]^fX[a+2]^IV2[a+2]; - invgY[a+3]=Inv_Sbox2[invgY[a+3]]^fX[a+3]^IV2[a+3]; - } - - - for(int a=0;a<h;a+=4) { - invfX[a]=Inv_Sbox2[fX[a]]^invgY[a]; - invfX[a+1]=Inv_Sbox2[fX[a+1]]^invgY[a+1]; - invfX[a+2]=Inv_Sbox2[fX[a+2]]^invgY[a+2]; - invfX[a+3]=Inv_Sbox2[fX[a+3]]^invgY[a+3]; - - } - - for(int a=0;a<h;a+=4) { - invfX[a]=Inv_Sbox1[invfX[a]]^RM1[a]^IV1[a]; - invfX[a+1]=Inv_Sbox1[invfX[a+1]]^RM1[a+1]^IV1[a+1]; - invfX[a+2]=Inv_Sbox1[invfX[a+2]]^RM1[a+2]^IV1[a+2]; - invfX[a+3]=Inv_Sbox1[invfX[a+3]]^RM1[a+3]^IV1[a+3]; - - } - - - for(int a=0;a<h;a+=4) { - seq_out[ind2+a]=invfX[a]; - seq_out[ind2+a+1]=invfX[a+1]; - seq_out[ind2+a+2]=invfX[a+2]; - seq_out[ind2+a+3]=invfX[a+3]; - } - - for(int a=0;a<h;a+=4) { - seq_out[ind1+a]=invgY[a]; - seq_out[ind1+a+1]=invgY[a+1]; - seq_out[ind1+a+2]=invgY[a+2]; - seq_out[ind1+a+3]=invgY[a+3]; - } - for(int a=0;a<h;a+=4) { - IV1[a]=fX[a]; - IV1[a+1]=fX[a+1]; - IV1[a+2]=fX[a+2]; - IV1[a+3]=fX[a+3]; - } - - for(int a=0;a<h;a+=4) { - IV2[a]=gY[a]; - IV2[a+1]=gY[a+1]; - IV2[a+2]=gY[a+2]; - IV2[a+3]=gY[a+3]; - } - - - } - - - - -} -*/ - - int main(int argc, char** argv) { @@ -1714,7 +1459,7 @@ int main(int argc, char** argv) { if(strncmp(argv[i],"lena",4)==0) lena = atoi(&(argv[i][4])); //Use Lena or buffer } - printf("nb times %d\n",nb_test); +/* printf("nb times %d\n",nb_test); printf("cbcrm %d\n",cbcrm); printf("cbcprng %d\n",cbcprng); printf("ecbrm %d\n",ecbrm); @@ -1722,7 +1467,7 @@ int main(int argc, char** argv) { printf("h %d\n",h); printf("lena %d\n",lena); printf("size_buf %d\n",size_buf); - +*/ @@ -1765,7 +1510,8 @@ int main(int argc, char** argv) { } else { width=height=size_buf; - imsize=width*height; + imsize=width*height*3; + //cout<<"imsize "<<imsize<<endl; buffer=new uchar[imsize]; for(int i=0;i<imsize;i++) { buffer[i]=lrand48(); @@ -1774,7 +1520,7 @@ int main(int argc, char** argv) { - + cout<<"imsize "<<imsize<<endl; uchar* seq= new uchar[imsize]; uchar* seq2= new uchar[imsize]; @@ -1788,14 +1534,14 @@ int main(int argc, char** argv) { } } else { - for(int i=0;i<oneD;i++) { + for(int i=0;i<oneD*3;i++) { seq[i]=buffer[i]; } } - + int total_len=imsize; int rp=1; @@ -1852,27 +1598,30 @@ int main(int argc, char** argv) { double t=TimeStart(); - rc4key(DK, Sbox1, 8); - - - rc4key(&DK[8], Sbox2, 8); - - rc4key(&DK[16], sc, 16); - prga(sc, h*h*2+256, RM); - + for(int i=0;i<nb_test;i++) { - - - rc4keyperm(&DK[72], len, rp, Pbox, 16); + rc4key(DK, Sbox1, 8); - rc4keyperm(&DK[88], len/2, rp, PboxSRM2, 16); + rc4key(&DK[8], Sbox2, 8); + + rc4key(&DK[16], sc, 16); + prga(sc, h*h*2+256, RM); + + - for(int i=0;i<len/2;i++) { - PboxSRM[i]=PboxSRM2[i]&(h-1); - } + + rc4keyperm(&DK[72], len, rp, Pbox, 16); + + + rc4keyperm(&DK[88], len/2, rp, PboxSRM2, 16); + + for(int i=0;i<len/2;i++) { + PboxSRM[i]=PboxSRM2[i]&(h-1); + } + /* for(int i=0;i<h*2;i++) { for(int j=0;j<h;j++) @@ -1880,11 +1629,11 @@ int main(int argc, char** argv) { cout<<endl; } */ + } - - - //time+=TimeStop(t); - //cout<<"Time initializaton "<<time<<endl; + double time_init=0; + time_init+=TimeStop(t); + cout<<"Time initializaton nb times "<<nb_test<<" = "<<time_init<<endl; @@ -1991,7 +1740,8 @@ int main(int argc, char** argv) { } break; - case 256: + case 256: + for(i=0;i<nb_test;i++) { if(cbcprng) @@ -2006,8 +1756,10 @@ int main(int argc, char** argv) { } break; } + + time_encrypt+=TimeStop(t); - //cout<<"Time encrypt "<< + cout<<"Time encrypt "<<time_encrypt<<endl; cout<<(double)imsize*nb_test/time_encrypt<<"\t"; @@ -2112,8 +1864,10 @@ int main(int argc, char** argv) { break; } + + time_decrypt+=TimeStop(t); - //cout<<"Time decrypt " +// cout<<"Time decrypt "<<time_decrypt<<endl; cout<<(double)imsize*nb_test/time_decrypt<<"\t"; if(lena) { @@ -2132,7 +1886,7 @@ int main(int argc, char** argv) { equal=false; } } -// cout<<"RESULT CORRECT: "<<equal<<endl; + //cout<<"RESULT CORRECT: "<<equal<<endl; }