[PATCH] crypto: spacc - Use crypto_authenc_extractkeys

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Use the crypto_authenc_extractkeys helper rather than ad-hoc parsing.

Signed-off-by: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>

diff --git a/drivers/crypto/dwc-spacc/spacc_aead.c b/drivers/crypto/dwc-spacc/spacc_aead.c
index 3468ff605957..3a617da9007d 100755
--- a/drivers/crypto/dwc-spacc/spacc_aead.c
+++ b/drivers/crypto/dwc-spacc/spacc_aead.c
@@ -5,7 +5,6 @@
 #include <crypto/gcm.h>
 #include <crypto/aead.h>
 #include <crypto/authenc.h>
-#include <linux/rtnetlink.h>
 #include <crypto/scatterwalk.h>
 #include <crypto/internal/aead.h>
 #include <linux/platform_device.h>
@@ -540,15 +539,13 @@ static int spacc_aead_setkey(struct crypto_aead *tfm, const u8 *key,
 {
 	struct spacc_crypto_ctx *ctx  = crypto_aead_ctx(tfm);
 	const struct spacc_alg  *salg = spacc_tfm_aead(&tfm->base);
+	struct crypto_authenc_keys authenc_keys;
 	struct spacc_priv	*priv;
-	struct rtattr *rta = (void *)key;
-	struct crypto_authenc_key_param *param;
 	unsigned int authkeylen, enckeylen;
 	const unsigned char *authkey, *enckey;
 	unsigned char xcbc[64];
-
-	int err = -EINVAL;
 	int singlekey = 0;
+	int err;
 
 	/* are keylens valid? */
 	ctx->ctx_valid = false;
@@ -569,26 +566,14 @@ static int spacc_aead_setkey(struct crypto_aead *tfm, const u8 *key,
 		goto skipover;
 	}
 
-	if (!RTA_OK(rta, keylen)		       ||
-	    rta->rta_type != CRYPTO_AUTHENC_KEYA_PARAM ||
-	    RTA_PAYLOAD(rta) < sizeof(*param))
-		return -EINVAL;
+	err = crypto_authenc_extractkeys(&authenc_keys, key, keylen);
+	if (err)
+		return err;
 
-	param	  = RTA_DATA(rta);
-	enckeylen = be32_to_cpu(param->enckeylen);
-	key	 += RTA_ALIGN(rta->rta_len);
-	keylen	 -= RTA_ALIGN(rta->rta_len);
-
-	if (keylen < enckeylen)
-		return -EINVAL;
-
-	authkeylen = keylen - enckeylen;
-
-	/* enckey is at &key[authkeylen] and
-	 * authkey is at &key[0]
-	 */
-	authkey = &key[0];
-	enckey  = &key[authkeylen];
+	authkeylen = authenc_keys.authkeylen;
+	authkey = authenc_keys.authkey;
+	enckeylen = authenc_keys.enckeylen;
+	enckey  = authenc_keys.enckey;
 
 skipover:
 	/* detect RFC3686/4106 and trim from enckeylen(and copy salt..) */
-- 
Email: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt




[Index of Archives]     [Kernel]     [Gnu Classpath]     [Gnu Crypto]     [DM Crypt]     [Netfilter]     [Bugtraq]
  Powered by Linux