diff options
Diffstat (limited to 'src/microhttpd/md5.c')
-rw-r--r-- | src/microhttpd/md5.c | 181 |
1 files changed, 91 insertions, 90 deletions
diff --git a/src/microhttpd/md5.c b/src/microhttpd/md5.c index 25f25372..39b66185 100644 --- a/src/microhttpd/md5.c +++ b/src/microhttpd/md5.c | |||
@@ -58,7 +58,7 @@ MD5Transform (uint32_t state[4], | |||
58 | */ | 58 | */ |
59 | void | 59 | void |
60 | MHD_MD5Final (void *ctx_, | 60 | MHD_MD5Final (void *ctx_, |
61 | uint8_t digest[MD5_DIGEST_SIZE]) | 61 | uint8_t digest[MD5_DIGEST_SIZE]) |
62 | { | 62 | { |
63 | struct MD5Context *ctx = ctx_; | 63 | struct MD5Context *ctx = ctx_; |
64 | uint64_t count_bits; | 64 | uint64_t count_bits; |
@@ -75,27 +75,28 @@ MHD_MD5Final (void *ctx_, | |||
75 | ctx->buffer[have_bytes++] = 0x80; /* First padding byte is 0x80 */ | 75 | ctx->buffer[have_bytes++] = 0x80; /* First padding byte is 0x80 */ |
76 | 76 | ||
77 | if (MD5_BLOCK_SIZE - have_bytes < 8) | 77 | if (MD5_BLOCK_SIZE - have_bytes < 8) |
78 | { /* Not enough space to put number of bits */ | 78 | { /* Not enough space to put number of bits */ |
79 | while (have_bytes < MD5_BLOCK_SIZE) ctx->buffer[have_bytes++] = 0; | 79 | while (have_bytes < MD5_BLOCK_SIZE) |
80 | MD5Transform(ctx->state, ctx->buffer); | 80 | ctx->buffer[have_bytes++] = 0; |
81 | have_bytes = 0; /* Additional block */ | 81 | MD5Transform (ctx->state, ctx->buffer); |
82 | } | 82 | have_bytes = 0; /* Additional block */ |
83 | } | ||
83 | /* Pad out to 56 */ | 84 | /* Pad out to 56 */ |
84 | memset(ctx->buffer + have_bytes, 0, MD5_BLOCK_SIZE - have_bytes - 8); | 85 | memset (ctx->buffer + have_bytes, 0, MD5_BLOCK_SIZE - have_bytes - 8); |
85 | 86 | ||
86 | /* Put number of bits */ | 87 | /* Put number of bits */ |
87 | count_bits = ctx->count << 3; | 88 | count_bits = ctx->count << 3; |
88 | _MHD_PUT_64BIT_LE(ctx->buffer + 56, count_bits); | 89 | _MHD_PUT_64BIT_LE (ctx->buffer + 56, count_bits); |
89 | MD5Transform(ctx->state, ctx->buffer); | 90 | MD5Transform (ctx->state, ctx->buffer); |
90 | 91 | ||
91 | /* Put digest in LE mode */ | 92 | /* Put digest in LE mode */ |
92 | _MHD_PUT_32BIT_LE(digest, ctx->state[0]); | 93 | _MHD_PUT_32BIT_LE (digest, ctx->state[0]); |
93 | _MHD_PUT_32BIT_LE(digest + 4, ctx->state[1]); | 94 | _MHD_PUT_32BIT_LE (digest + 4, ctx->state[1]); |
94 | _MHD_PUT_32BIT_LE(digest + 8, ctx->state[2]); | 95 | _MHD_PUT_32BIT_LE (digest + 8, ctx->state[2]); |
95 | _MHD_PUT_32BIT_LE(digest + 12, ctx->state[3]); | 96 | _MHD_PUT_32BIT_LE (digest + 12, ctx->state[3]); |
96 | 97 | ||
97 | /* Erase buffer */ | 98 | /* Erase buffer */ |
98 | memset(ctx, 0, sizeof(*ctx)); | 99 | memset (ctx, 0, sizeof(*ctx)); |
99 | } | 100 | } |
100 | 101 | ||
101 | 102 | ||
@@ -109,13 +110,13 @@ MHD_MD5Final (void *ctx_, | |||
109 | 110 | ||
110 | /* #define F1(x, y, z) (x & y | ~x & z) */ | 111 | /* #define F1(x, y, z) (x & y | ~x & z) */ |
111 | #define F1(x, y, z) (z ^ (x & (y ^ z))) | 112 | #define F1(x, y, z) (z ^ (x & (y ^ z))) |
112 | #define F2(x, y, z) F1(z, x, y) | 113 | #define F2(x, y, z) F1 (z, x, y) |
113 | #define F3(x, y, z) (x ^ y ^ z) | 114 | #define F3(x, y, z) (x ^ y ^ z) |
114 | #define F4(x, y, z) (y ^ (x | ~z)) | 115 | #define F4(x, y, z) (y ^ (x | ~z)) |
115 | 116 | ||
116 | /* This is the central step in the MD5 algorithm. */ | 117 | /* This is the central step in the MD5 algorithm. */ |
117 | #define MD5STEP(f, w, x, y, z, data, s) \ | 118 | #define MD5STEP(f, w, x, y, z, data, s) \ |
118 | ( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x ) | 119 | (w += f (x, y, z) + data, w = w << s | w >> (32 - s), w += x) |
119 | 120 | ||
120 | /** | 121 | /** |
121 | * The core of the MD5 algorithm, this alters an existing MD5 hash to | 122 | * The core of the MD5 algorithm, this alters an existing MD5 hash to |
@@ -129,14 +130,14 @@ MD5Transform (uint32_t state[4], | |||
129 | uint32_t a, b, c, d; | 130 | uint32_t a, b, c, d; |
130 | 131 | ||
131 | #if _MHD_BYTE_ORDER == _MHD_LITTLE_ENDIAN | 132 | #if _MHD_BYTE_ORDER == _MHD_LITTLE_ENDIAN |
132 | const uint32_t *in = (const uint32_t *)block; | 133 | const uint32_t *in = (const uint32_t *) block; |
133 | #else | 134 | #else |
134 | uint32_t in[MD5_BLOCK_SIZE / MD5_BYTES_IN_WORD]; | 135 | uint32_t in[MD5_BLOCK_SIZE / MD5_BYTES_IN_WORD]; |
135 | int i; | 136 | int i; |
136 | 137 | ||
137 | for (i = 0; i < MD5_BLOCK_SIZE / MD5_BYTES_IN_WORD; i++) | 138 | for (i = 0; i < MD5_BLOCK_SIZE / MD5_BYTES_IN_WORD; i++) |
138 | { | 139 | { |
139 | in[i] = _MHD_GET_32BIT_LE(block + i * MD5_BYTES_IN_WORD); | 140 | in[i] = _MHD_GET_32BIT_LE (block + i * MD5_BYTES_IN_WORD); |
140 | } | 141 | } |
141 | #endif | 142 | #endif |
142 | 143 | ||
@@ -145,73 +146,73 @@ MD5Transform (uint32_t state[4], | |||
145 | c = state[2]; | 146 | c = state[2]; |
146 | d = state[3]; | 147 | d = state[3]; |
147 | 148 | ||
148 | MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); | 149 | MD5STEP (F1, a, b, c, d, in[0] + 0xd76aa478, 7); |
149 | MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); | 150 | MD5STEP (F1, d, a, b, c, in[1] + 0xe8c7b756, 12); |
150 | MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); | 151 | MD5STEP (F1, c, d, a, b, in[2] + 0x242070db, 17); |
151 | MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); | 152 | MD5STEP (F1, b, c, d, a, in[3] + 0xc1bdceee, 22); |
152 | MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); | 153 | MD5STEP (F1, a, b, c, d, in[4] + 0xf57c0faf, 7); |
153 | MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); | 154 | MD5STEP (F1, d, a, b, c, in[5] + 0x4787c62a, 12); |
154 | MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); | 155 | MD5STEP (F1, c, d, a, b, in[6] + 0xa8304613, 17); |
155 | MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); | 156 | MD5STEP (F1, b, c, d, a, in[7] + 0xfd469501, 22); |
156 | MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); | 157 | MD5STEP (F1, a, b, c, d, in[8] + 0x698098d8, 7); |
157 | MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); | 158 | MD5STEP (F1, d, a, b, c, in[9] + 0x8b44f7af, 12); |
158 | MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); | 159 | MD5STEP (F1, c, d, a, b, in[10] + 0xffff5bb1, 17); |
159 | MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); | 160 | MD5STEP (F1, b, c, d, a, in[11] + 0x895cd7be, 22); |
160 | MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); | 161 | MD5STEP (F1, a, b, c, d, in[12] + 0x6b901122, 7); |
161 | MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); | 162 | MD5STEP (F1, d, a, b, c, in[13] + 0xfd987193, 12); |
162 | MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); | 163 | MD5STEP (F1, c, d, a, b, in[14] + 0xa679438e, 17); |
163 | MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); | 164 | MD5STEP (F1, b, c, d, a, in[15] + 0x49b40821, 22); |
164 | 165 | ||
165 | MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); | 166 | MD5STEP (F2, a, b, c, d, in[1] + 0xf61e2562, 5); |
166 | MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); | 167 | MD5STEP (F2, d, a, b, c, in[6] + 0xc040b340, 9); |
167 | MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); | 168 | MD5STEP (F2, c, d, a, b, in[11] + 0x265e5a51, 14); |
168 | MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); | 169 | MD5STEP (F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); |
169 | MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); | 170 | MD5STEP (F2, a, b, c, d, in[5] + 0xd62f105d, 5); |
170 | MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); | 171 | MD5STEP (F2, d, a, b, c, in[10] + 0x02441453, 9); |
171 | MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); | 172 | MD5STEP (F2, c, d, a, b, in[15] + 0xd8a1e681, 14); |
172 | MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); | 173 | MD5STEP (F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); |
173 | MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); | 174 | MD5STEP (F2, a, b, c, d, in[9] + 0x21e1cde6, 5); |
174 | MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); | 175 | MD5STEP (F2, d, a, b, c, in[14] + 0xc33707d6, 9); |
175 | MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); | 176 | MD5STEP (F2, c, d, a, b, in[3] + 0xf4d50d87, 14); |
176 | MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); | 177 | MD5STEP (F2, b, c, d, a, in[8] + 0x455a14ed, 20); |
177 | MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); | 178 | MD5STEP (F2, a, b, c, d, in[13] + 0xa9e3e905, 5); |
178 | MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); | 179 | MD5STEP (F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); |
179 | MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); | 180 | MD5STEP (F2, c, d, a, b, in[7] + 0x676f02d9, 14); |
180 | MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); | 181 | MD5STEP (F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); |
181 | 182 | ||
182 | MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); | 183 | MD5STEP (F3, a, b, c, d, in[5] + 0xfffa3942, 4); |
183 | MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); | 184 | MD5STEP (F3, d, a, b, c, in[8] + 0x8771f681, 11); |
184 | MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); | 185 | MD5STEP (F3, c, d, a, b, in[11] + 0x6d9d6122, 16); |
185 | MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); | 186 | MD5STEP (F3, b, c, d, a, in[14] + 0xfde5380c, 23); |
186 | MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); | 187 | MD5STEP (F3, a, b, c, d, in[1] + 0xa4beea44, 4); |
187 | MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); | 188 | MD5STEP (F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); |
188 | MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); | 189 | MD5STEP (F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); |
189 | MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); | 190 | MD5STEP (F3, b, c, d, a, in[10] + 0xbebfbc70, 23); |
190 | MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); | 191 | MD5STEP (F3, a, b, c, d, in[13] + 0x289b7ec6, 4); |
191 | MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); | 192 | MD5STEP (F3, d, a, b, c, in[0] + 0xeaa127fa, 11); |
192 | MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); | 193 | MD5STEP (F3, c, d, a, b, in[3] + 0xd4ef3085, 16); |
193 | MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); | 194 | MD5STEP (F3, b, c, d, a, in[6] + 0x04881d05, 23); |
194 | MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); | 195 | MD5STEP (F3, a, b, c, d, in[9] + 0xd9d4d039, 4); |
195 | MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); | 196 | MD5STEP (F3, d, a, b, c, in[12] + 0xe6db99e5, 11); |
196 | MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); | 197 | MD5STEP (F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); |
197 | MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); | 198 | MD5STEP (F3, b, c, d, a, in[2] + 0xc4ac5665, 23); |
198 | 199 | ||
199 | MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); | 200 | MD5STEP (F4, a, b, c, d, in[0] + 0xf4292244, 6); |
200 | MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); | 201 | MD5STEP (F4, d, a, b, c, in[7] + 0x432aff97, 10); |
201 | MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); | 202 | MD5STEP (F4, c, d, a, b, in[14] + 0xab9423a7, 15); |
202 | MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); | 203 | MD5STEP (F4, b, c, d, a, in[5] + 0xfc93a039, 21); |
203 | MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); | 204 | MD5STEP (F4, a, b, c, d, in[12] + 0x655b59c3, 6); |
204 | MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); | 205 | MD5STEP (F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); |
205 | MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); | 206 | MD5STEP (F4, c, d, a, b, in[10] + 0xffeff47d, 15); |
206 | MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); | 207 | MD5STEP (F4, b, c, d, a, in[1] + 0x85845dd1, 21); |
207 | MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); | 208 | MD5STEP (F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); |
208 | MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); | 209 | MD5STEP (F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); |
209 | MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); | 210 | MD5STEP (F4, c, d, a, b, in[6] + 0xa3014314, 15); |
210 | MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); | 211 | MD5STEP (F4, b, c, d, a, in[13] + 0x4e0811a1, 21); |
211 | MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); | 212 | MD5STEP (F4, a, b, c, d, in[4] + 0xf7537e82, 6); |
212 | MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); | 213 | MD5STEP (F4, d, a, b, c, in[11] + 0xbd3af235, 10); |
213 | MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); | 214 | MD5STEP (F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); |
214 | MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); | 215 | MD5STEP (F4, b, c, d, a, in[9] + 0xeb86d391, 21); |
215 | 216 | ||
216 | state[0] += a; | 217 | state[0] += a; |
217 | state[1] += b; | 218 | state[1] += b; |
@@ -226,8 +227,8 @@ MD5Transform (uint32_t state[4], | |||
226 | */ | 227 | */ |
227 | void | 228 | void |
228 | MHD_MD5Update (void *ctx_, | 229 | MHD_MD5Update (void *ctx_, |
229 | const uint8_t *input, | 230 | const uint8_t *input, |
230 | size_t len) | 231 | size_t len) |
231 | { | 232 | { |
232 | struct MD5Context *ctx = ctx_; | 233 | struct MD5Context *ctx = ctx_; |
233 | size_t have, need; | 234 | size_t have, need; |
@@ -236,11 +237,11 @@ MHD_MD5Update (void *ctx_, | |||
236 | mhd_assert ((ctx != NULL) || (len == 0)); | 237 | mhd_assert ((ctx != NULL) || (len == 0)); |
237 | 238 | ||
238 | /* Check how many bytes we already have and how many more we need. */ | 239 | /* Check how many bytes we already have and how many more we need. */ |
239 | have = (size_t)((ctx->count) & (MD5_BLOCK_SIZE - 1)); | 240 | have = (size_t) ((ctx->count) & (MD5_BLOCK_SIZE - 1)); |
240 | need = MD5_BLOCK_SIZE - have; | 241 | need = MD5_BLOCK_SIZE - have; |
241 | 242 | ||
242 | /* Update bytecount */ | 243 | /* Update bytecount */ |
243 | ctx->count += (uint64_t)len; | 244 | ctx->count += (uint64_t) len; |
244 | 245 | ||
245 | if (len >= need) | 246 | if (len >= need) |
246 | { | 247 | { |
@@ -249,7 +250,7 @@ MHD_MD5Update (void *ctx_, | |||
249 | memcpy (ctx->buffer + have, | 250 | memcpy (ctx->buffer + have, |
250 | input, | 251 | input, |
251 | need); | 252 | need); |
252 | MD5Transform(ctx->state, ctx->buffer); | 253 | MD5Transform (ctx->state, ctx->buffer); |
253 | input += need; | 254 | input += need; |
254 | len -= need; | 255 | len -= need; |
255 | have = 0; | 256 | have = 0; |