X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/Cipher_code.git/blobdiff_plain/ca940d4b9b6ef86858b8c2e8dcffce5602cbbbae..f225228275940ffb8cd10ee63028c0063b3e1810:/OneRoundIoT/OneRound/one_round_new.cpp?ds=sidebyside diff --git a/OneRoundIoT/OneRound/one_round_new.cpp b/OneRoundIoT/OneRound/one_round_new.cpp index de1b0d2..b7940af 100644 --- a/OneRoundIoT/OneRound/one_round_new.cpp +++ b/OneRoundIoT/OneRound/one_round_new.cpp @@ -9,6 +9,8 @@ #include #include #include +#include + /*#include #include @@ -30,10 +32,10 @@ using namespace std; int key_size=256; int nb_test=1; int ctr=0; -int h=64; -int h2=h*h; + + @@ -59,6 +61,16 @@ double TimeStop(double t) +uint xorshift32(const uint t) +{ + /* Algorithm "xor" from p. 4 of Marsaglia, "Xorshift RNGs" */ + uint x = t; + x ^= x << 13; + x ^= x >> 17; + x ^= x << 5; + return x; +} + void inverse_tables(uchar *tab, int size_tab,uchar *inv_perm_tabs) { @@ -136,19 +148,31 @@ void prga(uchar *sc, int ldata, uchar *r) { -void encrypt_ctr(uchar* seq_in, uchar *seq_out, int len,uchar* RM1,int *Pbox, int *PboxRM, uchar *Sbox1, uchar *Sbox2, int enc) { +template +void encrypt_ctr(uchar* seq_in, uchar *seq_out, int len,uchar* RM1,int *Pbox, int *PboxRM, uchar *Sbox1, uchar *Sbox2, uint myrand,int enc) { + + uchar X[h2]; + uchar fX[h2]; - uchar *X=new uchar[h2]; - uchar *fX=new uchar[h2]; int ind1,ind2; + + + for(int a=0;a>=8; + X[a+1]=Sbox1[mm&255]; + mm>>=8; + X[a+2]=Sbox2[mm&255]; + mm>>=8; + X[a+3]=Sbox1[mm&255]; + } - for(int a=0;a>=8; + X[a+1]=X[a+1]^(mm&255); + mm>>=8; + X[a+2]=X[a+2]^(mm&255); + mm>>=8; + X[a+3]=X[a+3]^(mm&255); } + + + + + for(int a=0;a +void encrypt(uchar* seq_in, uchar *seq_out, int len,uchar* RM1, int *Pbox, int *PboxRM, uchar *Sbox1, uchar *Sbox2, uint myrand, int debug) { -void encrypt(uchar* seq_in, uchar *seq_out, int len,uchar* RM1,int *Pbox, int *PboxRM, uchar *Sbox1, uchar *Sbox2, int debug) { - - - uchar *X=new uchar[h2]; - uchar *fX=new uchar[h2]; - unsigned int *lX=(unsigned int*)X; - unsigned int *lseq_in=(unsigned int*)seq_in; + uchar X[h2]; + uchar fX[h2]; for(int it=0;it>=8; + X[a+1]=seq_in[ind2+a+1]^(mm&255); + mm>>=8; + X[a+2]=seq_in[ind2+a+2]^(mm&255); + mm>>=8; + X[a+3]=seq_in[ind2+a+3]^(mm&255); } - for(int a=0;a +void decrypt(uchar* seq_in, uchar *seq_out, int len, uchar* RM1, int *Pbox, int *PboxRM, uchar *Sbox1, uchar *Sbox2, uchar *Inv_Sbox1, uchar *Inv_Sbox2, uint myrand, int debug) { + + + + uchar fX[h2]; @@ -296,60 +336,85 @@ void decrypt(uchar* seq_in, uchar *seq_out, int len,uchar* RM1,int *Pbox, int *P - for(int a=0;a>=8; + seq_out[ind2+a+1]=Inv_Sbox2[fX[a+1]]^(mm&255); + mm>>=8; + seq_out[ind2+a+2]=Inv_Sbox1[fX[a+2]]^(mm&255); + mm>>=8; + seq_out[ind2+a+3]=Inv_Sbox2[fX[a+3]]^(mm&255); } - + } + } int main(int argc, char** argv) { + int h=32; + int lena=0; + int size_buf=1; + + + for(int i=1; i10000) { - printf("nb tests is not correct\n"); - exit(0); - } - else - printf("nb tests = %d\n\n",nb_test); + printf("lena %d\n",lena); + printf("size_buf %d\n",size_buf); */ + int h2=h*h; + int seed=time(NULL); - cout<(seq, seq2,len,RM1,Pbox,PboxRM,Sbox1,Sbox2,myrand,1); + else + encrypt<4*4>(seq, seq2,len,RM1,Pbox,PboxRM,Sbox1,Sbox2,myrand,0); + + } + break; + case 8: + for(i=0;i(seq, seq2,len,RM1,Pbox,PboxRM,Sbox1,Sbox2,myrand,1); + else + encrypt<8*8>(seq, seq2,len,RM1,Pbox,PboxRM,Sbox1,Sbox2,myrand,0); + + } + break; + case 16: + for(i=0;i(seq, seq2,len,RM1,Pbox,PboxRM,Sbox1,Sbox2,myrand,1); + else + encrypt<16*16>(seq, seq2,len,RM1,Pbox,PboxRM,Sbox1,Sbox2,myrand,0); + + } + break; + case 32: + for(i=0;i(seq, seq2,len,RM1,Pbox,PboxRM,Sbox1,Sbox2,myrand,1); + else + encrypt<32*32>(seq, seq2,len,RM1,Pbox,PboxRM,Sbox1,Sbox2,myrand,0); + + } + break; + case 64: + for(i=0;i(seq, seq2,len,RM1,Pbox,PboxRM,Sbox1,Sbox2,myrand,1); + else + encrypt<64*64>(seq, seq2,len,RM1,Pbox,PboxRM,Sbox1,Sbox2,myrand,0); + + } + break; + case 128: + for(i=0;i(seq, seq2,len,RM1,Pbox,PboxRM,Sbox1,Sbox2,myrand,1); + else + encrypt<128*128>(seq, seq2,len,RM1,Pbox,PboxRM,Sbox1,Sbox2,myrand,0); + + } + break; } - - time+=TimeStop(t); - cout<<"Time encrypt "<(seq2, seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,myrand,0); + else + decrypt<4*4>(seq2,seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0); + } + break; + case 8: + for(i=0;i(seq2, seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,myrand,0); + else + decrypt<8*8>(seq2,seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0); + } + break; + case 16: + for(i=0;i(seq2, seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,myrand,0); + else + decrypt<16*16>(seq2,seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0); + } + break; + case 32: + for(i=0;i(seq2, seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,myrand,0); + else + decrypt<32*32>(seq2,seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0); + } + break; + case 64: + for(i=0;i(seq2, seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,myrand,0); + else + decrypt<64*64>(seq2,seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0); + } + break; + case 128: + for(i=0;i(seq2, seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,myrand,0); + else + decrypt<128*128>(seq2,seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0); + } + break; } - time+=TimeStop(t); - cout<<"Time decrypt "<