crypto: hisilicon/sec2 - Fix aead authentication setting key error
authorKai Ye <yekai13@huawei.com>
Mon, 9 Nov 2020 09:00:27 +0000 (17:00 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 20 Nov 2020 03:45:32 +0000 (14:45 +1100)
Fix aead auth setting key process error. if use soft shash function, driver
need to use digest size replace of the user input key length.

Signed-off-by: Kai Ye <yekai13@huawei.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/hisilicon/sec2/sec_crypto.c

index 87bc08a..891e049 100644 (file)
@@ -857,7 +857,7 @@ static int sec_aead_auth_set_key(struct sec_auth_ctx *ctx,
                                 struct crypto_authenc_keys *keys)
 {
        struct crypto_shash *hash_tfm = ctx->hash_tfm;
-       int blocksize, ret;
+       int blocksize, digestsize, ret;
 
        if (!keys->authkeylen) {
                pr_err("hisi_sec2: aead auth key error!\n");
@@ -865,6 +865,7 @@ static int sec_aead_auth_set_key(struct sec_auth_ctx *ctx,
        }
 
        blocksize = crypto_shash_blocksize(hash_tfm);
+       digestsize = crypto_shash_digestsize(hash_tfm);
        if (keys->authkeylen > blocksize) {
                ret = crypto_shash_tfm_digest(hash_tfm, keys->authkey,
                                              keys->authkeylen, ctx->a_key);
@@ -872,7 +873,7 @@ static int sec_aead_auth_set_key(struct sec_auth_ctx *ctx,
                        pr_err("hisi_sec2: aead auth digest error!\n");
                        return -EINVAL;
                }
-               ctx->a_key_len = blocksize;
+               ctx->a_key_len = digestsize;
        } else {
                memcpy(ctx->a_key, keys->authkey, keys->authkeylen);
                ctx->a_key_len = keys->authkeylen;