crypto: mips/chacha - remove the skcipher algorithms
authorEric Biggers <ebiggers@google.com>
Sat, 5 Apr 2025 18:26:05 +0000 (11:26 -0700)
committerHerbert Xu <herbert@gondor.apana.org.au>
Mon, 7 Apr 2025 05:22:28 +0000 (13:22 +0800)
Since crypto/chacha.c now registers chacha20-$(ARCH), xchacha20-$(ARCH),
and xchacha12-$(ARCH) skcipher algorithms that use the architecture's
ChaCha and HChaCha library functions, individual architectures no longer
need to do the same.  Therefore, remove the redundant skcipher
algorithms and leave just the library functions.

Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
arch/mips/crypto/Kconfig
arch/mips/crypto/chacha-glue.c

index 545fc0e12422d8e8e7bedb7cf73d2c786e932865..0189686de3a122e3554902e9c11412a044199115 100644 (file)
@@ -56,13 +56,7 @@ config CRYPTO_SHA512_OCTEON
 config CRYPTO_CHACHA_MIPS
        tristate
        depends on CPU_MIPS32_R2
-       select CRYPTO_SKCIPHER
        select CRYPTO_ARCH_HAVE_LIB_CHACHA
        default CRYPTO_LIB_CHACHA_INTERNAL
-       help
-         Length-preserving ciphers: ChaCha20, XChaCha20, and XChaCha12
-         stream cipher algorithms
-
-         Architecture: MIPS32r2
 
 endmenu
index 64ccaeaeaa1e15f821c9d0be9dbd426f647357ab..334ecb29fb8fafd39bd28a9f7e20324661401f59 100644 (file)
@@ -1,15 +1,11 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * MIPS accelerated ChaCha and XChaCha stream ciphers,
- * including ChaCha20 (RFC7539)
+ * ChaCha and HChaCha functions (MIPS optimized)
  *
  * Copyright (C) 2019 Linaro, Ltd. <ard.biesheuvel@linaro.org>
  */
 
-#include <asm/byteorder.h>
-#include <crypto/algapi.h>
-#include <crypto/internal/chacha.h>
-#include <crypto/internal/skcipher.h>
+#include <crypto/chacha.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 
@@ -20,133 +16,12 @@ EXPORT_SYMBOL(chacha_crypt_arch);
 asmlinkage void hchacha_block_arch(const u32 *state, u32 *stream, int nrounds);
 EXPORT_SYMBOL(hchacha_block_arch);
 
-static int chacha_mips_stream_xor(struct skcipher_request *req,
-                                 const struct chacha_ctx *ctx, const u8 *iv)
-{
-       struct skcipher_walk walk;
-       u32 state[16];
-       int err;
-
-       err = skcipher_walk_virt(&walk, req, false);
-
-       chacha_init(state, ctx->key, iv);
-
-       while (walk.nbytes > 0) {
-               unsigned int nbytes = walk.nbytes;
-
-               if (nbytes < walk.total)
-                       nbytes = round_down(nbytes, walk.stride);
-
-               chacha_crypt(state, walk.dst.virt.addr, walk.src.virt.addr,
-                            nbytes, ctx->nrounds);
-               err = skcipher_walk_done(&walk, walk.nbytes - nbytes);
-       }
-
-       return err;
-}
-
-static int chacha_mips(struct skcipher_request *req)
-{
-       struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
-       struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
-
-       return chacha_mips_stream_xor(req, ctx, req->iv);
-}
-
-static int xchacha_mips(struct skcipher_request *req)
-{
-       struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
-       struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
-       struct chacha_ctx subctx;
-       u32 state[16];
-       u8 real_iv[16];
-
-       chacha_init(state, ctx->key, req->iv);
-
-       hchacha_block(state, subctx.key, ctx->nrounds);
-       subctx.nrounds = ctx->nrounds;
-
-       memcpy(&real_iv[0], req->iv + 24, 8);
-       memcpy(&real_iv[8], req->iv + 16, 8);
-       return chacha_mips_stream_xor(req, &subctx, real_iv);
-}
-
-static struct skcipher_alg algs[] = {
-       {
-               .base.cra_name          = "chacha20",
-               .base.cra_driver_name   = "chacha20-mips",
-               .base.cra_priority      = 200,
-               .base.cra_blocksize     = 1,
-               .base.cra_ctxsize       = sizeof(struct chacha_ctx),
-               .base.cra_module        = THIS_MODULE,
-
-               .min_keysize            = CHACHA_KEY_SIZE,
-               .max_keysize            = CHACHA_KEY_SIZE,
-               .ivsize                 = CHACHA_IV_SIZE,
-               .chunksize              = CHACHA_BLOCK_SIZE,
-               .setkey                 = chacha20_setkey,
-               .encrypt                = chacha_mips,
-               .decrypt                = chacha_mips,
-       }, {
-               .base.cra_name          = "xchacha20",
-               .base.cra_driver_name   = "xchacha20-mips",
-               .base.cra_priority      = 200,
-               .base.cra_blocksize     = 1,
-               .base.cra_ctxsize       = sizeof(struct chacha_ctx),
-               .base.cra_module        = THIS_MODULE,
-
-               .min_keysize            = CHACHA_KEY_SIZE,
-               .max_keysize            = CHACHA_KEY_SIZE,
-               .ivsize                 = XCHACHA_IV_SIZE,
-               .chunksize              = CHACHA_BLOCK_SIZE,
-               .setkey                 = chacha20_setkey,
-               .encrypt                = xchacha_mips,
-               .decrypt                = xchacha_mips,
-       }, {
-               .base.cra_name          = "xchacha12",
-               .base.cra_driver_name   = "xchacha12-mips",
-               .base.cra_priority      = 200,
-               .base.cra_blocksize     = 1,
-               .base.cra_ctxsize       = sizeof(struct chacha_ctx),
-               .base.cra_module        = THIS_MODULE,
-
-               .min_keysize            = CHACHA_KEY_SIZE,
-               .max_keysize            = CHACHA_KEY_SIZE,
-               .ivsize                 = XCHACHA_IV_SIZE,
-               .chunksize              = CHACHA_BLOCK_SIZE,
-               .setkey                 = chacha12_setkey,
-               .encrypt                = xchacha_mips,
-               .decrypt                = xchacha_mips,
-       }
-};
-
 bool chacha_is_arch_optimized(void)
 {
        return true;
 }
 EXPORT_SYMBOL(chacha_is_arch_optimized);
 
-static int __init chacha_simd_mod_init(void)
-{
-       return IS_REACHABLE(CONFIG_CRYPTO_SKCIPHER) ?
-               crypto_register_skciphers(algs, ARRAY_SIZE(algs)) : 0;
-}
-
-static void __exit chacha_simd_mod_fini(void)
-{
-       if (IS_REACHABLE(CONFIG_CRYPTO_SKCIPHER))
-               crypto_unregister_skciphers(algs, ARRAY_SIZE(algs));
-}
-
-arch_initcall(chacha_simd_mod_init);
-module_exit(chacha_simd_mod_fini);
-
-MODULE_DESCRIPTION("ChaCha and XChaCha stream ciphers (MIPS accelerated)");
+MODULE_DESCRIPTION("ChaCha and HChaCha functions (MIPS optimized)");
 MODULE_AUTHOR("Ard Biesheuvel <ard.biesheuvel@linaro.org>");
 MODULE_LICENSE("GPL v2");
-MODULE_ALIAS_CRYPTO("chacha20");
-MODULE_ALIAS_CRYPTO("chacha20-mips");
-MODULE_ALIAS_CRYPTO("xchacha20");
-MODULE_ALIAS_CRYPTO("xchacha20-mips");
-MODULE_ALIAS_CRYPTO("xchacha12");
-MODULE_ALIAS_CRYPTO("xchacha12-mips");