uchar j0=0;
for (int it=0; it<ldata; it++) {
- i0 = ((i0+1)%255);
+ i0 = ((i0+1)&0xFE); //%255);
j0 = (j0 + sc[i0])&0xFF;
uchar tmp = sc[i0];
sc[i0] = sc[j0];
void encrypt_ctr(uchar* seq_in, uchar *seq_out, int len,uchar* RM1,int *Pbox, int *PboxRM, uchar *Sbox1, uchar *Sbox2, int enc) {
- uchar *X=new uchar[h2];
- uchar *fX=new uchar[h2];
+// uchar *X=new uchar[h2];
+// uchar *fX=new uchar[h2];
+ uchar X[h2];
+ uchar fX[h2];
+
int ind1,ind2;
printf("\n");
}*/
- *(int*)&fX[0]=it;
+ *(int*)&fX[0]^=it;
/* if(it<513) {
for(int a=0;a<h2;a++)
void encrypt(uchar* seq_in, uchar *seq_out, int len,uchar* RM1,int *Pbox, int *PboxRM, uchar *Sbox1, uchar *Sbox2, int debug) {
- uchar *X=new uchar[h2];
+/* uchar *X=new uchar[h2];
uchar *fX=new uchar[h2];
unsigned int *lX=(unsigned int*)X;
unsigned int *lseq_in=(unsigned int*)seq_in;
-
+*/
+ uchar X[h2];
+ uchar fX[h2];
+// unsigned int *lX=(unsigned int*)X;
+// unsigned int *lseq_in=(unsigned int*)seq_in;
+
for(int it=0;it<len;it++) {
int ind1=it*h2;
template<int h2>
-void decrypt(uchar* seq_in, uchar *seq_out, int len,uchar* RM1,int *Pbox, int *PboxRM, uchar *Sbox1, uchar *Sbox2, int debug) {
-
-
- uchar *fX=new uchar[h2];
+void decrypt(uchar* seq_in, uchar *seq_out, int len,uchar* RM1,int *Pbox, int *PboxRM, uchar *Inv_Sbox1, uchar *Inv_Sbox2, int debug) {
+ /*uchar *fX=new uchar[h2];
uchar *Inv_Sbox1=new uchar[256];
- inverse_tables(Sbox1,256,Inv_Sbox1);
-
uchar *Inv_Sbox2=new uchar[256];
- inverse_tables(Sbox2,256,Inv_Sbox2);
-
+ */
+ uchar fX[h2];
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],"ctr",3)==0) ctr = atoi(&(argv[i][3])); //CTR ? 1 otherwise CBC like
- if(strncmp(argv[i],"h",1)==0) h = atoi(&(argv[i][1])); //CTR ? 1 otherwise CBC like
+ 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
}
- printf("nb times %d\n",nb_test);
+/* printf("nb times %d\n",nb_test);
printf("ctr %d\n",ctr);
printf("h %d\n",h);
printf("lena %d\n",lena);
printf("size_buf %d\n",size_buf);
-
+*/
int h2=h*h;
int seed=time(NULL);
- cout<<seed<<endl;
+// cout<<seed<<endl;
srand48(seed);
uchar Secretkey[key_size];
}
- cout<<"hash "<<endl;
+// cout<<"hash "<<endl;
for (int i = 0; i < 64 ; i++) {
// DK[i]=digest[i];
DK[i]=mix[i];
uchar Sbox2[256];
rc4key(&DK[16], Sbox2, 16);
+ uchar Inv_Sbox1[256];
+ uchar Inv_Sbox2[256];
+ inverse_tables(Sbox1,256,Inv_Sbox1);
+ inverse_tables(Sbox2,256,Inv_Sbox2);
+
rc4keyperm(keyp, len, rp, Pbox, 16);
- printf("len %d\n",len);
+// printf("len %d\n",len);
for(int i=0;i<len;i++) {
// printf("%d \n",Pbox[i]);
}
if(ctr)
encrypt_ctr<4*4>(seq2, seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
else
- decrypt<4*4>(seq2,seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
+ decrypt<4*4>(seq2,seq,len,RM2,Pbox,PboxRM,Inv_Sbox1,Inv_Sbox2,0);
}
break;
case 8:
if(ctr)
encrypt_ctr<8*8>(seq2, seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
else
- decrypt<8*8>(seq2,seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
+ decrypt<8*8>(seq2,seq,len,RM2,Pbox,PboxRM,Inv_Sbox1,Inv_Sbox2,0);
}
break;
case 16:
if(ctr)
encrypt_ctr<16*16>(seq2, seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
else
- decrypt<16*16>(seq2,seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
+ decrypt<16*16>(seq2,seq,len,RM2,Pbox,PboxRM,Inv_Sbox1,Inv_Sbox2,0);
}
break;
case 32:
if(ctr)
encrypt_ctr<32*32>(seq2, seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
else
- decrypt<32*32>(seq2,seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
+ decrypt<32*32>(seq2,seq,len,RM2,Pbox,PboxRM,Inv_Sbox1,Inv_Sbox2,0);
}
break;
case 64:
if(ctr)
encrypt_ctr<64*64>(seq2, seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
else
- decrypt<64*64>(seq2,seq,len,RM2,Pbox,PboxRM,Sbox1,Sbox2,0);
+ decrypt<64*64>(seq2,seq,len,RM2,Pbox,PboxRM,Inv_Sbox1,Inv_Sbox2,0);
}
break;
}
else {
bool equal=true;
for(int i=0;i<imsize;i++) {
- if(buffer[i]!=seq[i])
+ //cout<<(int)buffer[i]<<endl;
+ if(buffer[i]!=seq[i]) {
equal=false;
+ }
}
- cout<<"RESULT CORRECT: "<<equal<<endl;
+// cout<<"RESULT CORRECT: "<<equal<<endl;
}