crypto: padlock - Fix hashing of partial blocks
authorHerbert Xu <herbert@gondor.apana.org.au>
Thu, 16 Jul 2009 02:33:27 +0000 (10:33 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Thu, 16 Jul 2009 02:33:27 +0000 (10:33 +0800)
When we encounter partial blocks in finup, we'll invoke the xsha
instruction with a bogus count that is not a multiple of the block
size.  This patch fixes it.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/padlock-sha.c

index a936ba49b390f84603c022a7895f14c9ccd1ab02..76cb6b345e7b4a732e99f1c86b8dfc175a64cb52 100644 (file)
@@ -94,6 +94,7 @@ static int padlock_sha1_finup(struct shash_desc *desc, const u8 *in,
                        memcpy(state.buffer + leftover, in, count);
                        in = state.buffer;
                        count += leftover;
+                       state.count &= ~(SHA1_BLOCK_SIZE - 1);
                }
        }
 
@@ -157,6 +158,7 @@ static int padlock_sha256_finup(struct shash_desc *desc, const u8 *in,
                        memcpy(state.buf + leftover, in, count);
                        in = state.buf;
                        count += leftover;
+                       state.count &= ~(SHA1_BLOCK_SIZE - 1);
                }
        }