mirror of
https://github.com/emmansun/gmsm.git
synced 2025-05-11 03:26:17 +08:00
Updated SM9实现及优化 (markdown)
parent
3309bd888d
commit
42facd0d0c
@ -4,7 +4,7 @@
|
||||
第一步自然是寻找参考实现,找了一下,[bn256](https://github.com/cloudflare/bn256),优点是:基域通过汇编实现了乘法、加法、减法等;完整的1-2-6-12塔式扩域;优化的pairing实现;完善的代码注释,可以容易找到参考文档。缺点是:SM9以1-2-4-12塔式扩域为准,基于bn256代码改造的实现很难验证正确性(尤其对于初始实现者来说)。
|
||||
[gmssl sm9](https://github.com/guanzhi/GmSSL/blob/develop/src/sm9_alg.c),优点是:1-2-4-12塔式扩域;正确性。缺点是:纯c语言实现,代码注释少,基本无优化。
|
||||
|
||||
第二步:以bn256为基础,基于SM9参数实现1-2-4-12塔式扩域。gfP和gfP2比较简单,改造程度不大,主要是添加测试,确保正确性。接着实现gfP4,gfP12,基础算法加、减、乘、平方相对容易,共轭Conjucate和Frobenius运算花了相对多一点时间。
|
||||
第二步:以bn256项目为基础,基于SM9参数实现1-2-4-12塔式扩域。gfP和gfP2比较简单,改造程度不大,主要是添加测试,确保正确性。接着实现gfP4,gfP12,基础算法加、减、乘、平方相对容易,共轭Conjucate和Frobenius运算花了相对多一点时间。
|
||||
|
||||
第三步:参考sm9_alg.c和bn256,实现Pairing,这一步花了最多的时间。那时候的实现是这样的:[bn_pair.go](
|
||||
https://github.com/emmansun/gmsm/blob/7254c055d7a353094a4d3b2c95d17505d2e8e82b/sm9/bn_pair.go)。第三步做完,基础已完成。
|
||||
@ -17,7 +17,7 @@ https://github.com/emmansun/gmsm/blob/7254c055d7a353094a4d3b2c95d17505d2e8e82b/s
|
||||
## 借鉴椭圆曲线实现
|
||||
包括标量乘法的借鉴、应用加法链优化求逆和求平方根、Marshal/Unmarshal的汇编实现、基域运算实现的借鉴等。
|
||||
|
||||
## Pairing实现向bn256实现的回归
|
||||
## Pairing实现向bn256项目Pairing实现的回归
|
||||
先是finalExponentiation的回归,证实其实现的正确性和高效性。
|
||||
|
||||
接着是乘扭曲线(mulLine)的回归,去掉除数。
|
||||
|
Loading…
x
Reference in New Issue
Block a user