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

Private GIT Repository
b985de4c9c13624bb641418d5c34cb1ac78d163e
[Cipher_code.git] / CipherImg / test_sub_perm.cpp
1 //g++     test_sub_perm.cpp   -o     test_sub_perm -O3   -fpermissive
2
3
4 //    ./test_sub_perm  sizebuf512 nb1000
5
6 #include <string.h>
7 #include <sys/time.h>
8 #include<stdlib.h>
9 #include<stdio.h>
10 #include <iostream>
11
12
13 using namespace std;
14
15 typedef unsigned char   uchar;
16
17
18
19 int nb_test=1;
20 int ctr=0;
21
22 double time_encrypt=0;
23 double time_decrypt=0;
24
25 double TimeStart()
26 {
27   struct timeval tstart;
28   gettimeofday(&tstart,0);
29   return( (double) (tstart.tv_sec + tstart.tv_usec*1e-6) );
30 }
31
32 double TimeStop(double t)
33 {
34   struct timeval tend;
35
36   gettimeofday(&tend,0);
37   t = (double) (tend.tv_sec + tend.tv_usec*1e-6) - t;
38   return (t);
39 }
40
41
42
43
44 void rc4key(uchar *key, uchar *sc, int size_DK) {
45
46   for(int i=0;i<256;i++) {
47     sc[i]=i;
48   }
49
50
51   uchar j0 = 0;
52   for(int i0=0; i0<256; i0++) {
53     j0 = (j0 + sc[i0] + key[i0%size_DK] )&0xFF;
54     uchar tmp = sc[i0];
55     sc[i0] = sc[j0 ];
56     sc[j0] = tmp;
57   }
58 }
59
60
61 int main (int argc, char** argv)
62 {
63   /* Set up the key and iv. Do I need to say to not hard code these in a
64    * real application? :-)
65    */
66
67   int size_buf=1;
68   int lena=0;
69
70    
71   for(int i=1; i<argc; i++){
72     if(strncmp(argv[i],"nb",2)==0)    nb_test = atoi(&(argv[i][2]));    //nb of test         
73     if(strncmp(argv[i],"sizebuf",7)==0) size_buf = atoi(&(argv[i][7]));          //SIZE of the buffer
74   }
75
76
77
78  int size = 64;
79   uchar DK[size];
80  for(int i=0;i<size;i++) {
81     DK[i]=lrand48()&0xFF;
82   }
83   
84  
85
86   int width;
87   int height;
88   int imsize;
89   uchar *buffer;
90   uchar Sbox1[256];
91   rc4key(DK, Sbox1, 8);
92
93  
94   width=size_buf;
95   height=size_buf;
96   imsize=width*height;
97   buffer=malloc(imsize*sizeof(uchar));
98   for(int i=0;i<imsize;i++) {
99     buffer[i]=lrand48();
100   }
101   
102
103
104   int oneD=width*height;
105   uchar *plaintext = malloc(imsize+1000);   //add that for cbc
106   for(int i=0;i<oneD;i++) {
107     plaintext[i]=buffer[i];
108   }
109
110   
111
112   uchar *ciphertext = malloc(imsize+1000); //add that for cbc
113
114   /* Buffer for the decrypted text */
115   uchar *decryptedtext = malloc(imsize+1000); //add that for cbc
116
117   int decryptedtext_len, ciphertext_len;
118
119   double t=TimeStart();  
120   for(int i=0;i<nb_test;i++)
121   {
122
123     for(int j=0;j<imsize;j++)
124       plaintext[j]=Sbox1[plaintext[j]];
125     
126   }
127   double time=TimeStop(t);
128   cout<<"Throughput Sbox \t";
129   cout<<(double)imsize*nb_test/time<<"\t";
130
131
132
133   return 0;
134 }