vserver 2.0 rc7
[linux-2.6.git] / fs / ext3 / hash.c
index f378027..5a2d123 100644 (file)
@@ -13,6 +13,7 @@
 #include <linux/jbd.h>
 #include <linux/sched.h>
 #include <linux/ext3_fs.h>
+#include <linux/cryptohash.h>
 
 #define DELTA 0x9E3779B9
 
@@ -33,73 +34,6 @@ static void TEA_transform(__u32 buf[4], __u32 const in[])
        buf[1] += b1;
 }
 
-/* F, G and H are basic MD4 functions: selection, majority, parity */
-#define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z))))
-#define G(x, y, z) (((x) & (y)) + (((x) ^ (y)) & (z)))
-#define H(x, y, z) ((x) ^ (y) ^ (z))
-
-/*
- * The generic round function.  The application is so specific that
- * we don't bother protecting all the arguments with parens, as is generally
- * good macro practice, in favor of extra legibility.
- * Rotation is separate from addition to prevent recomputation
- */
-#define ROUND(f, a, b, c, d, x, s)     \
-       (a += f(b, c, d) + x, a = (a << s) | (a >> (32-s)))
-#define K1 0
-#define K2 013240474631UL
-#define K3 015666365641UL
-
-/*
- * Basic cut-down MD4 transform.  Returns only 32 bits of result.
- */
-static void halfMD4Transform (__u32 buf[4], __u32 const in[])
-{
-       __u32   a = buf[0], b = buf[1], c = buf[2], d = buf[3];
-
-       /* Round 1 */
-       ROUND(F, a, b, c, d, in[0] + K1,  3);
-       ROUND(F, d, a, b, c, in[1] + K1,  7);
-       ROUND(F, c, d, a, b, in[2] + K1, 11);
-       ROUND(F, b, c, d, a, in[3] + K1, 19);
-       ROUND(F, a, b, c, d, in[4] + K1,  3);
-       ROUND(F, d, a, b, c, in[5] + K1,  7);
-       ROUND(F, c, d, a, b, in[6] + K1, 11);
-       ROUND(F, b, c, d, a, in[7] + K1, 19);
-
-       /* Round 2 */
-       ROUND(G, a, b, c, d, in[1] + K2,  3);
-       ROUND(G, d, a, b, c, in[3] + K2,  5);
-       ROUND(G, c, d, a, b, in[5] + K2,  9);
-       ROUND(G, b, c, d, a, in[7] + K2, 13);
-       ROUND(G, a, b, c, d, in[0] + K2,  3);
-       ROUND(G, d, a, b, c, in[2] + K2,  5);
-       ROUND(G, c, d, a, b, in[4] + K2,  9);
-       ROUND(G, b, c, d, a, in[6] + K2, 13);
-
-       /* Round 3 */
-       ROUND(H, a, b, c, d, in[3] + K3,  3);
-       ROUND(H, d, a, b, c, in[7] + K3,  9);
-       ROUND(H, c, d, a, b, in[2] + K3, 11);
-       ROUND(H, b, c, d, a, in[6] + K3, 15);
-       ROUND(H, a, b, c, d, in[1] + K3,  3);
-       ROUND(H, d, a, b, c, in[5] + K3,  9);
-       ROUND(H, c, d, a, b, in[0] + K3, 11);
-       ROUND(H, b, c, d, a, in[4] + K3, 15);
-
-       buf[0] += a;
-       buf[1] += b;
-       buf[2] += c;
-       buf[3] += d;
-}
-
-#undef ROUND
-#undef F
-#undef G
-#undef H
-#undef K1
-#undef K2
-#undef K3
 
 /* The old legacy hash */
 static __u32 dx_hack_hash (const char *name, int len)
@@ -187,7 +121,7 @@ int ext3fs_dirhash(const char *name, int len, struct dx_hash_info *hinfo)
                p = name;
                while (len > 0) {
                        str2hashbuf(p, len, in, 8);
-                       halfMD4Transform(buf, in);
+                       half_md4_transform(buf, in);
                        len -= 32;
                        p += 32;
                }