]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - crypto/sha1.c
[CRYPTO] sha1: Avoid useless memcpy()
[linux-2.6-omap-h63xx.git] / crypto / sha1.c
index c686e7826174fd3184328eeac58356b5dafd42f6..292dcc13ff9273f0bd6f3be2b1a565aa227f3c1b 100644 (file)
@@ -50,22 +50,31 @@ static void sha1_update(void *ctx, const u8 *data, unsigned int len)
 {
        struct sha1_ctx *sctx = ctx;
        unsigned int i, j;
-       u32 temp[SHA_WORKSPACE_WORDS];
+       const u8 *src;
 
        j = (sctx->count >> 3) & 0x3f;
        sctx->count += len << 3;
+       i = 0;
+       src = data;
 
        if ((j + len) > 63) {
-               memcpy(&sctx->buffer[j], data, (i = 64-j));
-               sha_transform(sctx->state, sctx->buffer, temp);
-               for ( ; i + 63 < len; i += 64) {
-                       sha_transform(sctx->state, &data[i], temp);
+               u32 temp[SHA_WORKSPACE_WORDS];
+
+               if (j) {
+                       memcpy(&sctx->buffer[j], data, (i = 64-j));
+                       src = sctx->buffer;
                }
+
+               do {
+                       sha_transform(sctx->state, src, temp);
+                       i += 64;
+                       src = &data[i];
+               } while (i + 63 < len);
+
+               memset(temp, 0, sizeof(temp));
                j = 0;
        }
-       else i = 0;
-       memset(temp, 0, sizeof(temp));
-       memcpy(&sctx->buffer[j], &data[i], len - i);
+       memcpy(&sctx->buffer[j], src, len - i);
 }