X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/Cipher_code.git/blobdiff_plain/4bacb7dfd38d6c9831bd6f35a275ab6c5c815a14..d8de23027e190ab94ece38a9411fefb995bab460:/OneRoundIoT/EnhancedOneRound/enhanced_oneround.cpp?ds=sidebyside diff --git a/OneRoundIoT/EnhancedOneRound/enhanced_oneround.cpp b/OneRoundIoT/EnhancedOneRound/enhanced_oneround.cpp index e3b9858..cefdb77 100644 --- a/OneRoundIoT/EnhancedOneRound/enhanced_oneround.cpp +++ b/OneRoundIoT/EnhancedOneRound/enhanced_oneround.cpp @@ -191,14 +191,14 @@ void prga(uchar *sc, int ldata, uchar *r) { template<int h> -void encrypt_ecb_prng(uchar* seq_in, uchar *seq_out, int len,uchar* RM, int *Pbox, int *PboxSRM, uchar *Sbox1, uchar *Sbox2, mylong myrand, int debug) { +void encrypt_ecb_prng(uchar* seq_in, uchar *seq_out, int len,uchar* RM, int *Pbox, int *PboxSRM, uchar *Sbox1, uchar *Sbox2, uchar* IV,mylong myrand, int debug) { uchar X[h]; 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; @@ -319,7 +319,7 @@ void encrypt_ecb_prng(uchar* seq_in, uchar *seq_out, int len,uchar* RM, int *Pbo template<int h> -void decrypt_ecb_prng(uchar* seq_in, uchar *seq_out, int len, uchar* RM, int *Pbox, int *PboxSRM, uchar *Sbox1, uchar *Sbox2, uchar *Inv_Sbox1, uchar *Inv_Sbox2, mylong myrand, int debug) { +void decrypt_ecb_prng(uchar* seq_in, uchar *seq_out, int len, uchar* RM, int *Pbox, int *PboxSRM, uchar *Sbox1, uchar *Sbox2, uchar *Inv_Sbox1, uchar *Inv_Sbox2, uchar* IV,mylong myrand, int debug) { uchar invfX[h]; uchar invgY[h]; @@ -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]; @@ -729,82 +729,6 @@ void decrypt_ecb_rm(uchar* seq_in, uchar *seq_out, int len, uchar* RM, int *Pbox -/* - -template<int h> -void encrypt_ecb(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 *RM1; - uchar *RM2; - - 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]]^Y[a]]; - fX[a+1]=Sbox2[Sbox1[X[a+1]^RM1[a+1]]^Y[a+1]]; - fX[a+2]=Sbox2[Sbox1[X[a+2]^RM1[a+2]]^Y[a+2]]; - fX[a+3]=Sbox2[Sbox1[X[a+3]^RM1[a+3]]^Y[a+3]]; - } - - for(int a=0;a<h;a+=4) { - gY[a]=Sbox1[Sbox2[fX[a]^Y[a]]^RM2[a]]; - gY[a+1]=Sbox1[Sbox2[fX[a+1]^Y[a+1]]^RM2[a+1]]; - gY[a+2]=Sbox1[Sbox2[fX[a+2]^Y[a+2]]^RM2[a+2]]; - gY[a+3]=Sbox1[Sbox2[fX[a+3]^Y[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]; - } - - - - } - - - - -} - - @@ -812,87 +736,7 @@ void encrypt_ecb(uchar* seq_in, uchar *seq_out, int len,uchar* RM, int *Pbox, in template<int h> -void decrypt_ecb(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 *RM1; - uchar *RM2; - - 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_Sbox2[Inv_Sbox1[gY[a]]^RM2[a]]^fX[a]; - invgY[a+1]=Inv_Sbox2[Inv_Sbox1[gY[a+1]]^RM2[a+1]]^fX[a+1]; - invgY[a+2]=Inv_Sbox2[Inv_Sbox1[gY[a+2]]^RM2[a+2]]^fX[a+2]; - invgY[a+3]=Inv_Sbox2[Inv_Sbox1[gY[a+3]]^RM2[a+3]]^fX[a+3]; - } - - - - for(int a=0;a<h;a+=4) { - invfX[a]=Inv_Sbox1[Inv_Sbox2[fX[a]]^invgY[a]]^RM1[a]; - invfX[a+1]=Inv_Sbox1[Inv_Sbox2[fX[a+1]]^invgY[a+1]]^RM1[a+1]; - invfX[a+2]=Inv_Sbox1[Inv_Sbox2[fX[a+2]]^invgY[a+2]]^RM1[a+2]; - invfX[a+3]=Inv_Sbox1[Inv_Sbox2[fX[a+3]]^invgY[a+3]]^RM1[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]; - } - - - - } - - - - -} - -*/ - - - - - -template<int h> -void encrypt_cbc_prng(uchar* seq_in, uchar *seq_out, int len,uchar* RM, int *Pbox, int *PboxSRM, uchar *Sbox1, uchar *Sbox2, uint myrand, int debug) { +void encrypt_cbc_prng(uchar* seq_in, uchar *seq_out, int len,uchar* RM, int *Pbox, int *PboxSRM, uchar *Sbox1, uchar *Sbox2, uchar *IV,uint myrand, int debug) { uchar X[h]; uchar Y[h]; @@ -900,13 +744,29 @@ void encrypt_cbc_prng(uchar* seq_in, uchar *seq_out, int len,uchar* RM, int *Pbo uchar gY[h]; uchar IV1[h]; uchar IV2[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; + + for(int a=0;a<h;a+=4) { + IV1[a]=IV[a]; + IV1[a+1]=IV[a+1]; + IV1[a+2]=IV[a+2]; + IV1[a+3]=IV[a+3]; + } + + + for(int a=0;a<h;a+=4) { + IV2[a]=IV[h+a]; + IV2[a+1]=IV[h+a+1]; + IV2[a+2]=IV[h+a+2]; + IV2[a+3]=IV[h+a+3]; + + } for(int it=0;it<len/2;it++) { @@ -953,7 +813,7 @@ void encrypt_cbc_prng(uchar* seq_in, uchar *seq_out, int len,uchar* RM, int *Pbo } - /*for(int a=0;a<h;a+=4) { + /* for(int a=0;a<h;a+=4) { tmp[a]=Sbox1[X[a]^RM1[a]^IV1[a]]; tmp[a+1]=Sbox1[X[a+1]^RM1[a+1]^IV1[a+1]]; tmp[a+2]=Sbox1[X[a+2]^RM1[a+2]^IV1[a+2]]; @@ -965,16 +825,16 @@ void encrypt_cbc_prng(uchar* seq_in, uchar *seq_out, int len,uchar* RM, int *Pbo fX[a+1]=Sbox2[tmp[a+1]^Y[a+1]]; fX[a+2]=Sbox2[tmp[a+2]^Y[a+2]]; fX[a+3]=Sbox2[tmp[a+3]^Y[a+3]]; - } + } - /* - for(int a=0;a<h;a+=4) { + + /*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) { tmp[a]=fX[a]^Y[a]^IV2[a]; @@ -992,7 +852,7 @@ void encrypt_cbc_prng(uchar* seq_in, uchar *seq_out, int len,uchar* RM, int *Pbo } - /* + /* for(int a=0;a<h;a+=4) { tmp[a]=Sbox2[fX[a]^Y[a]^IV2[a]]; tmp[a+1]=Sbox2[fX[a+1]^Y[a+1]^IV2[a+1]]; @@ -1000,7 +860,7 @@ void encrypt_cbc_prng(uchar* seq_in, uchar *seq_out, int len,uchar* RM, int *Pbo tmp[a+3]=Sbox2[fX[a+3]^Y[a+3]^IV2[a+3]]; } - */ + */ for(int a=0;a<h;a+=4) { gY[a]=Sbox1[tmp[a]^RM2[a]]; @@ -1012,7 +872,7 @@ void encrypt_cbc_prng(uchar* seq_in, uchar *seq_out, int len,uchar* RM, int *Pbo - /* +/* 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]]; @@ -1020,7 +880,7 @@ void encrypt_cbc_prng(uchar* seq_in, uchar *seq_out, int len,uchar* RM, int *Pbo 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]; @@ -1064,21 +924,38 @@ void encrypt_cbc_prng(uchar* seq_in, uchar *seq_out, int len,uchar* RM, int *Pbo template<int h> -void decrypt_cbc_prng(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) { +void decrypt_cbc_prng(uchar* seq_in, uchar *seq_out, int len, uchar* RM, int *Pbox, int *PboxSRM, uchar *Sbox1, uchar *Sbox2, uchar *Inv_Sbox1, uchar *Inv_Sbox2, uchar* IV, uint myrand, int debug) { uchar invfX[h]; uchar invgY[h]; uchar fX[h]; uchar gY[h]; + uchar RM1[h]; + uchar RM2[h]; uchar IV1[h]; uchar IV2[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; + + + + for(int a=0;a<h;a+=4) { + IV1[a]=IV[a]; + IV1[a+1]=IV[a+1]; + IV1[a+2]=IV[a+2]; + IV1[a+3]=IV[a+3]; + } + + + for(int a=0;a<h;a+=4) { + IV2[a]=IV[h+a]; + IV2[a+1]=IV[h+a+1]; + IV2[a+2]=IV[h+a+2]; + IV2[a+3]=IV[h+a+3]; + + } + for(int it=0;it<len/2;it++) { int ind1=Pbox[it]*h; @@ -1132,6 +1009,16 @@ void decrypt_cbc_prng(uchar* seq_in, uchar *seq_out, int len, uchar* RM, int *Pb } +/* + for(int a=0;a<h;a+=4) { + invgY[a]=Inv_Sbox2[Inv_Sbox1[gY[a]]^RM2[a]]^fX[a]^IV2[a]; + invgY[a+1]=Inv_Sbox2[Inv_Sbox1[gY[a+1]]^RM2[a+1]]^fX[a+1]^IV2[a+1]; + invgY[a+2]=Inv_Sbox2[Inv_Sbox1[gY[a+2]]^RM2[a+2]]^fX[a+2]^IV2[a+2]; + invgY[a+3]=Inv_Sbox2[Inv_Sbox1[gY[a+3]]^RM2[a+3]]^fX[a+3]^IV2[a+3]; + } +*/ + + for(int a=0;a<h;a+=4) { tmp[a]=Inv_Sbox2[fX[a]]^invgY[a]; tmp[a+1]=Inv_Sbox2[fX[a+1]]^invgY[a+1]; @@ -1160,6 +1047,18 @@ void decrypt_cbc_prng(uchar* seq_in, uchar *seq_out, int len, uchar* RM, int *Pb } +/* + for(int a=0;a<h;a+=4) { + invfX[a]=Inv_Sbox1[Inv_Sbox2[fX[a]]^invgY[a]]^RM1[a]^IV1[a]; + invfX[a+1]=Inv_Sbox1[Inv_Sbox2[fX[a+1]]^invgY[a+1]]^RM1[a+1]^IV1[a+1]; + invfX[a+2]=Inv_Sbox1[Inv_Sbox2[fX[a+2]]^invgY[a+2]]^RM1[a+2]^IV1[a+2]; + invfX[a+3]=Inv_Sbox1[Inv_Sbox2[fX[a+3]]^invgY[a+3]]^RM1[a+3]^IV1[a+3]; + + } + +*/ + + for(int a=0;a<h;a+=4) { seq_out[ind2+a]=invfX[a]; @@ -1234,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]; @@ -1341,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]; @@ -1354,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]; @@ -1418,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]; @@ -1531,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) { @@ -1815,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); @@ -1823,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); - +*/ @@ -1866,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(); @@ -1875,7 +1520,7 @@ int main(int argc, char** argv) { - + cout<<"imsize "<<imsize<<endl; uchar* seq= new uchar[imsize]; uchar* seq2= new uchar[imsize]; @@ -1889,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; @@ -1953,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++) @@ -1981,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; @@ -2016,65 +1664,65 @@ int main(int argc, char** argv) { for(i=0;i<nb_test;i++) { if(cbcprng) - encrypt_cbc_prng<4>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,myrand,0); + encrypt_cbc_prng<4>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,myrand,0); if(cbcrm) encrypt_cbc_rm<4>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,0); if(ecbrm) encrypt_ecb_rm<4>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,0); if(ecbprng) - encrypt_ecb_prng<4>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,myrand,0); + encrypt_ecb_prng<4>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,myrand,0); } break; case 8: for(i=0;i<nb_test;i++) { if(cbcprng) - encrypt_cbc_prng<8>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,myrand,0); + encrypt_cbc_prng<8>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,myrand,0); if(cbcrm) encrypt_cbc_rm<8>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,0); if(ecbrm) encrypt_ecb_rm<8>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,0); if(ecbprng) - encrypt_ecb_prng<8>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,myrand,0); + encrypt_ecb_prng<8>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,myrand,0); } break; case 16: for(i=0;i<nb_test;i++) { if(cbcprng) - encrypt_cbc_prng<16>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,myrand,0); + encrypt_cbc_prng<16>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,myrand,0); if(cbcrm) encrypt_cbc_rm<16>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,0); if(ecbrm) encrypt_ecb_rm<16>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,0); if(ecbprng) - encrypt_ecb_prng<16>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,myrand,0); + encrypt_ecb_prng<16>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,myrand,0); } break; case 32: for(i=0;i<nb_test;i++) { if(cbcprng) - encrypt_cbc_prng<32>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,myrand,0); + encrypt_cbc_prng<32>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,myrand,0); if(cbcrm) encrypt_cbc_rm<32>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,0); if(ecbrm) encrypt_ecb_rm<32>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,0); if(ecbprng) - encrypt_ecb_prng<32>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,myrand,0); + encrypt_ecb_prng<32>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,myrand,0); } break; case 64: for(i=0;i<nb_test;i++) { if(cbcprng) - encrypt_cbc_prng<64>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,myrand,0); + encrypt_cbc_prng<64>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,myrand,0); if(cbcrm) encrypt_cbc_rm<64>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,0); if(ecbrm) encrypt_ecb_rm<64>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,0); if(ecbprng) - encrypt_ecb_prng<64>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,myrand,0); + encrypt_ecb_prng<64>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,myrand,0); } break; @@ -2082,33 +1730,36 @@ int main(int argc, char** argv) { for(i=0;i<nb_test;i++) { if(cbcprng) - encrypt_cbc_prng<128>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,myrand,0); + encrypt_cbc_prng<128>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,myrand,0); if(cbcrm) encrypt_cbc_rm<128>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,0); if(ecbrm) encrypt_ecb_rm<128>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,0); if(ecbprng) - encrypt_ecb_prng<128>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,myrand,0); + encrypt_ecb_prng<128>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,myrand,0); } break; - case 256: + case 256: + for(i=0;i<nb_test;i++) { if(cbcprng) - encrypt_cbc_prng<256>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,myrand,0); + encrypt_cbc_prng<256>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,myrand,0); if(cbcrm) encrypt_cbc_rm<256>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,0); if(ecbrm) encrypt_ecb_rm<256>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,0); if(ecbprng) - encrypt_ecb_prng<256>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,myrand,0); + encrypt_ecb_prng<256>(seq, seq2,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,IV,myrand,0); } break; } + + time_encrypt+=TimeStop(t); - //cout<<"Time encrypt "<< + cout<<"Time encrypt "<<time_encrypt<<endl; cout<<(double)imsize*nb_test/time_encrypt<<"\t"; @@ -2130,91 +1781,93 @@ int main(int argc, char** argv) { case 4: for(i=0;i<nb_test;i++) { if(cbcprng) - decrypt_cbc_prng<4>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0); + decrypt_cbc_prng<4>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,myrand,0); if(cbcrm) decrypt_cbc_rm<4>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,0); if(ecbrm) decrypt_ecb_rm<4>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,0); if(ecbprng) - decrypt_ecb_prng<4>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0); + decrypt_ecb_prng<4>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,myrand,0); } break; case 8: for(i=0;i<nb_test;i++) { if(cbcprng) - decrypt_cbc_prng<8>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0); + decrypt_cbc_prng<8>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,myrand,0); if(cbcrm) decrypt_cbc_rm<8>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,0); if(ecbrm) decrypt_ecb_rm<8>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,0); if(ecbprng) - decrypt_ecb_prng<8>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0); + decrypt_ecb_prng<8>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,myrand,0); } break; case 16: for(i=0;i<nb_test;i++) { if(cbcprng) - decrypt_cbc_prng<16>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0); + decrypt_cbc_prng<16>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,myrand,0); if(cbcrm) decrypt_cbc_rm<16>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,0); if(ecbrm) decrypt_ecb_rm<16>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,0); if(ecbprng) - decrypt_ecb_prng<16>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0); + decrypt_ecb_prng<16>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,myrand,0); } break; case 32: for(i=0;i<nb_test;i++) { if(cbcprng) - decrypt_cbc_prng<32>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0); + decrypt_cbc_prng<32>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,myrand,0); if(cbcrm) decrypt_cbc_rm<32>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,0); if(ecbrm) decrypt_ecb_rm<32>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,0); if(ecbprng) - decrypt_ecb_prng<32>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0); + decrypt_ecb_prng<32>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,myrand,0); } break; case 64: for(i=0;i<nb_test;i++) { if(cbcprng) - decrypt_cbc_prng<64>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0); + decrypt_cbc_prng<64>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,myrand,0); if(cbcrm) decrypt_cbc_rm<64>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,0); if(ecbrm) decrypt_ecb_rm<64>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,0); if(ecbprng) - decrypt_ecb_prng<64>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0); + decrypt_ecb_prng<64>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,myrand,0); } break; case 128: for(i=0;i<nb_test;i++) { if(cbcprng) - decrypt_cbc_prng<128>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0); + decrypt_cbc_prng<128>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,myrand,0); if(cbcrm) decrypt_cbc_rm<128>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,0); if(ecbrm) decrypt_ecb_rm<128>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,0); if(ecbprng) - decrypt_ecb_prng<128>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0); + decrypt_ecb_prng<128>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,myrand,0); } break; case 256: for(i=0;i<nb_test;i++) { if(cbcprng) - decrypt_cbc_prng<256>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0); + decrypt_cbc_prng<256>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,myrand,0); if(cbcrm) decrypt_cbc_rm<256>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,0); if(ecbrm) decrypt_ecb_rm<256>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,0); if(ecbprng) - decrypt_ecb_prng<256>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0); + decrypt_ecb_prng<256>(seq2,seq,len,RM,Pbox,PboxSRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,IV,myrand,0); } break; } + + time_decrypt+=TimeStop(t); - //cout<<"Time decrypt " +// cout<<"Time decrypt "<<time_decrypt<<endl; cout<<(double)imsize*nb_test/time_decrypt<<"\t"; if(lena) { @@ -2233,7 +1886,7 @@ int main(int argc, char** argv) { equal=false; } } -// cout<<"RESULT CORRECT: "<<equal<<endl; + //cout<<"RESULT CORRECT: "<<equal<<endl; }