Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org>
---
 drivers/crypto/hisilicon/sec/sec_algs.c | 34 ++++++++++++++------
 1 file changed, 25 insertions(+), 9 deletions(-)

diff --git a/drivers/crypto/hisilicon/sec/sec_algs.c 
b/drivers/crypto/hisilicon/sec/sec_algs.c
index 02768af0dccd..7d563188d80c 100644
--- a/drivers/crypto/hisilicon/sec/sec_algs.c
+++ b/drivers/crypto/hisilicon/sec/sec_algs.c
@@ -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);
 }
 
-- 
2.20.1

Reply via email to