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

Private GIT Repository
yes
[Cipher_code.git] / OneRoundIoT / NEW / scprng.cpp
index 5f1a3d54c156ac50cfa43b58f32688656aaf343d..3b2eb6bfee2dc53740f36a4c95c8a7e856230a26 100644 (file)
@@ -2,7 +2,7 @@
 #include <stdlib.h>
 #include <stdint.h>
 #include <sys/time.h>
 #include <stdlib.h>
 #include <stdint.h>
 #include <sys/time.h>
-
+#include<string.h>
 
 typedef unsigned char uchar;
 
 
 typedef unsigned char uchar;
 
@@ -202,11 +202,17 @@ void scprng(uint64_t *plain, uint64_t* cipher, int bufsize, int nb_bloc, uint64_
     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
     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])^Val[Pbox[j]]^Val[Pbox2[j]];
+      Val[j]=xorshift64(Val[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++) {
       cipher[nb*bufsize+j]=Val[j]^plain[nb*bufsize+j];
     
     for(int j=0;j<bufsize;j++) {
       cipher[nb*bufsize+j]=Val[j]^plain[nb*bufsize+j];
@@ -237,19 +243,34 @@ void scprng(uint64_t *plain, uint64_t* cipher, int bufsize, int nb_bloc, uint64_
 }
 
 
 }
 
 
-int main() {
-  printf("%d %d \n",sizeof(__uint64_t),sizeof(ulong));
+int main(int argc, char **argv) {
+//  printf("%d %d \n",sizeof(__uint64_t),sizeof(ulong));
 
 
 
 
+  uint nb_test=1;
+  
   int width;
   int height;
   uchar *data_R, *data_G, *data_B;
   int imsize;
   uchar *buffer;
 
   int width;
   int height;
   uchar *data_R, *data_G, *data_B;
   int imsize;
   uchar *buffer;
 
-  int size_buf=512;
+  int size_buf=128;
+  
+  int lena=0;
+  int h=128;
+  for(int i=1; i<argc; i++){
+    if(strncmp(argv[i],"nb",2)==0)    nb_test = atoi(&(argv[i][2]));    //nb of test         
+    if(strncmp(argv[i],"h",1)==0) h = atoi(&(argv[i][1]));          //size of block
+    if(strncmp(argv[i],"sizebuf",7)==0) size_buf = atoi(&(argv[i][7]));          //SIZE of the buffer
+    if(strncmp(argv[i],"lena",4)==0) lena = atoi(&(argv[i][4]));          //Use Lena or buffer
+  }
+
+
+
+
+
   
   
-  int lena=1;
 
    if(lena==1) {
     load_RGB_pixmap("lena.ppm", &width, &height, &data_R, &data_G, &data_B);
 
    if(lena==1) {
     load_RGB_pixmap("lena.ppm", &width, &height, &data_R, &data_G, &data_B);
@@ -304,24 +325,18 @@ int main() {
   rc4key(DK, Sbox1, 8);
   rc4key(&DK[8], Sbox2, 8);
 
   rc4key(DK, Sbox1, 8);
   rc4key(&DK[8], Sbox2, 8);
 
-  const int bufsize=128;
-  int Pbox[bufsize];
-  int Pbox2[bufsize];
-  rc4keyperm(&DK[16], bufsize, 1, Pbox, 16);
-  rc4keyperm(&DK[32], bufsize, 1, Pbox2, 16);
+  int Pbox[h];
+  int Pbox2[h];
+  rc4keyperm(&DK[16], h, 1, Pbox, 16);
+  rc4keyperm(&DK[32], h, 1, Pbox2, 16);
 
 
 //  uint64_t plain[bufsize];
 //  uint64_t cipher[bufsize];
   
 
 
 //  uint64_t plain[bufsize];
 //  uint64_t cipher[bufsize];
   
-  ulong2 xoro[bufsize];
-
-  ranctx ctx[bufsize];
-  sfcctx sfcd[bufsize];
-
   
   
-  uint64_t Val[bufsize];
-  for(int i=0;i<bufsize;i++) {
+  uint64_t Val[h];
+  for(int i=0;i<h;i++) {
     Val[Pbox[i]]=splitmix64_stateless(i+DK[i&63]);
   }
   
     Val[Pbox[i]]=splitmix64_stateless(i+DK[i&63]);
   }
   
@@ -330,19 +345,19 @@ int main() {
 
 
   
 
 
   
-  uint nb_test=100;
+
   double t=TimeStart();
   
   double t=TimeStart();
   
-  int nb_bloc=imsize/(bufsize*8);  //8 because we use 64bits numbers
+  int nb_bloc=imsize/(h*8);  //8 because we use 64bits numbers
   
 
 
   for(uint iter=0;iter<nb_test;iter++) {
   
 
 
   for(uint iter=0;iter<nb_test;iter++) {
-    scprng(SEQ, SEQ2, bufsize, nb_bloc, Val,Sbox1, Sbox2, Pbox, Pbox2, DK, delta);
+    scprng(SEQ, SEQ2, h, nb_bloc, Val,Sbox1, Sbox2, Pbox, Pbox2, DK, delta);
   }
 
   double time=TimeStop(t);
   }
 
   double time=TimeStop(t);
-  printf("time %e\n",nb_test*nb_bloc*bufsize*8/time);
+  printf("%e  ",nb_test*nb_bloc*h*8/time);
 
   if(lena) {
     for(int i=0;i<oneD;i++) {
 
   if(lena) {
     for(int i=0;i<oneD;i++) {
@@ -358,16 +373,23 @@ int main() {
   rc4key(DK, Sbox1, 8);
   rc4key(&DK[8], Sbox2, 8);
 
   rc4key(DK, Sbox1, 8);
   rc4key(&DK[8], Sbox2, 8);
 
-  rc4keyperm(&DK[16], bufsize, 1, Pbox, 16);
-  rc4keyperm(&DK[32], bufsize, 1, Pbox2, 16);
-  for(int i=0;i<bufsize;i++) {
+  rc4keyperm(&DK[16], h, 1, Pbox, 16);
+  rc4keyperm(&DK[32], h, 1, Pbox2, 16);
+  for(int i=0;i<h;i++) {
     Val[Pbox[i]]=splitmix64_stateless(i+DK[i&63]);
   }
 
     Val[Pbox[i]]=splitmix64_stateless(i+DK[i&63]);
   }
 
+  t=TimeStart();
+
+
   for(uint iter=0;iter<nb_test;iter++) {
   for(uint iter=0;iter<nb_test;iter++) {
-    scprng(SEQ2, SEQ, bufsize, nb_bloc, Val,Sbox1, Sbox2, Pbox, Pbox2, DK, delta);
+    scprng(SEQ2, SEQ, h, nb_bloc, Val,Sbox1, Sbox2, Pbox, Pbox2, DK, delta);
   }
 
   }
 
+
+  time=TimeStop(t);
+  printf("%e\n",nb_test*nb_bloc*h*8/time);
+  
   if(lena) {
     for(int i=0;i<oneD;i++) {
       data_R[i]=seq[i];
   if(lena) {
     for(int i=0;i<oneD;i++) {
       data_R[i]=seq[i];