Updated SM9实现及优化 (markdown)

Sun Yimin 2023-07-09 17:02:19 +08:00
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比较简单改造程度不大主要是添加测试确保正确性。接着实现gfP4gfP12基础算法加、减、乘、平方相对容易共轭Conjucate和Frobenius运算花了相对多一点时间。
第二步以bn256项目为基础基于SM9参数实现1-2-4-12塔式扩域。gfP和gfP2比较简单改造程度不大主要是添加测试确保正确性。接着实现gfP4gfP12基础算法加、减、乘、平方相对容易共轭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的回归去掉除数。