[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: md5 cleanup
From: |
Simon Josefsson |
Subject: |
Re: md5 cleanup |
Date: |
Mon, 24 Oct 2005 20:32:44 +0200 |
User-agent: |
Gnus/5.110004 (No Gnus v0.4) Emacs/22.0.50 (gnu/linux) |
Stepan Kasal <address@hidden> writes:
> wouldn't the following be more readable?
Yes.
> Do I understand correctly that this is only executed for the last block,
> so that it's not necessary to be so careful about each tick?
Yes.
Paul Eggert <address@hidden> writes:
> Also, in some other places I noticed some "char*"s. GNU style is to
> put a space between the type and the trailing "*" for pointer types,
> e.g., "char *" rather than "char*".
Right. I ran indent, and fixed the buggy indentation it made
manually, again.
Ok to install patch below?
2005-10-23 Simon Josefsson <address@hidden>
* md5.h, md5.c: Simplify buffer handling visavi alignment, same as
recent md4 change.
--- md5.h 12 Oct 2005 02:19:33 +0200 1.19
+++ md5.h 24 Oct 2005 20:31:38 +0200
@@ -70,7 +70,7 @@
uint32_t total[2];
uint32_t buflen;
- char buffer[128] __attribute__ ((__aligned__ (__alignof__ (uint32_t))));
+ uint32_t buffer[32];
};
/*
--- md5.c 11 Oct 2005 20:34:49 +0200 1.21
+++ md5.c 24 Oct 2005 20:30:05 +0200
@@ -108,23 +108,21 @@
{
/* Take yet unprocessed bytes into account. */
uint32_t bytes = ctx->buflen;
- size_t pad;
+ size_t size = (bytes < 56) ? 64 / 4 : 64 * 2 / 4;
/* Now count remaining bytes. */
ctx->total[0] += bytes;
if (ctx->total[0] < bytes)
++ctx->total[1];
- pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes;
- memcpy (&ctx->buffer[bytes], fillbuf, pad);
-
/* Put the 64-bit file length in *bits* at the end of the buffer. */
- *(uint32_t *) &ctx->buffer[bytes + pad] = SWAP (ctx->total[0] << 3);
- *(uint32_t *) &ctx->buffer[bytes + pad + 4] = SWAP ((ctx->total[1] << 3) |
- (ctx->total[0] >> 29));
+ ctx->buffer[size - 2] = SWAP (ctx->total[0] << 3);
+ ctx->buffer[size - 1] = SWAP ((ctx->total[1] << 3) | (ctx->total[0] >> 29));
+
+ memcpy (&((char *) ctx->buffer)[bytes], fillbuf, (size - 2) * 4 - bytes);
/* Process last bytes. */
- md5_process_block (ctx->buffer, bytes + pad + 8, ctx);
+ md5_process_block (ctx->buffer, size * 4, ctx);
return md5_read_ctx (ctx, resbuf);
}
@@ -184,7 +182,7 @@
md5_process_block (buffer, BLOCKSIZE, &ctx);
}
- process_partial_block:;
+process_partial_block:
/* Process any remaining bytes. */
if (sum > 0)
@@ -225,7 +223,7 @@
size_t left_over = ctx->buflen;
size_t add = 128 - left_over > len ? len : 128 - left_over;
- memcpy (&ctx->buffer[left_over], buffer, add);
+ memcpy (&((char *) ctx->buffer)[left_over], buffer, add);
ctx->buflen += add;
if (ctx->buflen > 64)
@@ -234,7 +232,8 @@
ctx->buflen &= 63;
/* The regions in the following copy operation cannot overlap. */
- memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63],
+ memcpy (ctx->buffer,
+ &((char *) ctx->buffer)[(left_over + add) & ~63],
ctx->buflen);
}
@@ -275,13 +274,13 @@
{
size_t left_over = ctx->buflen;
- memcpy (&ctx->buffer[left_over], buffer, len);
+ memcpy (&((char *) ctx->buffer)[left_over], buffer, len);
left_over += len;
if (left_over >= 64)
{
md5_process_block (ctx->buffer, 64, ctx);
left_over -= 64;
- memcpy (ctx->buffer, &ctx->buffer[64], left_over);
+ memcpy (ctx->buffer, &ctx->buffer[16], left_over);
}
ctx->buflen = left_over;
}