在 2023/12/1 17:27, Herbert Xu 写道:
On Wed, Nov 22, 2023 at 02:43:55PM +0800, LeoLiu-oc wrote:
From: LeoLiuoc <LeoLiu-oc@xxxxxxxxxxx>
Add support for SM2 (ShangMi 2) public key algorithm by Zhaoxin GMI
Instruction. The purpose of this driver is to ensure that the application
has both high performance and high security.
---
v1 -> v2:
1. The assembly code is modified to be embedded in the .c file.
2. Optimize code style and details.
v2 -> v3:
1. Increase compatibility with i386 architecture.
2. Optimize variable and return value types in some functions..
Signed-off-by: LeoLiuoc <LeoLiu-oc@xxxxxxxxxxx>
---
arch/x86/crypto/Kconfig | 11 ++
arch/x86/crypto/Makefile | 2 +
arch/x86/crypto/sm2-zhaoxin-gmi_glue.c | 158 +++++++++++++++++++++++++
arch/x86/include/asm/cpufeatures.h | 2 +
4 files changed, 173 insertions(+)
create mode 100644 arch/x86/crypto/sm2-zhaoxin-gmi_glue.c
diff --git a/arch/x86/crypto/Kconfig b/arch/x86/crypto/Kconfig
index 9bbfd01cfa2f..974d4c3806ff 100644
--- a/arch/x86/crypto/Kconfig
+++ b/arch/x86/crypto/Kconfig
@@ -519,4 +519,15 @@ config CRYPTO_CRCT10DIF_PCLMUL
Architecture: x86_64 using:
- PCLMULQDQ (carry-less multiplication)
+config CRYPTO_SM2_ZHAOXIN_GMI
+ tristate "SM2 Cipher algorithm (Zhaoxin GMI Instruction)"
+ depends on X86 && (CPU_SUP_CENTAUR || CPU_SUP_ZHAOXIN)
+ select CRYPTO_AKCIPHER
+ select CRYPTO_MANAGER
Why does this depend on CRYPTO_MANAGER?
Yes, this is redundant and will be removed in the next version.
+static int zhaoxin_sm2_verify(struct akcipher_request *req)
+{
+ struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
+ struct sm2_cipher_data *ec = akcipher_tfm_ctx(tfm);
+ unsigned char *buffer;
+ int ret, buf_len;
+
+ buf_len = req->src_len + req->dst_len;
What if this overflows? I know you copied this from the generic sm2
code, but that's still broken and both should be fixed up.
Thanks,
Yes, you are right. Thank you for your advice. The variable types will
be adjusted according to the actual needs of the code in the next version.
Sincerely,
LeoLiu-oc