summaryrefslogtreecommitdiffstats
path: root/crypto/md5.c
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2017-03-16 10:18:57 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2017-03-24 10:02:56 -0400
commit3c7eb3cc8360736123a3139a1ec727d746de3252 (patch)
treec7074e56c6661aaef4d6b3cbe06fa500ccce485e /crypto/md5.c
parentfdb2726f4e61c5e3abc052f547d5a5f6c0dc5504 (diff)
md5: remove from lib and only live in crypto
The md5_transform function is no longer used any where in the tree, except for the crypto api's actual implementation of md5, so we can drop the function from lib and put it as a static function of the crypto file, where it belongs. There should be no new users of md5_transform, anyway, since there are more modern ways of doing what it once achieved. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> Reviewed-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto/md5.c')
-rw-r--r--crypto/md5.c95
1 files changed, 94 insertions, 1 deletions
diff --git a/crypto/md5.c b/crypto/md5.c
index 2355a7c25c45..f7ae1a48225b 100644
--- a/crypto/md5.c
+++ b/crypto/md5.c
@@ -21,9 +21,11 @@
21#include <linux/module.h> 21#include <linux/module.h>
22#include <linux/string.h> 22#include <linux/string.h>
23#include <linux/types.h> 23#include <linux/types.h>
24#include <linux/cryptohash.h>
25#include <asm/byteorder.h> 24#include <asm/byteorder.h>
26 25
26#define MD5_DIGEST_WORDS 4
27#define MD5_MESSAGE_BYTES 64
28
27const u8 md5_zero_message_hash[MD5_DIGEST_SIZE] = { 29const u8 md5_zero_message_hash[MD5_DIGEST_SIZE] = {
28 0xd4, 0x1d, 0x8c, 0xd9, 0x8f, 0x00, 0xb2, 0x04, 30 0xd4, 0x1d, 0x8c, 0xd9, 0x8f, 0x00, 0xb2, 0x04,
29 0xe9, 0x80, 0x09, 0x98, 0xec, 0xf8, 0x42, 0x7e, 31 0xe9, 0x80, 0x09, 0x98, 0xec, 0xf8, 0x42, 0x7e,
@@ -47,6 +49,97 @@ static inline void cpu_to_le32_array(u32 *buf, unsigned int words)
47 } 49 }
48} 50}
49 51
52#define F1(x, y, z) (z ^ (x & (y ^ z)))
53#define F2(x, y, z) F1(z, x, y)
54#define F3(x, y, z) (x ^ y ^ z)
55#define F4(x, y, z) (y ^ (x | ~z))
56
57#define MD5STEP(f, w, x, y, z, in, s) \
58 (w += f(x, y, z) + in, w = (w<<s | w>>(32-s)) + x)
59
60static void md5_transform(__u32 *hash, __u32 const *in)
61{
62 u32 a, b, c, d;
63
64 a = hash[0];
65 b = hash[1];
66 c = hash[2];
67 d = hash[3];
68
69 MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
70 MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
71 MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
72 MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
73 MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
74 MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
75 MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
76 MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
77 MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
78 MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
79 MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
80 MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
81 MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
82 MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
83 MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
84 MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
85
86 MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
87 MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
88 MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
89 MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
90 MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
91 MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
92 MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
93 MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
94 MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
95 MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
96 MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
97 MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
98 MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
99 MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
100 MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
101 MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
102
103 MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
104 MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
105 MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
106 MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
107 MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
108 MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
109 MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
110 MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
111 MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
112 MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
113 MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
114 MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
115 MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
116 MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
117 MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
118 MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
119
120 MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
121 MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
122 MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
123 MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
124 MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
125 MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
126 MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
127 MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
128 MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
129 MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
130 MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
131 MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
132 MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
133 MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
134 MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
135 MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
136
137 hash[0] += a;
138 hash[1] += b;
139 hash[2] += c;
140 hash[3] += d;
141}
142
50static inline void md5_transform_helper(struct md5_state *ctx) 143static inline void md5_transform_helper(struct md5_state *ctx)
51{ 144{
52 le32_to_cpu_array(ctx->block, sizeof(ctx->block) / sizeof(u32)); 145 le32_to_cpu_array(ctx->block, sizeof(ctx->block) / sizeof(u32));