aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crypto/des_generic.c9
-rw-r--r--drivers/crypto/Kconfig2
-rw-r--r--drivers/crypto/hifn_795x.c11
3 files changed, 17 insertions, 5 deletions
diff --git a/crypto/des_generic.c b/crypto/des_generic.c
index f75eafe1a875..355ecb71cb0d 100644
--- a/crypto/des_generic.c
+++ b/crypto/des_generic.c
@@ -628,7 +628,7 @@ static const u32 S8[64] = {
628 * Choice 1 has operated on the key. 628 * Choice 1 has operated on the key.
629 * 629 *
630 */ 630 */
631static unsigned long ekey(u32 *pe, const u8 *k) 631unsigned long des_ekey(u32 *pe, const u8 *k)
632{ 632{
633 /* K&R: long is at least 32 bits */ 633 /* K&R: long is at least 32 bits */
634 unsigned long a, b, c, d, w; 634 unsigned long a, b, c, d, w;
@@ -703,6 +703,7 @@ static unsigned long ekey(u32 *pe, const u8 *k)
703 /* Zero if weak key */ 703 /* Zero if weak key */
704 return w; 704 return w;
705} 705}
706EXPORT_SYMBOL_GPL(des_ekey);
706 707
707/* 708/*
708 * Decryption key expansion 709 * Decryption key expansion
@@ -786,7 +787,7 @@ static int des_setkey(struct crypto_tfm *tfm, const u8 *key,
786 int ret; 787 int ret;
787 788
788 /* Expand to tmp */ 789 /* Expand to tmp */
789 ret = ekey(tmp, key); 790 ret = des_ekey(tmp, key);
790 791
791 if (unlikely(ret == 0) && (*flags & CRYPTO_TFM_REQ_WEAK_KEY)) { 792 if (unlikely(ret == 0) && (*flags & CRYPTO_TFM_REQ_WEAK_KEY)) {
792 *flags |= CRYPTO_TFM_RES_WEAK_KEY; 793 *flags |= CRYPTO_TFM_RES_WEAK_KEY;
@@ -873,9 +874,9 @@ static int des3_ede_setkey(struct crypto_tfm *tfm, const u8 *key,
873 return -EINVAL; 874 return -EINVAL;
874 } 875 }
875 876
876 ekey(expkey, key); expkey += DES_EXPKEY_WORDS; key += DES_KEY_SIZE; 877 des_ekey(expkey, key); expkey += DES_EXPKEY_WORDS; key += DES_KEY_SIZE;
877 dkey(expkey, key); expkey += DES_EXPKEY_WORDS; key += DES_KEY_SIZE; 878 dkey(expkey, key); expkey += DES_EXPKEY_WORDS; key += DES_KEY_SIZE;
878 ekey(expkey, key); 879 des_ekey(expkey, key);
879 880
880 return 0; 881 return 0;
881} 882}
diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig
index 1ef7697fc998..c2de1351819f 100644
--- a/drivers/crypto/Kconfig
+++ b/drivers/crypto/Kconfig
@@ -85,9 +85,9 @@ config ZCRYPT_MONOLITHIC
85 85
86config CRYPTO_DEV_HIFN_795X 86config CRYPTO_DEV_HIFN_795X
87 tristate "Driver HIFN 795x crypto accelerator chips" 87 tristate "Driver HIFN 795x crypto accelerator chips"
88 select CRYPTO_DES
88 select CRYPTO_ALGAPI 89 select CRYPTO_ALGAPI
89 select CRYPTO_ABLKCIPHER 90 select CRYPTO_ABLKCIPHER
90 select CRYPTO_BLKCIPHER
91 help 91 help
92 This option allows you to have support for HIFN 795x crypto adapters. 92 This option allows you to have support for HIFN 795x crypto adapters.
93 93
diff --git a/drivers/crypto/hifn_795x.c b/drivers/crypto/hifn_795x.c
index e3376f2236b2..391c20a3dff8 100644
--- a/drivers/crypto/hifn_795x.c
+++ b/drivers/crypto/hifn_795x.c
@@ -29,6 +29,7 @@
29#include <linux/crypto.h> 29#include <linux/crypto.h>
30 30
31#include <crypto/algapi.h> 31#include <crypto/algapi.h>
32#include <crypto/des.h>
32 33
33#include <asm/kmap_types.h> 34#include <asm/kmap_types.h>
34 35
@@ -1924,6 +1925,16 @@ static int hifn_setkey(struct crypto_ablkcipher *cipher, const u8 *key,
1924 return -1; 1925 return -1;
1925 } 1926 }
1926 1927
1928 if (len == HIFN_DES_KEY_LENGTH) {
1929 u32 tmp[DES_EXPKEY_WORDS];
1930 int ret = des_ekey(tmp, key);
1931
1932 if (unlikely(ret == 0) && (tfm->crt_flags & CRYPTO_TFM_REQ_WEAK_KEY)) {
1933 tfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY;
1934 return -EINVAL;
1935 }
1936 }
1937
1927 dev->flags &= ~HIFN_FLAG_OLD_KEY; 1938 dev->flags &= ~HIFN_FLAG_OLD_KEY;
1928 1939
1929 memcpy(ctx->key, key, len); 1940 memcpy(ctx->key, key, len);