212 MD5_u32plus saved_lo;
213 unsigned long used, free;
216 if ((ctx->lo = (saved_lo + size) & 0x1fffffff) < saved_lo)
218 ctx->hi += size >> 29;
220 used = saved_lo & 0x3f;
226 memcpy(&ctx->buffer[used], data, size);
230 memcpy(&ctx->buffer[used], data, free);
231 data = (
unsigned char *)data + free;
233 body(ctx, ctx->buffer, 64);
237 data =
body(ctx, data, size & ~(
unsigned long)0x3f);
241 memcpy(ctx->buffer, data, size);
246 unsigned long used, free;
248 used = ctx->lo & 0x3f;
250 ctx->buffer[used++] = 0x80;
255 memset(&ctx->buffer[used], 0, free);
256 body(ctx, ctx->buffer, 64);
261 memset(&ctx->buffer[used], 0, free - 8);
264 ctx->buffer[56] = ctx->lo;
265 ctx->buffer[57] = ctx->lo >> 8;
266 ctx->buffer[58] = ctx->lo >> 16;
267 ctx->buffer[59] = ctx->lo >> 24;
268 ctx->buffer[60] = ctx->hi;
269 ctx->buffer[61] = ctx->hi >> 8;
270 ctx->buffer[62] = ctx->hi >> 16;
271 ctx->buffer[63] = ctx->hi >> 24;
273 body(ctx, ctx->buffer, 64);
276 result[1] = ctx->a >> 8;
277 result[2] = ctx->a >> 16;
278 result[3] = ctx->a >> 24;
280 result[5] = ctx->b >> 8;
281 result[6] = ctx->b >> 16;
282 result[7] = ctx->b >> 24;
284 result[9] = ctx->c >> 8;
285 result[10] = ctx->c >> 16;
286 result[11] = ctx->c >> 24;
288 result[13] = ctx->d >> 8;
289 result[14] = ctx->d >> 16;
290 result[15] = ctx->d >> 24;
292 memset(ctx, 0,
sizeof(*ctx));
#define STEP(f, a, b, c, d, x, t, s)