void myhash(uchar *X, uchar* RM2, uchar *Sbox2) {
uchar Y[h];
uchar X2[h];
+ uchar Z[h];
for(int k=0;k<h;k++) {
- for(int a=0;a<h;a+=4) {
+ for(int a=0;a<h;a++) {
X2[a]=RM2[a]^X[k*h+a];
- X2[a+1]=RM2[a+1]^X[k*h+a+1];
- X2[a+2]=RM2[a+2]^X[k*h+a+2];
- X2[a+3]=RM2[a+3]^X[k*h+a+3];
}
Y[0]=X2[0]^X2[h-1];
- Y[1]=Y[0]^X2[0];
- Y[2]=Y[1]^X2[1];
- Y[3]=Y[2]^X2[2];
- for(int a=4;a<h;a+=4) {
+ for(int a=4;a<h;a++) {
Y[a]=Y[a-1]^X2[a-1];
- Y[a+1]=Y[a]^X2[a];
- Y[a+2]=Y[a+1]^X2[a+1];
- Y[a+3]=Y[a+2]^X2[a+2];
}
- for(int a=0;a<h;a+=4) {
+ for(int a=0;a<h;a++) {
Y[a]=Sbox2[Y[a]];
- Y[a+1]=Sbox2[Y[a+1]];
- Y[a+2]=Sbox2[Y[a+2]];
- Y[a+3]=Sbox2[Y[a+3]];
+ }
+
+
+ Z[h-1]=Y[h-1]^Y[0];
+ for(int a=h-1;a>0;a--) {
+ Z[a-1]=Z[a]^Y[a];
}
-
-
- RM2[h-1]=Y[h-1]^Y[0];
- RM2[h-2]=RM2[h-1]^Y[h-1];
- RM2[h-3]=RM2[h-2]^Y[h-2];
- RM2[h-4]=RM2[h-3]^Y[h-3];
- for(int a=h-4;a>0;a-=4) {
- RM2[a-1]=RM2[a]^Y[a];
- RM2[a-2]=RM2[a-1]^Y[a-1];
- RM2[a-3]=RM2[a-2]^Y[a-2];
- RM2[a-4]=RM2[a-3]^Y[a-3];
+ for(int a=0;a<h;a++) {
+ RM2[a]=Z[a];
}
+
+
}
}