Code Monkey home page Code Monkey logo

nano-sm2's Introduction

nano-sm2

这是一个8位处理器上的SM2实现,未使用openssl等第三方库,目前仅支持256位SM2。代码基于nano-ecc实现(8位处理器上的ecc实现,详情见 https://github.com/iSECPartners/nano-ecc )。

SM2与ecc的区别主要在于曲线参数的选择不同,另外在签名,验签的过程中也有一点区别,SM2的官方文档以及官方推荐参数可以参考 http://www.oscca.gov.cn/News/201012/News_1197.htm

Changes

本代码主要在以下几方面对nano-ecc进行了改动:

  • 大数模运算 - nano-ecc在实现大数模运算的过程中,根据《Mathematical routines for the NIST prime elliptic curves》文档(https://koclab.cs.ucsb.edu/teaching/cren/docs/w02/nist-routines.pdf )给出的方法,对模标准ecc参数p的运算进行了优化,故其模运算仅适用于标准ecc的曲线参数(nano-ecc这一部分代码也是参考的linux内核源码)。本代码根据其优化方法,实现了对256位SM2算法的推荐参数的算法优化,可以快速得到与SM2推荐参数p相关的模运算结果;

  • 签名过程 - 本代码完全按照SM2签名过程实现;

  • 验签过程 - 本代码完全按照SM2验签过程实现。

Usage Notes

使用时只需将sm2.h与sm2.c加入自己的项目工程中,然后再include头文件sm2.h即可。test_sm2.c为一个测试算法的样例。密钥对可用apps/makekeys.c来生成。

Parameters

另附本代码使用的SM2官方推荐参数(256位):
椭圆曲线方程:y^2 = x^3 + ax + b
曲线参数:
p=FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFF
a=FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFC
b=28E9FA9E 9D9F5E34 4D5A9E4B CF6509A7 F39789F5 15AB8F92 DDBCBD41 4D940E93
n=FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF 7203DF6B 21C6052B 53BBF409 39D54123
Gx=32C4AE2C 1F198119 5F990446 6A39C994 8FE30BBF F2660BE1 715A4589 334C74C7
Gy=BC3736A2 F4F6779C 59BDCEE3 6B692153 D0A9877C C62A4740 02DF32E5 2139F0A0

nano-sm2's People

Contributors

aries-orz avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.