Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
new
[Cipher_code.git] / OneRoundIoT / OneRound / rc4_hash.cpp
index d088af7d744ebd13f69148e1fb2ee128bc31de18..0084c37178019ff751f98b0a2242032eb5da1b8b 100644 (file)
@@ -121,17 +121,17 @@ void rc4keyperm(uchar *key,int len, int rp,int *sc, int size_DK) {
   }
 }
 
-void prga(uchar *sc, int ldata, uchar *r) {
+void prga(uchar *sc, uchar *X, int ldata, uchar *r, int h) {
   uchar i0=0;
   uchar j0=0;
 
   for (int it=0; it<ldata; it++) {
-    i0 = (i0+1);
+    i0 = X[(i0+1)&(h-1)];
     j0 = (j0 + sc[i0]);
     uchar tmp = sc[i0];
     sc[i0] = sc[j0];
     sc[j0] = tmp;
-    r[it]=sc[(sc[i0]+sc[j0])&0xFF];
+    r[it]=sc[i0];//sc[(sc[i0]+sc[j0])&255];
   }
 }
 
@@ -169,7 +169,7 @@ void hash_DSD_BIN(uchar* seq_in, uchar* RM1,int len, uchar *S, int h) {
      //cout<<endl;
      
 
-     prga(S, h, RM1);
+     prga(S, X,h, RM1,h);
      /*
      for(int i=0;i<h;i++) {
          cout<<(int)RM1[i]<<" ";
@@ -178,6 +178,8 @@ void hash_DSD_BIN(uchar* seq_in, uchar* RM1,int len, uchar *S, int h) {
      */
      //     if(it==40)
      //  exit(0);
+
+
      for(int a=0;a<h;a+=4) {
        RM1[a]=S[RM1[a]];
        RM1[a+1]=S[RM1[a+1]];
@@ -238,7 +240,6 @@ int main(int argc, char** argv) {
     Secretkey[i]=lrand48()&0xFF;
     counter[i]=lrand48()&0xFF;
   }
-
   
   int size = 64;
   uchar DK[size];
@@ -323,7 +324,10 @@ int main(int argc, char** argv) {
   for (int i = 0; i < 64 ; i++) {
 //    DK[i]=digest[i];
     DK[i]=mix[i];
+    //cout<<(int)DK[i]<<" ";
   }
+  //cout<<endl;
+
 
 
 
@@ -343,7 +347,7 @@ int main(int argc, char** argv) {
 
 
   
-  prga(sc, h, RM1);
+  prga(sc, sc,h,RM1,h);