@@ -9,7 +9,7 @@
#include <crypto/aes.h>
#include <crypto/algapi.h>
-#include <crypto/des.h>
+#include <crypto/internal/des.h>
#include <crypto/skcipher.h>
#include <crypto/xts.h>
#include <crypto/internal/skcipher.h>
@@ -347,8 +347,11 @@ static int sec_alg_skcipher_setkey_aes_xts(struct crypto_skcipher *tfm,
static int sec_alg_skcipher_setkey_des_ecb(struct crypto_skcipher *tfm,
const u8 *key, unsigned int keylen)
{
- if (keylen != DES_KEY_SIZE)
- return -EINVAL;
+ int err;
+
+ err = crypto_des_verify_key(crypto_skcipher_tfm(tfm), key, keylen);
+ if (unlikely(err))
+ return err;
return sec_alg_skcipher_setkey(tfm, key, keylen, SEC_C_DES_ECB_64);
}
@@ -356,8 +359,11 @@ static int sec_alg_skcipher_setkey_des_ecb(struct crypto_skcipher *tfm,
static int sec_alg_skcipher_setkey_des_cbc(struct crypto_skcipher *tfm,
const u8 *key, unsigned int keylen)
{
- if (keylen != DES_KEY_SIZE)
- return -EINVAL;
+ int err;
+
+ err = crypto_des_verify_key(crypto_skcipher_tfm(tfm), key, keylen);
+ if (unlikely(err))
+ return err;
return sec_alg_skcipher_setkey(tfm, key, keylen, SEC_C_DES_CBC_64);
}
@@ -365,16 +371,26 @@ static int sec_alg_skcipher_setkey_des_cbc(struct crypto_skcipher *tfm,
static int sec_alg_skcipher_setkey_3des_ecb(struct crypto_skcipher *tfm,
const u8 *key, unsigned int keylen)
{
- return unlikely(des3_verify_key(tfm, key)) ?:
- sec_alg_skcipher_setkey(tfm, key, keylen,
+ int err;
+
+ err = crypto_des3_ede_verify_key(crypto_skcipher_tfm(tfm), key, keylen);
+ if (unlikely(err))
+ return err;
+
+ return sec_alg_skcipher_setkey(tfm, key, keylen,
SEC_C_3DES_ECB_192_3KEY);
}
static int sec_alg_skcipher_setkey_3des_cbc(struct crypto_skcipher *tfm,
const u8 *key, unsigned int keylen)
{
- return unlikely(des3_verify_key(tfm, key)) ?:
- sec_alg_skcipher_setkey(tfm, key, keylen,
+ int err;
+
+ err = crypto_des3_ede_verify_key(crypto_skcipher_tfm(tfm), key, keylen);
+ if (unlikely(err))
+ return err;
+
+ return sec_alg_skcipher_setkey(tfm, key, keylen,
SEC_C_3DES_CBC_192_3KEY);
}
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- drivers/crypto/hisilicon/sec/sec_algs.c | 34 ++++++++++++++------ 1 file changed, 25 insertions(+), 9 deletions(-) -- 2.20.1