summaryrefslogtreecommitdiff
path: root/sha1-compress.c
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2010-03-24 22:16:29 +0100
committerNiels Möller <nisse@lysator.liu.se>2010-03-24 22:16:29 +0100
commit49b2a7ebac006659e2a85931b180f1b9c8683339 (patch)
treebe667e0a8d358c01d7a7c1eadfebb138050ed511 /sha1-compress.c
parent343b4bad60c23c036cdf9cf420d34d373d9d1b2f (diff)
downloadnettle-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.c12
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);
}