]> AND Private Git Repository - Cipher_code.git/commitdiff
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
update
authorRaphaël Couturier <raphael.couturier@univ-fcomte.fr>
Sat, 24 Aug 2019 20:17:31 +0000 (22:17 +0200)
committerRaphaël Couturier <raphael.couturier@univ-fcomte.fr>
Sat, 24 Aug 2019 20:17:31 +0000 (22:17 +0200)
OneRoundIoT/NEW/Makefile
OneRoundIoT/NEW/scprng.cpp

index 1e5720fa57cb40ea2e7278baa86462d1fffa02e2..993c8acc01f664dfc350686f6e96d992874b1a86 100644 (file)
@@ -20,12 +20,18 @@ endif
 scprng.o: scprng.cpp 
        $(CXX) -c -o $@ $< $(CFLAGS)
 
 scprng.o: scprng.cpp 
        $(CXX) -c -o $@ $< $(CFLAGS)
 
+scprng_old.o: scprng_old.cpp 
+       $(CXX) -c -o $@ $< $(CFLAGS)
+
 
 
 scprng: pixmap_io.o scprng.o 
        $(CXX)  -o $@ $^ $(CFLAGS)
 
 
 
 scprng: pixmap_io.o scprng.o 
        $(CXX)  -o $@ $^ $(CFLAGS)
 
+scprng_old: pixmap_io.o scprng_old.o 
+       $(CXX)  -o $@ $^ $(CFLAGS)
+
 
 
 clean:
 
 
 clean:
-       rm -rf *.o scprng
+       rm -rf *.o scprng scprng_old
index e0cc4c40fc8ea1ce5305de195674e60d0929974e..18a9686dc5b5a124e114e1298e9e7ffd3380ef65 100644 (file)
@@ -192,29 +192,35 @@ void rc4keyperm(uchar *key,int len, int rp,int *sc, int size_DK) {
   }
 }
 
   }
 }
 
+#define ROR64(x,r) (((x)>>(r))|((x)<<(64-(r))))
+#define ROL64(x,r) (((x)<<(r))|((x)>>(64-(r))))
+#define R(x,y,k) (x=ROR64(x,18), x+=y, x^=k, y=ROL64(y,13), y^=x)
 
 
-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;
 
 
 
 
-  for(int nb=0;nb<nb_bloc;nb++) {
+void scprng(uint64_t *plain, uint64_t* cipher, int bufsize, int nb_bloc, uint64_t *Val, uint64_t* Val2,uchar *Sbox1, uchar *Sbox2, uchar * Sbox3, uchar *Sbox4, int *Pbox, int *Pbox2, int *Pbox3, int *Pbox4, uchar *DK, int delta) {
+  int update=0;
+
+  
   
   
+  for(int nb=0;nb<nb_bloc;nb++) {
+
+    // #pragma omp parallel   
     for(int j=0;j<bufsize;j++) {
       //Val[j]=splitmix64_stateless(Val[j])^Val[Pbox[j]];
       //Val[j]=xorshift64(Val[j])^Val[Pbox[j]];  //fail
 //      Val[j]=xorshift64(Val[j])^Val[Pbox[j]]^Val[Pbox2[j]];
     for(int j=0;j<bufsize;j++) {
       //Val[j]=splitmix64_stateless(Val[j])^Val[Pbox[j]];
       //Val[j]=xorshift64(Val[j])^Val[Pbox[j]];  //fail
 //      Val[j]=xorshift64(Val[j])^Val[Pbox[j]]^Val[Pbox2[j]];
-      Val[j]=xorshift64(Val[j]);
-      
+
+      Val2[j]=xorshift64(Val[j])^Val[Pbox[j]]^Val[Pbox2[j]];      
       //Val[j]=xoroshiro128plus(&xoro[j])^Val[Pbox[j]];
       //Val[j]=jsf(&ctx[j])^Val[Pbox[j]];  //good
       //Val[j]=sfc(&sfcd[j])^Val[Pbox[j]];  //good
     }
       //Val[j]=xoroshiro128plus(&xoro[j])^Val[Pbox[j]];
       //Val[j]=jsf(&ctx[j])^Val[Pbox[j]];  //good
       //Val[j]=sfc(&sfcd[j])^Val[Pbox[j]];  //good
     }
-    for(int j=0;j<bufsize;j++) {
-      Val[j]=Val[j]^Val[Pbox[j]]^Val[Pbox2[j]];
-    }
+
 
     
     for(int j=0;j<bufsize;j++) {
 
     
     for(int j=0;j<bufsize;j++) {
+      Val[j]=ROR64(Val2[j],Pbox[j]&63);
       cipher[nb*bufsize+j]=Val[j]^plain[nb*bufsize+j];
     }
   
       cipher[nb*bufsize+j]=Val[j]^plain[nb*bufsize+j];
     }
   
@@ -223,10 +229,16 @@ void scprng(uint64_t *plain, uint64_t* cipher, int bufsize, int nb_bloc, uint64_
     
     if(update==delta) {
       update=0;
     
     if(update==delta) {
       update=0;
-      uchar *ptr=(uchar*)Val;
+      /*      uchar *ptr=(uchar*)Val;
       for(int j=0;j<bufsize*8;j++)
        ptr[j]^=Sbox2[Sbox1[ptr[j]+DK[j&63]]];
       for(int j=0;j<bufsize*8;j++)
        ptr[j]^=Sbox2[Sbox1[ptr[j]+DK[j&63]]];
+      */
 
 
+      for(int j=0;j<bufsize;j++) {
+       Val[j]=R(Val[j],Val[Pbox[j]],Val[Pbox2[j]]);
+      }
+
+      /*      
       for(int j=0;j<256;j++)
        Sbox1[j]=Sbox3[Sbox1[j]];
 
       for(int j=0;j<256;j++)
        Sbox1[j]=Sbox3[Sbox1[j]];
 
@@ -235,7 +247,7 @@ void scprng(uint64_t *plain, uint64_t* cipher, int bufsize, int nb_bloc, uint64_
 
       for(int j=0;j<256;j++)
        Sbox3[j]=Sbox4[Sbox3[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++)
        Pbox[j]=Pbox3[Pbox[j]];
@@ -359,6 +371,7 @@ int main(int argc, char **argv) {
   
   
   uint64_t Val[h];
   
   
   uint64_t Val[h];
+  uint64_t Val2[h];
   for(int i=0;i<h;i++) {
     Val[Pbox[i]]=splitmix64_stateless(i+DK[i&63]);
   }
   for(int i=0;i<h;i++) {
     Val[Pbox[i]]=splitmix64_stateless(i+DK[i&63]);
   }
@@ -376,7 +389,7 @@ int main(int argc, char **argv) {
 
 
   for(uint iter=0;iter<nb_test;iter++) {
 
 
   for(uint iter=0;iter<nb_test;iter++) {
-    scprng(SEQ, SEQ2, h, nb_bloc, Val,Sbox1, Sbox2, Sbox3, Sbox4, Pbox, Pbox2, Pbox3, Pbox4, DK, delta);
+    scprng(SEQ, SEQ2, h, nb_bloc, Val,Val2,Sbox1, Sbox2, Sbox3, Sbox4, Pbox, Pbox2, Pbox3, Pbox4, DK, delta);
   }
 
   double time=TimeStop(t);
   }
 
   double time=TimeStop(t);
@@ -392,12 +405,20 @@ int main(int argc, char **argv) {
   }
 
 
   }
 
 
+
   //reinit of parameters
   //reinit of parameters
+
   rc4key(DK, Sbox1, 8);
   rc4key(&DK[8], Sbox2, 8);
   rc4key(DK, Sbox1, 8);
   rc4key(&DK[8], Sbox2, 8);
+  rc4key(&DK[16], Sbox3, 8);
+  rc4key(&DK[24], Sbox4, 8);
 
   rc4keyperm(&DK[16], h, 1, Pbox, 16);
   rc4keyperm(&DK[32], h, 1, Pbox2, 16);
 
   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);
+
+
   for(int i=0;i<h;i++) {
     Val[Pbox[i]]=splitmix64_stateless(i+DK[i&63]);
   }
   for(int i=0;i<h;i++) {
     Val[Pbox[i]]=splitmix64_stateless(i+DK[i&63]);
   }
@@ -406,7 +427,7 @@ int main(int argc, char **argv) {
 
 
   for(uint iter=0;iter<nb_test;iter++) {
 
 
   for(uint iter=0;iter<nb_test;iter++) {
-    scprng(SEQ2, SEQ, h, nb_bloc, Val,Sbox1, Sbox2, Sbox3, Sbox4, Pbox, Pbox2, Pbox3, Pbox4, DK, delta);
+    scprng(SEQ2, SEQ, h, nb_bloc, Val,Val2,Sbox1, Sbox2, Sbox3, Sbox4, Pbox, Pbox2, Pbox3, Pbox4, DK, delta);
   }
 
 
   }