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

Private GIT Repository
up
[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 void rc4keyperm(uchar *key,int len, int rp,int *sc, int size_DK) {
61
62   //sc=1:len;
63
64
65   
66   for (int i=0;i<len;i++) {
67     sc[i]=i;
68   }
69   for (int it = 0; it < rp; it++) {
70     int j0 = 1;
71     for(int i0 = 0; i0<len; i0++) {
72       j0 = (j0 + sc[i0] + sc[j0] + key[i0%size_DK] )% len;
73       int tmp = sc[i0];
74       sc[i0] = sc[j0];
75       sc[j0] = tmp;
76     }
77
78   }
79 }
80
81
82
83
84 int main (int argc, char** argv)
85 {
86   /* Set up the key and iv. Do I need to say to not hard code these in a
87    * real application? :-)
88    */
89
90   int size_buf=1;
91   int lena=0;
92
93    
94   for(int i=1; i<argc; i++){
95     if(strncmp(argv[i],"nb",2)==0)    nb_test = atoi(&(argv[i][2]));    //nb of test         
96     if(strncmp(argv[i],"sizebuf",7)==0) size_buf = atoi(&(argv[i][7]));          //SIZE of the buffer
97   }
98
99
100
101  int size = 64;
102   uchar DK[size];
103  for(int i=0;i<size;i++) {
104     DK[i]=lrand48()&0xFF;
105   }
106   
107  
108
109   int width;
110   int height;
111   int imsize;
112   width=size_buf;
113   height=size_buf;
114
115   imsize=width*height;
116   uchar *buffer;
117   uchar Sbox1[256];
118   rc4key(DK, Sbox1, 8);
119   int *Pbox=new int[imsize];
120   rc4keyperm(&DK[32], imsize, 1, Pbox, 32);
121
122    
123
124   buffer=malloc(imsize*sizeof(uchar));
125   for(int i=0;i<imsize;i++) {
126     buffer[i]=lrand48();
127   }
128   
129
130
131   int oneD=width*height;
132   uchar *plaintext = malloc(imsize+1000);   //add that for cbc
133   uchar *plaintext2 = malloc(imsize+1000);   //add that for cbc
134   
135   for(int i=0;i<oneD;i++) {
136     plaintext[i]=buffer[i];
137     plaintext2[i]=buffer[i];
138   }
139
140   
141
142   uchar *ciphertext = malloc(imsize+1000); //add that for cbc
143
144   /* Buffer for the decrypted text */
145   uchar *decryptedtext = malloc(imsize+1000); //add that for cbc
146
147   int decryptedtext_len, ciphertext_len;
148
149   double t=TimeStart();  
150   for(int i=0;i<nb_test;i++)
151   {
152
153     for(int j=0;j<imsize;j++)
154       plaintext[j]=Sbox1[plaintext[j]];
155     
156   }
157   double time=TimeStop(t);
158   cout<<"Throughput Sbox \t";
159   cout<<(double)imsize*nb_test/time<<"\t";
160
161   t=TimeStart();  
162   for(int i=0;i<nb_test;i++)
163   {
164
165     for(int j=0;j<imsize;j++)
166       plaintext2[j]=plaintext[Pbox[j]];
167     
168   }
169   time=TimeStop(t);
170   cout<<"Throughput Pbox \t";
171   cout<<(double)imsize*nb_test/time<<"\t";
172
173   t=TimeStart();  
174   for(int i=0;i<nb_test;i++)
175   {
176
177     for(int j=0;j<imsize;j++)
178       plaintext2[j]=Sbox1[plaintext[Pbox[j]]];
179     
180   }
181   time=TimeStop(t);
182   cout<<"Throughput Sbox and Pbox \t";
183   cout<<(double)imsize*nb_test/time<<"\t";
184   
185   
186   return 0;
187 }