209 MD5_u32plus saved_lo;
210 unsigned long used, free;
213 if ((ctx->lo = (saved_lo + size) & 0x1fffffff) < saved_lo)
215 ctx->hi += size >> 29;
217 used = saved_lo & 0x3f;
223 memcpy(&ctx->buffer[used], data, size);
227 memcpy(&ctx->buffer[used], data, free);
228 data = (
unsigned char *)data + free;
230 body(ctx, ctx->buffer, 64);
234 data =
body(ctx, data, size & ~(
unsigned long)0x3f);
238 memcpy(ctx->buffer, data, size);
243 unsigned long used, free;
245 used = ctx->lo & 0x3f;
247 ctx->buffer[used++] = 0x80;
252 memset(&ctx->buffer[used], 0, free);
253 body(ctx, ctx->buffer, 64);
258 memset(&ctx->buffer[used], 0, free - 8);
261 ctx->buffer[56] = ctx->lo;
262 ctx->buffer[57] = ctx->lo >> 8;
263 ctx->buffer[58] = ctx->lo >> 16;
264 ctx->buffer[59] = ctx->lo >> 24;
265 ctx->buffer[60] = ctx->hi;
266 ctx->buffer[61] = ctx->hi >> 8;
267 ctx->buffer[62] = ctx->hi >> 16;
268 ctx->buffer[63] = ctx->hi >> 24;
270 body(ctx, ctx->buffer, 64);
273 result[1] = ctx->a >> 8;
274 result[2] = ctx->a >> 16;
275 result[3] = ctx->a >> 24;
277 result[5] = ctx->b >> 8;
278 result[6] = ctx->b >> 16;
279 result[7] = ctx->b >> 24;
281 result[9] = ctx->c >> 8;
282 result[10] = ctx->c >> 16;
283 result[11] = ctx->c >> 24;
285 result[13] = ctx->d >> 8;
286 result[14] = ctx->d >> 16;
287 result[15] = ctx->d >> 24;
289 memset(ctx, 0,
sizeof(*ctx));
#define STEP(f, a, b, c, d, x, t, s)