Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

crypto: Move md5_transform to lib/md5.c

We are going to use this for TCP/IP sequence number and fragment ID
generation.

Signed-off-by: David S. Miller <davem@davemloft.net>

+102 -92
+1 -91
crypto/md5.c
··· 21 21 #include <linux/module.h> 22 22 #include <linux/string.h> 23 23 #include <linux/types.h> 24 + #include <linux/cryptohash.h> 24 25 #include <asm/byteorder.h> 25 - 26 - #define F1(x, y, z) (z ^ (x & (y ^ z))) 27 - #define F2(x, y, z) F1(z, x, y) 28 - #define F3(x, y, z) (x ^ y ^ z) 29 - #define F4(x, y, z) (y ^ (x | ~z)) 30 - 31 - #define MD5STEP(f, w, x, y, z, in, s) \ 32 - (w += f(x, y, z) + in, w = (w<<s | w>>(32-s)) + x) 33 - 34 - static void md5_transform(u32 *hash, u32 const *in) 35 - { 36 - u32 a, b, c, d; 37 - 38 - a = hash[0]; 39 - b = hash[1]; 40 - c = hash[2]; 41 - d = hash[3]; 42 - 43 - MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); 44 - MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); 45 - MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); 46 - MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); 47 - MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); 48 - MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); 49 - MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); 50 - MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); 51 - MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); 52 - MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); 53 - MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); 54 - MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); 55 - MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); 56 - MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); 57 - MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); 58 - MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); 59 - 60 - MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); 61 - MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); 62 - MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); 63 - MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); 64 - MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); 65 - MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); 66 - MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); 67 - MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); 68 - MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); 69 - MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); 70 - MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); 71 - MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); 72 - MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); 73 - MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); 74 - MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); 75 - MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); 76 - 77 - MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); 78 - MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); 79 - MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); 80 - MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); 81 - MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); 82 - MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); 83 - MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); 84 - MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); 85 - MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); 86 - MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); 87 - MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); 88 - MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); 89 - MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); 90 - MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); 91 - MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); 92 - MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); 93 - 94 - MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); 95 - MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); 96 - MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); 97 - MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); 98 - MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); 99 - MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); 100 - MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); 101 - MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); 102 - MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); 103 - MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); 104 - MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); 105 - MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); 106 - MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); 107 - MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); 108 - MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); 109 - MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); 110 - 111 - hash[0] += a; 112 - hash[1] += b; 113 - hash[2] += c; 114 - hash[3] += d; 115 - } 116 26 117 27 /* XXX: this stuff can be optimized */ 118 28 static inline void le32_to_cpu_array(u32 *buf, unsigned int words)
+5
include/linux/cryptohash.h
··· 8 8 void sha_init(__u32 *buf); 9 9 void sha_transform(__u32 *digest, const char *data, __u32 *W); 10 10 11 + #define MD5_DIGEST_WORDS 4 12 + #define MD5_MESSAGE_BYTES 64 13 + 14 + void md5_transform(__u32 *hash, __u32 const *in); 15 + 11 16 __u32 half_md4_transform(__u32 buf[4], __u32 const in[8]); 12 17 13 18 #endif
+1 -1
lib/Makefile
··· 10 10 lib-y := ctype.o string.o vsprintf.o cmdline.o \ 11 11 rbtree.o radix-tree.o dump_stack.o timerqueue.o\ 12 12 idr.o int_sqrt.o extable.o prio_tree.o \ 13 - sha1.o irq_regs.o reciprocal_div.o argv_split.o \ 13 + sha1.o md5.o irq_regs.o reciprocal_div.o argv_split.o \ 14 14 proportions.o prio_heap.o ratelimit.o show_mem.o \ 15 15 is_single_threaded.o plist.o decompress.o find_next_bit.o 16 16
+95
lib/md5.c
··· 1 + #include <linux/kernel.h> 2 + #include <linux/module.h> 3 + #include <linux/cryptohash.h> 4 + 5 + #define F1(x, y, z) (z ^ (x & (y ^ z))) 6 + #define F2(x, y, z) F1(z, x, y) 7 + #define F3(x, y, z) (x ^ y ^ z) 8 + #define F4(x, y, z) (y ^ (x | ~z)) 9 + 10 + #define MD5STEP(f, w, x, y, z, in, s) \ 11 + (w += f(x, y, z) + in, w = (w<<s | w>>(32-s)) + x) 12 + 13 + void md5_transform(__u32 *hash, __u32 const *in) 14 + { 15 + u32 a, b, c, d; 16 + 17 + a = hash[0]; 18 + b = hash[1]; 19 + c = hash[2]; 20 + d = hash[3]; 21 + 22 + MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); 23 + MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); 24 + MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); 25 + MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); 26 + MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); 27 + MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); 28 + MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); 29 + MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); 30 + MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); 31 + MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); 32 + MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); 33 + MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); 34 + MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); 35 + MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); 36 + MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); 37 + MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); 38 + 39 + MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); 40 + MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); 41 + MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); 42 + MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); 43 + MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); 44 + MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); 45 + MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); 46 + MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); 47 + MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); 48 + MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); 49 + MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); 50 + MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); 51 + MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); 52 + MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); 53 + MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); 54 + MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); 55 + 56 + MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); 57 + MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); 58 + MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); 59 + MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); 60 + MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); 61 + MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); 62 + MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); 63 + MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); 64 + MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); 65 + MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); 66 + MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); 67 + MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); 68 + MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); 69 + MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); 70 + MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); 71 + MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); 72 + 73 + MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); 74 + MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); 75 + MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); 76 + MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); 77 + MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); 78 + MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); 79 + MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); 80 + MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); 81 + MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); 82 + MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); 83 + MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); 84 + MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); 85 + MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); 86 + MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); 87 + MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); 88 + MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); 89 + 90 + hash[0] += a; 91 + hash[1] += b; 92 + hash[2] += c; 93 + hash[3] += d; 94 + } 95 + EXPORT_SYMBOL(md5_transform);