aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathias Krause <mathias.krause@secunet.com>2013-10-15 07:49:34 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2013-10-16 08:56:26 -0400
commitc306a98d637613818c87c19eabf7feba02b5b618 (patch)
treeefd44e2de0385f2f5b532526799f03a1e7bb188d
parentab827fb399b453bd7d4a49e8878bc5f7018507dd (diff)
crypto: talitos - Simplify key parsing
Use the common helper function crypto_authenc_extractkeys() for key parsing. Cc: Kim Phillips <kim.phillips@freescale.com> Cc: Herbert Xu <herbert@gondor.apana.org.au> Cc: "David S. Miller" <davem@davemloft.net> Signed-off-by: Mathias Krause <mathias.krause@secunet.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r--drivers/crypto/talitos.c35
1 files changed, 8 insertions, 27 deletions
diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
index 661dc3eb1d66..f6f7c681073e 100644
--- a/drivers/crypto/talitos.c
+++ b/drivers/crypto/talitos.c
@@ -671,39 +671,20 @@ static int aead_setkey(struct crypto_aead *authenc,
671 const u8 *key, unsigned int keylen) 671 const u8 *key, unsigned int keylen)
672{ 672{
673 struct talitos_ctx *ctx = crypto_aead_ctx(authenc); 673 struct talitos_ctx *ctx = crypto_aead_ctx(authenc);
674 struct rtattr *rta = (void *)key; 674 struct crypto_authenc_keys keys;
675 struct crypto_authenc_key_param *param;
676 unsigned int authkeylen;
677 unsigned int enckeylen;
678
679 if (!RTA_OK(rta, keylen))
680 goto badkey;
681 675
682 if (rta->rta_type != CRYPTO_AUTHENC_KEYA_PARAM) 676 if (crypto_authenc_extractkeys(&keys, key, keylen) != 0)
683 goto badkey; 677 goto badkey;
684 678
685 if (RTA_PAYLOAD(rta) < sizeof(*param)) 679 if (keys.authkeylen + keys.enckeylen > TALITOS_MAX_KEY_SIZE)
686 goto badkey; 680 goto badkey;
687 681
688 param = RTA_DATA(rta); 682 memcpy(ctx->key, keys.authkey, keys.authkeylen);
689 enckeylen = be32_to_cpu(param->enckeylen); 683 memcpy(&ctx->key[keys.authkeylen], keys.enckey, keys.enckeylen);
690
691 key += RTA_ALIGN(rta->rta_len);
692 keylen -= RTA_ALIGN(rta->rta_len);
693
694 if (keylen < enckeylen)
695 goto badkey;
696 684
697 authkeylen = keylen - enckeylen; 685 ctx->keylen = keys.authkeylen + keys.enckeylen;
698 686 ctx->enckeylen = keys.enckeylen;
699 if (keylen > TALITOS_MAX_KEY_SIZE) 687 ctx->authkeylen = keys.authkeylen;
700 goto badkey;
701
702 memcpy(&ctx->key, key, keylen);
703
704 ctx->keylen = keylen;
705 ctx->enckeylen = enckeylen;
706 ctx->authkeylen = authkeylen;
707 688
708 return 0; 689 return 0;
709 690