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

Private GIT Repository
new scprng
[Cipher_code.git] / OneRoundIoT / NEW / scprng.cpp
index 3b2eb6bfee2dc53740f36a4c95c8a7e856230a26..e0cc4c40fc8ea1ce5305de195674e60d0929974e 100644 (file)
@@ -193,7 +193,7 @@ void rc4keyperm(uchar *key,int len, int rp,int *sc, int size_DK) {
 }
 
 
-void scprng(uint64_t *plain, uint64_t* cipher, int bufsize, int nb_bloc, uint64_t *Val, uchar *Sbox1, uchar *Sbox2, int *Pbox, int *Pbox2, uchar *DK, int delta) {
+void scprng(uint64_t *plain, uint64_t* cipher, int bufsize, int nb_bloc, uint64_t *Val, uchar *Sbox1, uchar *Sbox2, uchar * Sbox3, uchar *Sbox4, int *Pbox, int *Pbox2, int *Pbox3, int *Pbox4, uchar *DK, int delta) {
   int update=0;
 
 
@@ -226,13 +226,28 @@ void scprng(uint64_t *plain, uint64_t* cipher, int bufsize, int nb_bloc, uint64_
       uchar *ptr=(uchar*)Val;
       for(int j=0;j<bufsize*8;j++)
        ptr[j]^=Sbox2[Sbox1[ptr[j]+DK[j&63]]];
-      rc4keyperm(ptr, bufsize, 1, Pbox, 64);
-      //only for xorshift
-      rc4keyperm(&ptr[32], bufsize, 1, Pbox2, 64);
-    
+
+      for(int j=0;j<256;j++)
+       Sbox1[j]=Sbox3[Sbox1[j]];
+
+      for(int j=0;j<256;j++)
+       Sbox2[j]=Sbox4[Sbox2[j]];
+
+      for(int j=0;j<256;j++)
+       Sbox3[j]=Sbox4[Sbox3[j]];
+
+
+      for(int j=0;j<bufsize;j++)
+       Pbox[j]=Pbox3[Pbox[j]];
+
+      for(int j=0;j<bufsize;j++)
+       Pbox2[j]=Pbox4[Pbox2[j]];
+
+      for(int j=0;j<bufsize;j++)
+       Pbox3[j]=Pbox4[Pbox3[j]];
+
+
       
-      rc4key(ptr, Sbox1, 64);
-      rc4key(&ptr[64], Sbox2, 64);
     }
     else
       update++;
@@ -322,13 +337,21 @@ int main(int argc, char **argv) {
 
   uchar Sbox1[256];
   uchar Sbox2[256];
+  uchar Sbox3[256];
+  uchar Sbox4[256];
   rc4key(DK, Sbox1, 8);
   rc4key(&DK[8], Sbox2, 8);
+  rc4key(&DK[16], Sbox3, 8);
+  rc4key(&DK[24], Sbox4, 8);
 
   int Pbox[h];
   int Pbox2[h];
+  int Pbox3[h];
+  int Pbox4[h];
   rc4keyperm(&DK[16], h, 1, Pbox, 16);
   rc4keyperm(&DK[32], h, 1, Pbox2, 16);
+  rc4keyperm(&DK[8], h, 1, Pbox3, 16);
+  rc4keyperm(&DK[48], h, 1, Pbox4, 16);
 
 
 //  uint64_t plain[bufsize];
@@ -353,7 +376,7 @@ int main(int argc, char **argv) {
 
 
   for(uint iter=0;iter<nb_test;iter++) {
-    scprng(SEQ, SEQ2, h, nb_bloc, Val,Sbox1, Sbox2, Pbox, Pbox2, DK, delta);
+    scprng(SEQ, SEQ2, h, nb_bloc, Val,Sbox1, Sbox2, Sbox3, Sbox4, Pbox, Pbox2, Pbox3, Pbox4, DK, delta);
   }
 
   double time=TimeStop(t);
@@ -383,7 +406,7 @@ int main(int argc, char **argv) {
 
 
   for(uint iter=0;iter<nb_test;iter++) {
-    scprng(SEQ2, SEQ, h, nb_bloc, Val,Sbox1, Sbox2, Pbox, Pbox2, DK, delta);
+    scprng(SEQ2, SEQ, h, nb_bloc, Val,Sbox1, Sbox2, Sbox3, Sbox4, Pbox, Pbox2, Pbox3, Pbox4, DK, delta);
   }