aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/crypto/sha_common.c
diff options
context:
space:
mode:
authorJan Glauber <jang@linux.vnet.ibm.com>2008-03-06 06:52:00 -0500
committerHerbert Xu <herbert@gondor.apana.org.au>2008-04-20 22:19:21 -0400
commit291dc7c0996b09a7c58b2cf6e9cc3495123a607e (patch)
treedf678f61c217baddb3c959166639e919be637193 /arch/s390/crypto/sha_common.c
parent604973f1fe41b817c1badb3df2008fe641e50ae6 (diff)
[CRYPTO] sha512: Hardware acceleration for s390
Exploit the System z10 hardware acceleration for SHA512. Signed-off-by: Jan Glauber <jang@linux.vnet.ibm.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'arch/s390/crypto/sha_common.c')
-rw-r--r--arch/s390/crypto/sha_common.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/arch/s390/crypto/sha_common.c b/arch/s390/crypto/sha_common.c
index 80b6f2ba005e..9d6eb8c3d37e 100644
--- a/arch/s390/crypto/sha_common.c
+++ b/arch/s390/crypto/sha_common.c
@@ -59,12 +59,15 @@ void s390_sha_final(struct crypto_tfm *tfm, u8 *out)
59 struct s390_sha_ctx *ctx = crypto_tfm_ctx(tfm); 59 struct s390_sha_ctx *ctx = crypto_tfm_ctx(tfm);
60 unsigned int bsize = crypto_tfm_alg_blocksize(tfm); 60 unsigned int bsize = crypto_tfm_alg_blocksize(tfm);
61 u64 bits; 61 u64 bits;
62 unsigned int index, end; 62 unsigned int index, end, plen;
63 int ret; 63 int ret;
64 64
65 /* SHA-512 uses 128 bit padding length */
66 plen = (bsize > SHA256_BLOCK_SIZE) ? 16 : 8;
67
65 /* must perform manual padding */ 68 /* must perform manual padding */
66 index = ctx->count & (bsize - 1); 69 index = ctx->count & (bsize - 1);
67 end = (index < bsize - 8) ? bsize : (2 * bsize); 70 end = (index < bsize - plen) ? bsize : (2 * bsize);
68 71
69 /* start pad with 1 */ 72 /* start pad with 1 */
70 ctx->buf[index] = 0x80; 73 ctx->buf[index] = 0x80;
@@ -73,6 +76,10 @@ void s390_sha_final(struct crypto_tfm *tfm, u8 *out)
73 /* pad with zeros */ 76 /* pad with zeros */
74 memset(ctx->buf + index, 0x00, end - index - 8); 77 memset(ctx->buf + index, 0x00, end - index - 8);
75 78
79 /*
80 * Append message length. Well, SHA-512 wants a 128 bit lenght value,
81 * nevertheless we use u64, should be enough for now...
82 */
76 bits = ctx->count * 8; 83 bits = ctx->count * 8;
77 memcpy(ctx->buf + end - 8, &bits, sizeof(bits)); 84 memcpy(ctx->buf + end - 8, &bits, sizeof(bits));
78 85