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

Private GIT Repository
SCPRNG
[Cipher_code.git] / OneRoundIoT / OneRound / one_round_new.cpp
index f0cafd695d5ed9d78fa3bbe9f604d6ef1d62a704..b7940af9adf2c6055244347166a0bf79af87e407 100644 (file)
@@ -135,7 +135,7 @@ void prga(uchar *sc, int ldata, uchar *r) {
   uchar j0=0;
 
   for (int it=0; it<ldata; it++) {
-    i0 = ((i0+1)&0xFE); //%255);
+    i0 = ((i0+1)%255);
     j0 = (j0 + sc[i0])&0xFF;
     uchar tmp = sc[i0];
     sc[i0] = sc[j0];
@@ -160,10 +160,16 @@ void encrypt_ctr(uchar* seq_in, uchar *seq_out, int len,uchar* RM1,int *Pbox, in
   
 
   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];
+    myrand=xorshift32(myrand);
+    uint mm=myrand;
+    
+    X[a]=Sbox2[mm&255];
+    mm>>=8;
+    X[a+1]=Sbox1[mm&255];
+    mm>>=8;
+    X[a+2]=Sbox2[mm&255];
+    mm>>=8;
+    X[a+3]=Sbox1[mm&255];
   }
 
 
@@ -198,9 +204,9 @@ void encrypt_ctr(uchar* seq_in, uchar *seq_out, int len,uchar* RM1,int *Pbox, in
     
     for(int a=0;a<h2;a+=4) {
       X[a]=Sbox1[X[a]];
-      X[a+1]=Sbox1[X[a+1]];
+      X[a+1]=Sbox2[X[a+1]];
       X[a+2]=Sbox1[X[a+2]];
-      X[a+3]=Sbox1[X[a+3]];
+      X[a+3]=Sbox2[X[a+3]];
     }
 
     for(int a=0;a<h2;a+=4) {
@@ -267,9 +273,9 @@ void encrypt(uchar* seq_in, uchar *seq_out, int len,uchar* RM1, int *Pbox, int *
 
     for(int a=0;a<h2;a+=4){
       fX[a]=Sbox1[X[a]];
-      fX[a+1]=Sbox1[X[a+1]];
+      fX[a+1]=Sbox2[X[a+1]];
       fX[a+2]=Sbox1[X[a+2]];
-      fX[a+3]=Sbox1[X[a+3]];
+      fX[a+3]=Sbox2[X[a+3]];
     }
 
 
@@ -283,16 +289,16 @@ void encrypt(uchar* seq_in, uchar *seq_out, int len,uchar* RM1, int *Pbox, int *
 
     for(int a=0;a<h2;a+=4) {
       seq_out[ind1+a]=Sbox2[fX[a]];
-      seq_out[ind1+a+1]=Sbox2[fX[a+1]];
+      seq_out[ind1+a+1]=Sbox1[fX[a+1]];
       seq_out[ind1+a+2]=Sbox2[fX[a+2]];
-      seq_out[ind1+a+3]=Sbox2[fX[a+3]];
+      seq_out[ind1+a+3]=Sbox1[fX[a+3]];
     }
 
     for(int a=0;a<h2;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]];
+      RM1[a]=Sbox1[RM1[PboxRM[a]]];
+      RM1[a+1]=Sbox2[RM1[PboxRM[a+1]]];
+      RM1[a+2]=Sbox1[RM1[PboxRM[a+2]]];
+      RM1[a+3]=Sbox2[RM1[PboxRM[a+3]]];
 
     }
 
@@ -314,7 +320,7 @@ void encrypt(uchar* seq_in, uchar *seq_out, int len,uchar* RM1, int *Pbox, int *
 
 
 template<int h2>
-void decrypt(uchar* seq_in, uchar *seq_out, int len, uchar* RM1, int *Pbox, int *PboxRM, uchar *Inv_Sbox1, uchar *Inv_Sbox2,  uint myrand, int debug) {
+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) {
 
 
 
@@ -339,9 +345,9 @@ void decrypt(uchar* seq_in, uchar *seq_out, int len, uchar* RM1, int *Pbox, int
     }
     for(int a=0;a<h2;a+=4) {
       fX[a]=Inv_Sbox2[fX[a]];
-      fX[a+1]=Inv_Sbox2[fX[a+1]];
+      fX[a+1]=Inv_Sbox1[fX[a+1]];
       fX[a+2]=Inv_Sbox2[fX[a+2]];
-      fX[a+3]=Inv_Sbox2[fX[a+3]];
+      fX[a+3]=Inv_Sbox1[fX[a+3]];
     }
     for(int a=0;a<h2;a+=4) {
       fX[a]=fX[a]^RM1[a];
@@ -350,24 +356,26 @@ void decrypt(uchar* seq_in, uchar *seq_out, int len, uchar* RM1, int *Pbox, int
       fX[a+3]=fX[a+3]^RM1[a+3];
     }
 
+
     for(int a=0;a<h2;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]];
+      RM1[a]=Sbox1[RM1[PboxRM[a]]];
+      RM1[a+1]=Sbox2[RM1[PboxRM[a+1]]];
+      RM1[a+2]=Sbox1[RM1[PboxRM[a+2]]];
+      RM1[a+3]=Sbox2[RM1[PboxRM[a+3]]];
     }
 
+
     for(int a=0;a<h2;a+=4) {
       myrand=xorshift32(myrand);
 
       uint mm=myrand;
       seq_out[ind2+a]=Inv_Sbox1[fX[a]]^(mm&255);
       mm>>=8;
-      seq_out[ind2+a+1]=Inv_Sbox1[fX[a+1]]^(mm&255);
+      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_Sbox1[fX[a+3]]^(mm&255);
+      seq_out[ind2+a+3]=Inv_Sbox2[fX[a+3]]^(mm&255);
     }
 
 
@@ -666,7 +674,7 @@ int main(int argc, char** argv) {
       if(ctr)
        encrypt_ctr<4*4>(seq2, seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,myrand,0);
       else
-       decrypt<4*4>(seq2,seq,len,RM1_copy,Pbox,PboxRM,Inv_Sbox1,Inv_Sbox2,myrand,0);
+       decrypt<4*4>(seq2,seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0);
     }
     break;
   case 8:
@@ -674,7 +682,7 @@ int main(int argc, char** argv) {
       if(ctr)
        encrypt_ctr<8*8>(seq2, seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,myrand,0);
       else
-       decrypt<8*8>(seq2,seq,len,RM1_copy,Pbox,PboxRM,Inv_Sbox1,Inv_Sbox2,myrand,0);
+       decrypt<8*8>(seq2,seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0);
     }
     break;
   case 16:
@@ -682,7 +690,7 @@ int main(int argc, char** argv) {
       if(ctr)
        encrypt_ctr<16*16>(seq2, seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,myrand,0);
       else
-       decrypt<16*16>(seq2,seq,len,RM1_copy,Pbox,PboxRM,Inv_Sbox1,Inv_Sbox2,myrand,0);
+       decrypt<16*16>(seq2,seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0);
     }
     break;
   case 32:
@@ -690,7 +698,7 @@ int main(int argc, char** argv) {
       if(ctr)
        encrypt_ctr<32*32>(seq2, seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,myrand,0);
       else
-       decrypt<32*32>(seq2,seq,len,RM1_copy,Pbox,PboxRM,Inv_Sbox1,Inv_Sbox2,myrand,0);
+       decrypt<32*32>(seq2,seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0);
     }
     break;
   case 64:
@@ -698,7 +706,7 @@ int main(int argc, char** argv) {
       if(ctr)
        encrypt_ctr<64*64>(seq2, seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,myrand,0);
       else
-       decrypt<64*64>(seq2,seq,len,RM1_copy,Pbox,PboxRM,Inv_Sbox1,Inv_Sbox2,myrand,0);
+       decrypt<64*64>(seq2,seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0);
     }
     break;
   case 128:
@@ -706,7 +714,7 @@ int main(int argc, char** argv) {
       if(ctr)
        encrypt_ctr<128*128>(seq2, seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,myrand,0);
       else
-       decrypt<128*128>(seq2,seq,len,RM1_copy,Pbox,PboxRM,Inv_Sbox1,Inv_Sbox2,myrand,0);
+       decrypt<128*128>(seq2,seq,len,RM1_copy,Pbox,PboxRM,Sbox1,Sbox2,Inv_Sbox1,Inv_Sbox2,myrand,0);
     }
     break;
   }