提交 690b9f5b 编写于 作者: T Tianjia Zhang 提交者: Zheng Zengkai

crypto: arm64/sm3-ce - make dependent on sm3 library

mainline inclusion
from mainline-v5.18-rc1
commit f3a03d31
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I50ABL

--------------------------------

SM3 generic library is stand-alone implementation, sm3-ce can depend
on the SM3 library instead of sm3-generic.
Signed-off-by: NTianjia Zhang <tianjia.zhang@linux.alibaba.com>
Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: NGUO Zihua <guozihua@huawei.com>
Reviewed-by: NWang Weiyang <wangweiyang2@huawei.com>
Reviewed-by: NXiu Jianfeng <xiujianfeng@huawei.com>
Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
上级 80135582
...@@ -45,7 +45,7 @@ config CRYPTO_SM3_ARM64_CE ...@@ -45,7 +45,7 @@ config CRYPTO_SM3_ARM64_CE
tristate "SM3 digest algorithm (ARMv8.2 Crypto Extensions)" tristate "SM3 digest algorithm (ARMv8.2 Crypto Extensions)"
depends on KERNEL_MODE_NEON depends on KERNEL_MODE_NEON
select CRYPTO_HASH select CRYPTO_HASH
select CRYPTO_SM3 select CRYPTO_LIB_SM3
config CRYPTO_SM4_ARM64_CE config CRYPTO_SM4_ARM64_CE
tristate "SM4 symmetric cipher (ARMv8.2 Crypto Extensions)" tristate "SM4 symmetric cipher (ARMv8.2 Crypto Extensions)"
......
...@@ -26,8 +26,10 @@ asmlinkage void sm3_ce_transform(struct sm3_state *sst, u8 const *src, ...@@ -26,8 +26,10 @@ asmlinkage void sm3_ce_transform(struct sm3_state *sst, u8 const *src,
static int sm3_ce_update(struct shash_desc *desc, const u8 *data, static int sm3_ce_update(struct shash_desc *desc, const u8 *data,
unsigned int len) unsigned int len)
{ {
if (!crypto_simd_usable()) if (!crypto_simd_usable()) {
return crypto_sm3_update(desc, data, len); sm3_update(shash_desc_ctx(desc), data, len);
return 0;
}
kernel_neon_begin(); kernel_neon_begin();
sm3_base_do_update(desc, data, len, sm3_ce_transform); sm3_base_do_update(desc, data, len, sm3_ce_transform);
...@@ -38,8 +40,10 @@ static int sm3_ce_update(struct shash_desc *desc, const u8 *data, ...@@ -38,8 +40,10 @@ static int sm3_ce_update(struct shash_desc *desc, const u8 *data,
static int sm3_ce_final(struct shash_desc *desc, u8 *out) static int sm3_ce_final(struct shash_desc *desc, u8 *out)
{ {
if (!crypto_simd_usable()) if (!crypto_simd_usable()) {
return crypto_sm3_finup(desc, NULL, 0, out); sm3_final(shash_desc_ctx(desc), out);
return 0;
}
kernel_neon_begin(); kernel_neon_begin();
sm3_base_do_finalize(desc, sm3_ce_transform); sm3_base_do_finalize(desc, sm3_ce_transform);
...@@ -51,14 +55,22 @@ static int sm3_ce_final(struct shash_desc *desc, u8 *out) ...@@ -51,14 +55,22 @@ static int sm3_ce_final(struct shash_desc *desc, u8 *out)
static int sm3_ce_finup(struct shash_desc *desc, const u8 *data, static int sm3_ce_finup(struct shash_desc *desc, const u8 *data,
unsigned int len, u8 *out) unsigned int len, u8 *out)
{ {
if (!crypto_simd_usable()) if (!crypto_simd_usable()) {
return crypto_sm3_finup(desc, data, len, out); struct sm3_state *sctx = shash_desc_ctx(desc);
if (len)
sm3_update(sctx, data, len);
sm3_final(sctx, out);
return 0;
}
kernel_neon_begin(); kernel_neon_begin();
if (len)
sm3_base_do_update(desc, data, len, sm3_ce_transform); sm3_base_do_update(desc, data, len, sm3_ce_transform);
sm3_base_do_finalize(desc, sm3_ce_transform);
kernel_neon_end(); kernel_neon_end();
return sm3_ce_final(desc, out); return sm3_base_finish(desc, out);
} }
static struct shash_alg sm3_alg = { static struct shash_alg sm3_alg = {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册