mirror of
https://github.com/emmansun/gmsm.git
synced 2025-05-11 03:26:17 +08:00
Updated SM9实现及优化 (markdown)
parent
72d9d4ffaf
commit
136794e5e7
19
SM9实现及优化.md
19
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操作(这个“优化”导致了实现的复杂性、影响了代码的可维护性,可能不值得)。
|
||||
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user