aboutsummaryrefslogtreecommitdiff
path: root/src/microhttpd/md5.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/microhttpd/md5.c')
-rw-r--r--src/microhttpd/md5.c181
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 */
59void 59void
60MHD_MD5Final (void *ctx_, 60MHD_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 */
227void 228void
228MHD_MD5Update (void *ctx_, 229MHD_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;