]> AND Private Git Repository - Cipher_code.git/blobdiff - OneRoundIoT/OneRound/one_round_new.cpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
new
[Cipher_code.git] / OneRoundIoT / OneRound / one_round_new.cpp
index 24702f25998356e2a10e4a5da95718236b69a9f3..76fb91c57cda4621aabc11585511bb38910e0245 100644 (file)
@@ -123,7 +123,7 @@ void prga(uchar *sc, int ldata, uchar *r) {
   uchar j0=0;
 
   for (int it=0; it<ldata; it++) {
-    i0 = ((i0+1)%255);
+    i0 = ((i0+1)&0xFE); //%255);
     j0 = (j0 + sc[i0])&0xFF;
     uchar tmp = sc[i0];
     sc[i0] = sc[j0];
@@ -147,8 +147,11 @@ void encrypt_ctr(uchar* seq_in, uchar *seq_out, int len,uchar* RM1,int *Pbox, in
   int ind1,ind2;
 
   
-   for(int a=0;a<h2;a++) {
+   for(int a=0;a<h2;a+=4) {
      X[a]=Sbox1[a&0xFF];           //Warning according to the size of h2, we can be outsize of Sbox1[a]
+     X[a+1]=Sbox1[(a+1)&0xFF];
+     X[a+2]=Sbox1[(a+2)&0xFF];
+     X[a+3]=Sbox1[(a+3)&0xFF];           
    }
 
    
@@ -163,49 +166,41 @@ void encrypt_ctr(uchar* seq_in, uchar *seq_out, int len,uchar* RM1,int *Pbox, in
     }
        
 
-
-    /*for(int a=0;a<h2;a+=4){
-      fX[a]=RM1[X[a]];
-      fX[a+1]=RM1[X[a+1]];
-      fX[a+2]=RM1[X[a+2]];
-      fX[a+3]=RM1[X[a+3]];
-      }*/
-
-    for(int a=0;a<h2;a+=4){
-      fX[a]=X[a];
-      fX[a+1]=X[a+1];
-      fX[a+2]=X[a+2];
-      fX[a+3]=X[a+3];
+    for(int a=0;a<h2;a+=4) {
+      X[a]=Sbox1[X[a]];
+      X[a+1]=Sbox1[X[a+1]];
+      X[a+2]=Sbox1[X[a+2]];
+      X[a+3]=Sbox1[X[a+3]];
     }
+   
 
-    /*   if(it<513) {
-      for(int a=0;a<h2;a++)
-       printf("%d ",fX[a]);
-      printf("\n");
-      }*/
     
-    *(int*)&fX[0]^=it;
+//    *(int*)&fX[0]^=it;
 
-    /* if(it<513) {
-      for(int a=0;a<h2;a++)
-       printf("%d ",fX[a]);
-      printf("\n");
-      }*/
 
+/*    for(int a=0;a<h2;a+=16) {
+      *(int*)&fX[a]^=it;
+      *(int*)&fX[a+4]^=it;
+      *(int*)&fX[a+8]^=it;
+      *(int*)&fX[a+12]^=it;
+    }  
+*/
+
+    
     for(int a=0;a<h2;a+=4) {
-      fX[a]=fX[a]^RM1[a];
-      fX[a+1]=fX[a+1]^RM1[a+1];
-      fX[a+2]=fX[a+2]^RM1[a+2];
-      fX[a+3]=fX[a+3]^RM1[a+3];
+      fX[a]=X[a]^RM1[a];
+      fX[a+1]=X[a+1]^RM1[a+1];
+      fX[a+2]=X[a+2]^RM1[a+2];
+      fX[a+3]=X[a+3]^RM1[a+3];
     }
 
  
-    for(int a=0;a<h2;a+=4) {
+    /*   for(int a=0;a<h2;a+=4) {
       fX[a]=Sbox2[fX[a]];
       fX[a+1]=Sbox2[fX[a+1]];
       fX[a+2]=Sbox2[fX[a+2]];
       fX[a+3]=Sbox2[fX[a+3]];
-    }
+      }*/
     
      for(int a=0;a<h2;a+=4) {
       fX[a]=fX[a]^seq_in[ind2+a];
@@ -304,7 +299,7 @@ void encrypt(uchar* seq_in, uchar *seq_out, int len,uchar* RM1,int *Pbox, int *P
 
 
 template<int h2>
-void decrypt(uchar* seq_in, uchar *seq_out, int len,uchar* RM1,int *Pbox, int *PboxRM, uchar *Sbox1, uchar *Sbox2, int debug) {
+void decrypt(uchar* seq_in, uchar *seq_out, int len,uchar* RM1,int *Pbox, int *PboxRM, uchar *Inv_Sbox1, uchar *Inv_Sbox2, int debug) {
 
 
   /*uchar *fX=new uchar[h2];
@@ -312,16 +307,6 @@ void decrypt(uchar* seq_in, uchar *seq_out, int len,uchar* RM1,int *Pbox, int *P
   uchar *Inv_Sbox2=new uchar[256];
   */
   uchar fX[h2];
-  uchar Inv_Sbox1[256];
-  uchar Inv_Sbox2[256];
-
-
-  
-  inverse_tables(Sbox1,256,Inv_Sbox1);
-
-  inverse_tables(Sbox2,256,Inv_Sbox2);
-  
 
 
 
@@ -391,18 +376,18 @@ 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("ctr %d\n",ctr);
   printf("h %d\n",h);
   printf("lena %d\n",lena);
   printf("size_buf %d\n",size_buf);
-
+*/
   int h2=h*h;
   
 
       
   int seed=time(NULL);
-  cout<<seed<<endl;
+//  cout<<seed<<endl;
   srand48(seed);
 
   uchar Secretkey[key_size];
@@ -483,7 +468,7 @@ int main(int argc, char** argv) {
   }
 
   
-  cout<<"hash "<<endl;
+//  cout<<"hash "<<endl;
   for (int i = 0; i < 64 ; i++) {
 //    DK[i]=digest[i];
     DK[i]=mix[i];
@@ -491,60 +476,64 @@ int main(int argc, char** argv) {
 
 
 
-  
+  int *Pbox=new int[len];
+  int *PboxRM=new int[h2];
   uchar Sbox1[256];
-  rc4key(DK, Sbox1, 16);
+  uchar Sbox2[256];  
+  uchar Inv_Sbox1[256];
+  uchar Inv_Sbox2[256];
+  uchar sc[256];  
+  uchar RM1[h2];
+  uchar RM2[h2];
 
-  uchar Sbox2[256];
-  rc4key(&DK[16], Sbox2, 16);
 
 
+
+  double time=0;
+  double t=TimeStart();  
+  rc4key(DK, Sbox1, 8);
+  
+  
+  rc4key(&DK[8], Sbox2, 8);
+  
+  rc4key(&DK[16], sc, 16);
+  
   
-  uchar sc[256];
-  rc4key(&DK[32], sc, 16);
+  prga(sc, h2, RM1);
   
-  uchar outd[2*(h * h)];
-  prga(sc, 2*(h * h), outd);
+  
+  rc4keyperm(&DK[32], len, rp, Pbox, 16);
+  
+  
+  rc4keyperm(&DK[48], h2, rp, PboxRM, 16);
+  
+  time+=TimeStop(t);
+  cout<<"Time initializaton "<<time<<endl;
+
 
 
-  uchar RM1[h*h];
-  uchar RM2[h*h];
-  for(int i=0;i<h2;i++){
-    RM1[i]=outd[i];
-    RM2[i]=outd[i+h2];
-  }
-             
 
 
-  
-    
-  
-  uchar keyp[16];
-  for (int i = 48; i < 64; i++)
-    keyp[i-48] = DK[i];
 
-//  cout<<len<<endl;
-  int *Pbox=new int[len];
-  int *PboxRM=new int[h2];
 
-  rc4keyperm(keyp, len, rp, Pbox, 16);
 
-  printf("len %d\n",len);
-  for(int i=0;i<len;i++) {
-//    printf("%d \n",Pbox[i]);
-  }
-  
-  rc4keyperm(RM2, h2, rp, PboxRM, h2);
 
+
+  
   for(int i=0;i<h2;i++){
     RM2[i]=RM1[i];
   }
-  int *Inv_Pbox=new int[len];
-  inverse_tables_int(Pbox,len,Inv_Pbox);
+
   
- double time=0;
-  double t=TimeStart();
+  inverse_tables(Sbox1,256,Inv_Sbox1);
+  inverse_tables(Sbox2,256,Inv_Sbox2);
+
+
+
+
+  
+  time=0;
+  t=TimeStart();
 
   int i;
   switch(h) {
@@ -596,6 +585,16 @@ int main(int argc, char** argv) {
       else
        encrypt<64*64>(seq, seq2,len,RM1,Pbox,PboxRM,Sbox1,Sbox2,0);
       
+    }
+    break;
+  case 128: 
+    for(i=0;i<nb_test;i++)
+    {
+      if(ctr)
+       encrypt_ctr<128*128>(seq, seq2,len,RM1,Pbox,PboxRM,Sbox1,Sbox2,1);
+      else
+       encrypt<128*128>(seq, seq2,len,RM1,Pbox,PboxRM,Sbox1,Sbox2,0);
+      
     }
     break;
   }
@@ -621,7 +620,7 @@ int main(int argc, char** argv) {
       if(ctr)
        encrypt_ctr<4*4>(seq2, seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
       else
-       decrypt<4*4>(seq2,seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
+       decrypt<4*4>(seq2,seq,len,RM2,Pbox,PboxRM,Inv_Sbox1,Inv_Sbox2,0);
     }
     break;
   case 8:
@@ -629,7 +628,7 @@ int main(int argc, char** argv) {
       if(ctr)
        encrypt_ctr<8*8>(seq2, seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
       else
-       decrypt<8*8>(seq2,seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
+       decrypt<8*8>(seq2,seq,len,RM2,Pbox,PboxRM,Inv_Sbox1,Inv_Sbox2,0);
     }
     break;
   case 16:
@@ -637,7 +636,7 @@ int main(int argc, char** argv) {
       if(ctr)
        encrypt_ctr<16*16>(seq2, seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
       else
-       decrypt<16*16>(seq2,seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
+       decrypt<16*16>(seq2,seq,len,RM2,Pbox,PboxRM,Inv_Sbox1,Inv_Sbox2,0);
     }
     break;
   case 32:
@@ -645,7 +644,7 @@ int main(int argc, char** argv) {
       if(ctr)
        encrypt_ctr<32*32>(seq2, seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
       else
-       decrypt<32*32>(seq2,seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
+       decrypt<32*32>(seq2,seq,len,RM2,Pbox,PboxRM,Inv_Sbox1,Inv_Sbox2,0);
     }
     break;
   case 64:
@@ -653,7 +652,15 @@ int main(int argc, char** argv) {
       if(ctr)
        encrypt_ctr<64*64>(seq2, seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
       else
-       decrypt<64*64>(seq2,seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
+       decrypt<64*64>(seq2,seq,len,RM2,Pbox,PboxRM,Inv_Sbox1,Inv_Sbox2,0);
+    }
+    break;
+  case 128:
+    for(i=0;i<nb_test;i++) {
+      if(ctr)
+       encrypt_ctr<128*128>(seq2, seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
+      else
+       decrypt<128*128>(seq2,seq,len,RM2,Pbox,PboxRM,Inv_Sbox1,Inv_Sbox2,0);
     }
     break;
   }
@@ -677,7 +684,7 @@ int main(int argc, char** argv) {
        equal=false;
       }
     }
-    cout<<"RESULT CORRECT: "<<equal<<endl;
+//    cout<<"RESULT CORRECT: "<<equal<<endl;
   }