diff options
author | Niels Möller <nisse@lysator.liu.se> | 2010-03-24 22:16:29 +0100 |
---|---|---|
committer | Niels Möller <nisse@lysator.liu.se> | 2010-03-24 22:16:29 +0100 |
commit | 49b2a7ebac006659e2a85931b180f1b9c8683339 (patch) | |
tree | be667e0a8d358c01d7a7c1eadfebb138050ed511 /sha1-compress.c | |
parent | 343b4bad60c23c036cdf9cf420d34d373d9d1b2f (diff) | |
download | nettle-49b2a7ebac006659e2a85931b180f1b9c8683339.tar.gz |
Minor cleanup. Added comment on how to optimize f3.
Rev: nettle/sha1-compress.c:1.2
Diffstat (limited to 'sha1-compress.c')
-rw-r--r-- | sha1-compress.c | 12 |
1 files changed, 9 insertions, 3 deletions
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); } |