From b2fef5212f27f72e601888cd5d9e2ad80cd5a2da Mon Sep 17 00:00:00 2001 From: Sun Yimin Date: Thu, 11 Feb 2021 13:16:28 +0800 Subject: [PATCH] Updated Home (markdown) --- Home.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Home.md b/Home.md index ad23b29..efd179a 100644 --- a/Home.md +++ b/Home.md @@ -12,7 +12,7 @@ * 首先,替换掉p256_asm.go和p256_asm_amd64.s中的常量,这一步还是比较顺利,毕竟有一定经验了。 * 接着,就是要修改p256_asm_amd64.s中的实现了,主要是蒙哥马利约简,模P的和模N的实现,原本的实现都是基于NIST P256的参数P和N进行优化的,改造起来困难挺大,为了验证结果,对每个主要的asm实现方法都写了测试,保证正确性。 * p256_asm.go中p256Inverse的改造,因为有经验,比较顺利。 - * 然后,测试两个多倍点算法ScalarMult/ScalarBaseMult的正确性,通过和elliptic.CurveParams默认实现来鉴定。到此,sm2的加解密已经可以验证了! + * 然后,测试两个多倍点算法ScalarMult/ScalarBaseMult的正确性,通过和elliptic.CurveParams默认实现结果比较来鉴定。到此,sm2的加解密已经可以验证了! * 最后,修改实现`(curve p256Curve) Inverse(k *big.Int) *big.Int`,这个是第一次改造,费了点功夫,这个方法以及CombinedMult方法在签名和验签中有用,能提高性能。 这个实现的性能,据我测试,在amd64下,加解密大概是elliptic.CurveParams默认实现性能的**50**倍,大概是那个纯golang 32位实现的性能的**10**倍。签名和验签我没做性能测试,不过应该也有很大提高。这个性能已经和SM2基于NIST P256曲线实现的性能相当接近了,考虑到SM2 256曲线的参数复杂度,这个性能算是不错的了。