diff options
Diffstat (limited to 'drivers/crypto/ccree/cc_aead.c')
-rw-r--r-- | drivers/crypto/ccree/cc_aead.c | 24 |
1 files changed, 4 insertions, 20 deletions
diff --git a/drivers/crypto/ccree/cc_aead.c b/drivers/crypto/ccree/cc_aead.c index a9779a212b18..d3e8faa03f15 100644 --- a/drivers/crypto/ccree/cc_aead.c +++ b/drivers/crypto/ccree/cc_aead.c | |||
@@ -6,7 +6,7 @@ | |||
6 | #include <crypto/algapi.h> | 6 | #include <crypto/algapi.h> |
7 | #include <crypto/internal/aead.h> | 7 | #include <crypto/internal/aead.h> |
8 | #include <crypto/authenc.h> | 8 | #include <crypto/authenc.h> |
9 | #include <crypto/des.h> | 9 | #include <crypto/internal/des.h> |
10 | #include <linux/rtnetlink.h> | 10 | #include <linux/rtnetlink.h> |
11 | #include "cc_driver.h" | 11 | #include "cc_driver.h" |
12 | #include "cc_buffer_mgr.h" | 12 | #include "cc_buffer_mgr.h" |
@@ -649,33 +649,17 @@ static int cc_des3_aead_setkey(struct crypto_aead *aead, const u8 *key, | |||
649 | unsigned int keylen) | 649 | unsigned int keylen) |
650 | { | 650 | { |
651 | struct crypto_authenc_keys keys; | 651 | struct crypto_authenc_keys keys; |
652 | u32 flags; | ||
653 | int err; | 652 | int err; |
654 | 653 | ||
655 | err = crypto_authenc_extractkeys(&keys, key, keylen); | 654 | err = crypto_authenc_extractkeys(&keys, key, keylen); |
656 | if (unlikely(err)) | 655 | if (unlikely(err)) |
657 | goto badkey; | 656 | return err; |
658 | |||
659 | err = -EINVAL; | ||
660 | if (keys.enckeylen != DES3_EDE_KEY_SIZE) | ||
661 | goto badkey; | ||
662 | 657 | ||
663 | flags = crypto_aead_get_flags(aead); | 658 | err = verify_aead_des3_key(aead, keys.enckey, keys.enckeylen) ?: |
664 | err = __des3_verify_key(&flags, keys.enckey); | 659 | cc_aead_setkey(aead, key, keylen); |
665 | if (unlikely(err)) { | ||
666 | crypto_aead_set_flags(aead, flags); | ||
667 | goto out; | ||
668 | } | ||
669 | 660 | ||
670 | err = cc_aead_setkey(aead, key, keylen); | ||
671 | |||
672 | out: | ||
673 | memzero_explicit(&keys, sizeof(keys)); | 661 | memzero_explicit(&keys, sizeof(keys)); |
674 | return err; | 662 | return err; |
675 | |||
676 | badkey: | ||
677 | crypto_aead_set_flags(aead, CRYPTO_TFM_RES_BAD_KEY_LEN); | ||
678 | goto out; | ||
679 | } | 663 | } |
680 | 664 | ||
681 | static int cc_rfc4309_ccm_setkey(struct crypto_aead *tfm, const u8 *key, | 665 | static int cc_rfc4309_ccm_setkey(struct crypto_aead *tfm, const u8 *key, |