crypto: aes - helper function to validate key length for AES algorithms
authorIuliana Prodan <iuliana.prodan@nxp.com>
Wed, 31 Jul 2019 13:05:55 +0000 (16:05 +0300)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 9 Aug 2019 05:11:43 +0000 (15:11 +1000)
Add inline helper function to check key length for AES algorithms.
The key can be 128, 192 or 256 bits size.
This function is used in the generic aes implementation.

Signed-off-by: Iuliana Prodan <iuliana.prodan@nxp.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
include/crypto/aes.h
lib/crypto/aes.c

index 8e0f4cf948e559172b7050a1aeb20a3622d83274..2090729701ab6d7a0d71861c7bd2cf4fb926b38e 100644 (file)
@@ -31,6 +31,23 @@ struct crypto_aes_ctx {
 extern const u32 crypto_ft_tab[4][256] ____cacheline_aligned;
 extern const u32 crypto_it_tab[4][256] ____cacheline_aligned;
 
+/*
+ * validate key length for AES algorithms
+ */
+static inline int aes_check_keylen(unsigned int keylen)
+{
+       switch (keylen) {
+       case AES_KEYSIZE_128:
+       case AES_KEYSIZE_192:
+       case AES_KEYSIZE_256:
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
 int crypto_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
                unsigned int key_len);
 
index 4e100af38c51de22aef0639d42bacf3b9b608b81..827fe89922fff03b9be8e1fcc2d26541c06713bb 100644 (file)
@@ -187,11 +187,11 @@ int aes_expandkey(struct crypto_aes_ctx *ctx, const u8 *in_key,
 {
        u32 kwords = key_len / sizeof(u32);
        u32 rc, i, j;
+       int err;
 
-       if (key_len != AES_KEYSIZE_128 &&
-           key_len != AES_KEYSIZE_192 &&
-           key_len != AES_KEYSIZE_256)
-               return -EINVAL;
+       err = aes_check_keylen(key_len);
+       if (err)
+               return err;
 
        ctx->key_length = key_len;