X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/f3737e064849199071468eea8fe9fbf012d6ba7e..a7f8404ecdad8cc94f20f6a599131535d5c856ef:/lib/mdfour.c diff --git a/lib/mdfour.c b/lib/mdfour.c index c7aec27d..19f2bb7c 100644 --- a/lib/mdfour.c +++ b/lib/mdfour.c @@ -28,46 +28,25 @@ static struct mdfour *m; -static inline uint32 F(uint32 X, uint32 Y, uint32 Z) -{ - return (X&Y) | ((~X)&Z); -} - -static inline uint32 G(uint32 X, uint32 Y, uint32 Z) -{ - return (X&Y) | (X&Z) | (Y&Z); -} +typedef unsigned long long uint64; -static inline uint32 H(uint32 X, uint32 Y, uint32 Z) -{ - return X^Y^Z; -} +#define MASK32 (0xffffffff) -static inline uint32 lshift(uint32 x, int s) -{ -#ifdef LARGE_INT32 - x &= 0xFFFFFFFF; - return ((x<>(32-s)); -#else - return ((x<>(32-s))); -#endif -} +#define F(X,Y,Z) ((((X)&(Y)) | ((~(X))&(Z)))) +#define G(X,Y,Z) ((((X)&(Y)) | ((X)&(Z)) | ((Y)&(Z)))) +#define H(X,Y,Z) (((X)^(Y)^(Z))) +#define lshift(x,s) (((((x)<<(s))&MASK32) | (((x)>>(32-(s)))&MASK32))) -#define ROUND1(a,b,c,d,k,s) a = lshift(a + F(b,c,d) + X[k], s) -#define ROUND2(a,b,c,d,k,s) a = lshift(a + G(b,c,d) + X[k] + 0x5A827999,s) -#define ROUND3(a,b,c,d,k,s) a = lshift(a + H(b,c,d) + X[k] + 0x6ED9EBA1,s) +#define ROUND1(a,b,c,d,k,s) a = lshift((a + F(b,c,d) + M[k])&MASK32, s) +#define ROUND2(a,b,c,d,k,s) a = lshift((a + G(b,c,d) + M[k] + 0x5A827999)&MASK32,s) +#define ROUND3(a,b,c,d,k,s) a = lshift((a + H(b,c,d) + M[k] + 0x6ED9EBA1)&MASK32,s) /* this applies md4 to 64 byte chunks */ static void mdfour64(uint32 *M) { - int j; uint32 AA, BB, CC, DD; - uint32 X[16]; uint32 A,B,C,D; - for (j=0;j<16;j++) - X[j] = M[j]; - A = m->A; B = m->B; C = m->C; D = m->D; AA = A; BB = B; CC = C; DD = D; @@ -80,6 +59,7 @@ static void mdfour64(uint32 *M) ROUND1(A,B,C,D, 12, 3); ROUND1(D,A,B,C, 13, 7); ROUND1(C,D,A,B, 14, 11); ROUND1(B,C,D,A, 15, 19); + ROUND2(A,B,C,D, 0, 3); ROUND2(D,A,B,C, 4, 5); ROUND2(C,D,A,B, 8, 9); ROUND2(B,C,D,A, 12, 13); ROUND2(A,B,C,D, 1, 3); ROUND2(D,A,B,C, 5, 5); @@ -98,15 +78,11 @@ static void mdfour64(uint32 *M) ROUND3(A,B,C,D, 3, 3); ROUND3(D,A,B,C, 11, 9); ROUND3(C,D,A,B, 7, 11); ROUND3(B,C,D,A, 15, 15); - A += AA; B += BB; C += CC; D += DD; + A += AA; B += BB; + C += CC; D += DD; -#ifdef LARGE_INT32 - A &= 0xFFFFFFFF; B &= 0xFFFFFFFF; - C &= 0xFFFFFFFF; D &= 0xFFFFFFFF; -#endif - - for (j=0;j<16;j++) - X[j] = 0; + A &= MASK32; B &= MASK32; + C &= MASK32; D &= MASK32; m->A = A; m->B = B; m->C = C; m->D = D; } @@ -209,8 +185,8 @@ static void file_checksum1(char *fname) { int fd, i; struct mdfour md; - unsigned char buf[64], sum[16]; - + unsigned char buf[64*1024], sum[16]; + fd = open(fname,O_RDONLY); if (fd == -1) { perror("fname"); @@ -234,6 +210,7 @@ static void file_checksum1(char *fname) printf("\n"); } +#if 0 #include "../md4.h" static void file_checksum2(char *fname) @@ -268,11 +245,14 @@ static void file_checksum2(char *fname) printf("%02X", sum[i]); printf("\n"); } +#endif int main(int argc, char *argv[]) { file_checksum1(argv[1]); +#if 0 file_checksum2(argv[1]); +#endif return 0; } #endif