OSDN Git Service

ASoC: cros_ec_codec: switch to library API for SHA-256
authorArd Biesheuvel <ardb@kernel.org>
Fri, 15 May 2020 10:03:09 +0000 (12:03 +0200)
committerMark Brown <broonie@kernel.org>
Fri, 15 May 2020 10:56:52 +0000 (11:56 +0100)
The CrOS EC codec driver uses SHA-256 explicitly, and not in a
performance critical manner, so there is really no point in using
the SHASH crypto API here. Let's switch to the library API instead.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Reviewed-by: Tzung-Bi Shih <tzungbi@google.com>
Cc: Cheng-Yi Chiang <cychiang@chromium.org>
Cc: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Cc: Guenter Roeck <groeck@chromium.org>
Cc: Benson Leung <bleung@chromium.org>
Cc: Liam Girdwood <lgirdwood@gmail.com>
Cc: Mark Brown <broonie@kernel.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Eric Biggers <ebiggers@kernel.org>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Tzung-Bi Shih <tzungbi@google.com>
Link: https://lore.kernel.org/r/20200515100309.20795-1-ardb@kernel.org
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/Kconfig
sound/soc/codecs/cros_ec_codec.c

index 44b8c4c..2d4f1b4 100644 (file)
@@ -538,8 +538,7 @@ config SND_SOC_CQ0093VC
 config SND_SOC_CROS_EC_CODEC
        tristate "codec driver for ChromeOS EC"
        depends on CROS_EC
-       select CRYPTO
-       select CRYPTO_SHA256
+       select CRYPTO_LIB_SHA256
        help
          If you say yes here you will get support for the
          ChromeOS Embedded Controller's Audio Codec.
index 1948bc6..8d45c62 100644 (file)
@@ -8,7 +8,6 @@
  * EC for audio function.
  */
 
-#include <crypto/hash.h>
 #include <crypto/sha.h>
 #include <linux/acpi.h>
 #include <linux/delay.h>
@@ -107,25 +106,11 @@ error:
 static int calculate_sha256(struct cros_ec_codec_priv *priv,
                            uint8_t *buf, uint32_t size, uint8_t *digest)
 {
-       struct crypto_shash *tfm;
-       struct shash_desc *desc;
+       struct sha256_state sctx;
 
-       tfm = crypto_alloc_shash("sha256", CRYPTO_ALG_TYPE_SHASH, 0);
-       if (IS_ERR(tfm)) {
-               dev_err(priv->dev, "can't alloc shash\n");
-               return PTR_ERR(tfm);
-       }
-       desc = kmalloc(sizeof(*desc) + crypto_shash_descsize(tfm), GFP_KERNEL);
-       if (!desc) {
-               crypto_free_shash(tfm);
-               return -ENOMEM;
-       }
-       desc->tfm = tfm;
-       crypto_shash_digest(desc, buf, size, digest);
-       shash_desc_zero(desc);
-
-       kfree(desc);
-       crypto_free_shash(tfm);
+       sha256_init(&sctx);
+       sha256_update(&sctx, buf, size);
+       sha256_final(&sctx, digest);
 
 #ifdef DEBUG
        {