From 136794e5e700785d1e3276c6873369e76af38c28 Mon Sep 17 00:00:00 2001 From: Sun Yimin Date: Sun, 9 Jul 2023 16:53:54 +0800 Subject: [PATCH] =?UTF-8?q?Updated=20SM9=E5=AE=9E=E7=8E=B0=E5=8F=8A?= =?UTF-8?q?=E4=BC=98=E5=8C=96=20(markdown)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SM9实现及优化.md | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/SM9实现及优化.md b/SM9实现及优化.md index 780a163..d0c4802 100644 --- a/SM9实现及优化.md +++ b/SM9实现及优化.md @@ -15,12 +15,27 @@ https://github.com/emmansun/gmsm/blob/7254c055d7a353094a4d3b2c95d17505d2e8e82b/s # SM9的优化 ## 借鉴椭圆曲线实现 -包括标量乘法的借鉴、最后基域实现的借鉴等。 +包括标量乘法的借鉴、应用加法链优化求逆和求平方根、Marshal/Unmarshal的汇编实现、基域运算实现的借鉴等。 ## Pairing实现向bn256实现的回归 -先是FinalExponition的回归,证实其实现的正确性和高效性。 +先是finalExponentiation的回归,证实其实现的正确性和高效性。 接着是乘扭曲线的回归,去掉除数。 +## 1-2-6-12扩域实现及相互转换 +1-2-4-12和1-2-6-12塔式扩域的转换是在一篇文章里看到的,看到后就实现了SM9的1-2-6-12塔式扩域及相互转换。 + +## 分圆子群特殊平方运算 +finalExponentiation中应用特殊平方运算,这是从参考文档看到的,当然人家的是1-2-6-12塔式扩域上的c语言实现,这个特殊平方有效提高了finalExponentiation的性能。 + +## Neg改用Sub实现 +无意中发现Neg方法不如后来实现的Sub性能好。 + +## 米勒运算中的line add/double不新建返回对象 +Go语言相对简单,但是为了简单,编译器做了很多额外的操作,譬如切片操作边界检查;返回栈中对象的内存迁移等等。有些对性能影响还是挺大的。 + +## 应用SIMD复制值 +也就是Set操作的汇编实现,同时也尽量减少Set操作(这个“优化”导致了实现的复杂性、影响了代码的可维护性,可能不值得)。 +