On 2021/12/22 12:50, Tianjia Zhang Wrote: > SM3 generic library is stand-alone implementation, sm3-ce can depend > on the SM3 library instead of sm3-generic. > > Signed-off-by: Tianjia Zhang <tianjia.zhang@xxxxxxxxxxxxxxxxx> > --- > arch/arm64/crypto/Kconfig | 2 +- > arch/arm64/crypto/sm3-ce-glue.c | 20 ++++++++++++++------ > 2 files changed, 15 insertions(+), 7 deletions(-) > > diff --git a/arch/arm64/crypto/Kconfig b/arch/arm64/crypto/Kconfig > index addfa413650b..2a965aa0188d 100644 > --- a/arch/arm64/crypto/Kconfig > +++ b/arch/arm64/crypto/Kconfig > @@ -45,7 +45,7 @@ config CRYPTO_SM3_ARM64_CE > tristate "SM3 digest algorithm (ARMv8.2 Crypto Extensions)" > depends on KERNEL_MODE_NEON > select CRYPTO_HASH > - select CRYPTO_SM3 > + select CRYPTO_LIB_SM3 > > config CRYPTO_SM4_ARM64_CE > tristate "SM4 symmetric cipher (ARMv8.2 Crypto Extensions)" > diff --git a/arch/arm64/crypto/sm3-ce-glue.c b/arch/arm64/crypto/sm3-ce-glue.c > index d71faca322f2..3198f31c9446 100644 > --- a/arch/arm64/crypto/sm3-ce-glue.c > +++ b/arch/arm64/crypto/sm3-ce-glue.c > @@ -27,7 +27,7 @@ static int sm3_ce_update(struct shash_desc *desc, const u8 *data, > unsigned int len) > { > if (!crypto_simd_usable()) > - return crypto_sm3_update(desc, data, len); > + return sm3_update(shash_desc_ctx(desc), data, len); > > kernel_neon_begin(); > sm3_base_do_update(desc, data, len, sm3_ce_transform); > @@ -39,7 +39,7 @@ static int sm3_ce_update(struct shash_desc *desc, const u8 *data, > static int sm3_ce_final(struct shash_desc *desc, u8 *out) > { > if (!crypto_simd_usable()) > - return crypto_sm3_finup(desc, NULL, 0, out); > + return sm3_final(shash_desc_ctx(desc), out); > > kernel_neon_begin(); > sm3_base_do_finalize(desc, sm3_ce_transform); > @@ -51,14 +51,22 @@ static int sm3_ce_final(struct shash_desc *desc, u8 *out) > static int sm3_ce_finup(struct shash_desc *desc, const u8 *data, > unsigned int len, u8 *out) > { > - if (!crypto_simd_usable()) > - return crypto_sm3_finup(desc, data, len, out); > + if (!crypto_simd_usable()) { > + struct sm3_state *sctx = shash_desc_ctx(desc); > + > + if (len) > + sm3_update(sctx, data, len); > + sm3_final(sctx, out); > + return 0; > + } > > kernel_neon_begin(); > - sm3_base_do_update(desc, data, len, sm3_ce_transform); > + if (len) > + sm3_base_do_update(desc, data, len, sm3_ce_transform); > + sm3_base_do_finalize(desc, sm3_ce_transform); > kernel_neon_end(); > > - return sm3_ce_final(desc, out); > + return sm3_base_finish(desc, out); > } > > static struct shash_alg sm3_alg = { >You have modified the implementation of SM3 algorithm, so what benefits will be gained after such modification? What flaws are solved or can performance be improved? Thanks. Longfang.