Updated SM9实现及优化 (markdown)

Sun Yimin 2023-07-09 16:53:54 +08:00
parent 72d9d4ffaf
commit 136794e5e7

@ -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操作这个“优化”导致了实现的复杂性、影响了代码的可维护性可能不值得