Thread (7 messages) flat view 7 messages, 5 authors, 2011-06-27
STALE5516d

[PATCH v2] crypto: sha1: modify sha1_update to use SHA1_BLOCK_SIZE

From: Mandeep Singh Baines <hidden>
Date: 2011-05-26 23:21:31
Also in: lkml
Subsystem: crypto api, the rest · Maintainers: Herbert Xu, "David S. Miller", Linus Torvalds

David Miller (davem@davemloft.net) wrote:
The temp[] buffer is explicitly places inside the inner most
basic block so that the compiler doesn't allocate the stack
space unless that code path is taken.
Fixed in V2 (this patch). Thanks for the review.

-- >8 -- (snip)

Plus some other minor cleanup.

Signed-off-by: Mandeep Singh Baines <redacted>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: David S. Miller <davem@davemloft.net>
Cc: Joe Perches <joe@perches.com>
Cc: linux-crypto@vger.kernel.org
---
 crypto/sha1_generic.c |   33 +++++++++++++++------------------
 1 files changed, 15 insertions(+), 18 deletions(-)
diff --git a/crypto/sha1_generic.c b/crypto/sha1_generic.c
index 0416091..0b56719 100644
--- a/crypto/sha1_generic.c
+++ b/crypto/sha1_generic.c
@@ -40,33 +40,30 @@ static int sha1_update(struct shash_desc *desc, const u8 *data,
 			unsigned int len)
 {
 	struct sha1_state *sctx = shash_desc_ctx(desc);
-	unsigned int partial, done;
-	const u8 *src;
+	unsigned int partial = sctx->count % SHA1_BLOCK_SIZE;
 
-	partial = sctx->count & 0x3f;
 	sctx->count += len;
-	done = 0;
-	src = data;
 
-	if ((partial + len) > 63) {
+	if ((partial + len) >= SHA1_BLOCK_SIZE) {
 		u32 temp[SHA_WORKSPACE_WORDS];
 
 		if (partial) {
-			done = -partial;
-			memcpy(sctx->buffer + partial, data, done + 64);
-			src = sctx->buffer;
-		}
-
-		do {
-			sha_transform(sctx->state, src, temp);
-			done += 64;
-			src = data + done;
-		} while (done + 63 < len);
+			unsigned int done = SHA1_BLOCK_SIZE - partial;
 
+			memcpy(sctx->buffer + partial, data, done);
+			sha_transform(sctx->state, sctx->buffer, temp);
+			len -= done;
+			data += done;
+			partial = 0;
+		}
+		while (len >= SHA1_BLOCK_SIZE) {
+			sha_transform(sctx->state, data, temp);
+			len -= SHA1_BLOCK_SIZE;
+			data += SHA1_BLOCK_SIZE;
+		}
 		memset(temp, 0, sizeof(temp));
-		partial = 0;
 	}
-	memcpy(sctx->buffer + partial, src, len - done);
+	memcpy(sctx->buffer + partial, data, len);
 
 	return 0;
 }
-- 
1.7.3.1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help