From: Niels Möller Date: Wed, 24 Mar 2010 21:16:29 +0000 (+0100) Subject: Minor cleanup. Added comment on how to optimize f3. X-Git-Tag: camellia_32bit_20100720~107 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=49b2a7ebac006659e2a85931b180f1b9c8683339;p=thirdparty%2Fnettle.git Minor cleanup. Added comment on how to optimize f3. Rev: nettle/sha1-compress.c:1.2 --- diff --git a/sha1-compress.c b/sha1-compress.c index 3fc0ff91..ed843bf4 100644 --- a/sha1-compress.c +++ b/sha1-compress.c @@ -66,12 +66,18 @@ save one boolean operation each - thanks to Rich Schroeppel, rcs@cs.arizona.edu for discovering this */ +/* FIXME: Can save a temporary in f3 by using ( (x & y) + (z & (x ^ + y)) ), and then, in the round, compute one of the terms and add it + into the destination word before computing the second term. Credits + to George Spelvin for pointing this out. Unfortunately, gcc + doesn't seem to be smart enough to take advantage of this. */ + /* #define f1(x,y,z) ( ( x & y ) | ( ~x & z ) ) Rounds 0-19 */ #define f1(x,y,z) ( z ^ ( x & ( y ^ z ) ) ) /* Rounds 0-19 */ #define f2(x,y,z) ( x ^ y ^ z ) /* Rounds 20-39 */ /* #define f3(x,y,z) ( ( x & y ) | ( x & z ) | ( y & z ) ) Rounds 40-59 */ #define f3(x,y,z) ( ( x & y ) | ( z & ( x | y ) ) ) /* Rounds 40-59 */ -#define f4(x,y,z) ( x ^ y ^ z ) /* Rounds 60-79 */ +#define f4 f2 /* The SHA Mysterious Constants */ @@ -127,11 +133,11 @@ void _nettle_sha1_compress(uint32_t *state, const uint8_t *input) { - uint32_t data[16]; + uint32_t data[SHA1_DATA_LENGTH]; uint32_t A, B, C, D, E; /* Local vars */ int i; - for (i = 0; i < 16; i++, input+= 4) + for (i = 0; i < SHA1_DATA_LENGTH; i++, input+= 4) { data[i] = READ_UINT32(input); }