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

Private GIT Repository
Merge branch 'master' of ssh://info.iut-bm.univ-fcomte.fr/Cipher_code
[Cipher_code.git] / CipherImg / test_sub_perm.cpp
index b985de4c9c13624bb641418d5c34cb1ac78d163e..4e95800bb9041364a4ed5544835454aeb6521db2 100644 (file)
@@ -57,6 +57,29 @@ void rc4key(uchar *key, uchar *sc, int size_DK) {
   }
 }
 
+void rc4keyperm(uchar *key,int len, int rp,int *sc, int size_DK) {
+
+  //sc=1:len;
+
+
+  
+  for (int i=0;i<len;i++) {
+    sc[i]=i;
+  }
+  for (int it = 0; it < rp; it++) {
+    int j0 = 1;
+    for(int i0 = 0; i0<len; i0++) {
+      j0 = (j0 + sc[i0] + sc[j0] + key[i0%size_DK] )% len;
+      int tmp = sc[i0];
+      sc[i0] = sc[j0];
+      sc[j0] = tmp;
+    }
+
+  }
+}
+
+
+
 
 int main (int argc, char** argv)
 {
@@ -86,14 +109,18 @@ int main (int argc, char** argv)
   int width;
   int height;
   int imsize;
+  width=size_buf;
+  height=size_buf;
+
+  imsize=width*height;
   uchar *buffer;
   uchar Sbox1[256];
   rc4key(DK, Sbox1, 8);
+  int *Pbox=new int[imsize];
+  rc4keyperm(&DK[32], imsize, 1, Pbox, 32);
+
+   
 
-  width=size_buf;
-  height=size_buf;
-  imsize=width*height;
   buffer=malloc(imsize*sizeof(uchar));
   for(int i=0;i<imsize;i++) {
     buffer[i]=lrand48();
@@ -103,8 +130,11 @@ int main (int argc, char** argv)
 
   int oneD=width*height;
   uchar *plaintext = malloc(imsize+1000);   //add that for cbc
+  uchar *plaintext2 = malloc(imsize+1000);   //add that for cbc
+  
   for(int i=0;i<oneD;i++) {
     plaintext[i]=buffer[i];
+    plaintext2[i]=buffer[i];
   }
 
   
@@ -128,7 +158,30 @@ int main (int argc, char** argv)
   cout<<"Throughput Sbox \t";
   cout<<(double)imsize*nb_test/time<<"\t";
 
+  t=TimeStart();  
+  for(int i=0;i<nb_test;i++)
+  {
 
+    for(int j=0;j<imsize;j++)
+      plaintext2[j]=plaintext[Pbox[j]];
+    
+  }
+  time=TimeStop(t);
+  cout<<"Throughput Pbox \t";
+  cout<<(double)imsize*nb_test/time<<"\t";
 
+  t=TimeStart();  
+  for(int i=0;i<nb_test;i++)
+  {
+
+    for(int j=0;j<imsize;j++)
+      plaintext2[j]=Sbox1[plaintext[Pbox[j]]];
+    
+  }
+  time=TimeStop(t);
+  cout<<"Throughput Sbox and Pbox \t";
+  cout<<(double)imsize*nb_test/time<<"\t";
+  
+  
   return 0;
 }