# SM9_FREE
标识密码算法SM9(IBC)实现,包括密钥生成、签名验签、密钥交换和加解密等SM9标准中提到的所有功能。
该实现基于[Miracl密码库](https://github.com/miracl/MIRACL)
采用C语言编写,可支持X86、X86_64、ARM等多平台编译。
# 源码关系
[Miracl密码库](https://github.com/miracl/MIRACL)比较庞大,因此只截取出其中最核心的部分,包括大整数运算,Fp,Fp^2,Fp^4域计算以及Fp和Fp^2上椭圆曲线基础计算等功能。
依赖的所有[Miracl密码库](https://github.com/miracl/MIRACL)文件在文件夹 [SM9_FREE/miracl](https://github.com/songgeng87/SM9_FREE/tree/master/SM9_FREE/miracl) 内。
在 [Miracl密码库](https://github.com/miracl/MIRACL) 基础之上,实现了满足SM9扩域需求的Fp^12和ate-pairing实现,最后在此之上完成了SM9的密钥生成、签名验签、密钥交换和加解密等功能。
所有和SM9相关的文件都在文件夹 [SM9_FREE/sm9](https://github.com/songgeng87/SM9_FREE/tree/master/SM9_FREE/sm9)内。
[SM9Test.c](https://github.com/songgeng87/SM9_FREE/tree/master/SM9_FREE/SM9Test.c)文件内是简单的测试用例,同时对性能做了简单的统计。
# SM9编译测试
可以直接用XCODE进行编译测试
也可用gcc进行编译
make test
./test
# SM9使用方法
#具体返回错误码等可参考sm9_algorithm.h文件
1. 首先需要初始化参数(使用SM9 第五部分 指定的曲线类型和主密钥初始化系统):
SM9_Init(0,0,32,NULL,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL );
2. 如果想要使用签名部分
2.1 需要首先生成签名公私钥对:
SM9_MSK msk = SM9_MSK_New(32, cks); // 申明一个签名主密钥
SM9_MSPK mspk = SM9_MSPK_New(32); //申明一个主签名公钥
SM9_GenMSignPubKey(&msk, &mspk); // 生成主签名公钥
2.2 启动签名验签lib
gg = SM9_Set_Sign(mspk.x1, mspk.x2, mspk.y1, mspk.y2, NULL); // 启动签名lib
第二次启动时候可以使用上述生成的gg
SM9_Set_Sign(NULL, NULL, NULL, NULL, gg);
2.3 针对具体id生成签名私钥
SM9_PK pk = SM9_PK_New(5, id); // 申明一个签名公钥
SM9_SSK sk = SM9_SSK_New(32); // 申明一个签名私钥
SM9_GenSignSecKey(&sk, &pk, &msk); // 由公钥(id)生成签名私钥
2.4 完成签名
SM9_Sign sign = SM9_Sign_New(32); // 申明一个签名体
SM9_Signature(msg, 20, rand, &sk, &sign); //签名
2.5 验签部分
单独使用验签,同样需要先初始化参数
SM9_Init(0,0,32,NULL,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL );
和启动签名验签lib
SM9_Set_Sign(NULL, NULL, NULL, NULL, gg);
随后可以根据用户id完成验签
SM9_Verify(msg, 20, &sign, &pk, NULL);
# 开源协议
本代码遵循BSD开源协议,欢迎大家使用
# 性能
在cpu i7 2.3G, 64位单线程环境下:
签名10000次大约耗时:120秒
验证10000次大约耗时:372秒
加密10000次大约耗时:130秒
解密10000次大约耗时:214秒
密钥交换20000次大约耗时:833秒
# 捐献
接受ETH捐献:
ETH地址:[0x36D112ad944c44Be528D5B799ECC131ffD3669BA](https://etherscan.io/address/0x36D112ad944c44Be528D5B799ECC131ffD3669BA)
接受EOS捐献:
EOS账号:[jueduijuxing](https://eosflare.io/account/jueduijuxing)
所有收到的捐献将以徐峥、刘青云、周迅或张韶涵的名义在西部助建希望小学、水井等基础设施(不知以他人名义捐献是否妥当,如有不妥将删除)。
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。
资源推荐
资源详情
资源评论
收起资源包目录
基于Miracl的国密算法SM9实现.zip (51个子文件)
资料总结
SM9_FREE
Makefile 559B
SM9文档
SM9_2.pdf 232KB
SM9_4.pdf 249KB
SM9_1.pdf 588KB
SM9_3.pdf 231KB
SM9_5.pdf 313KB
sm9
smzzn12.h 2KB
sm9_encrypt.c 8KB
sm9_utils.h 3KB
print_out.h 904B
smzzn12.c 19KB
sm3.c 6KB
print_out.c 1KB
sm9_algorithm.h 13KB
sm4.h 795B
sm9_utils.c 4KB
sm9_signature.c 6KB
sm_r-ate.c 14KB
sm4.c 9KB
sm9_keyexchange.c 9KB
sm3.h 716B
sm9_setup.c 19KB
miracl
mrmuldv.g64 2KB
mrecn2.c 85KB
mrxgcd.c 14KB
mralloc.c 3KB
mrmonty.c 32KB
mrsroot.c 7KB
mrcurve.c 68KB
mrzzn4.c 11KB
mrarth1.c 23KB
mrcore.c 53KB
mrzzn2.c 20KB
mirdef.h 1KB
mrmuldv.c32 1KB
mrarth2.c 41KB
miracl.h 45KB
mrjack.c 10KB
mrarth0.c 9KB
mrlucas.c 6KB
mrbits.c 6KB
mrmuldv.c 3KB
SM9Test.c 8KB
LICENSE.txt 1KB
SM9_FREE.xcodeproj
project.pbxproj 21KB
xcuserdata
songgeng.xcuserdatad
xcdebugger
Breakpoints_v2.xcbkptlist 3KB
xcschemes
xcschememanagement.plist 343B
project.xcworkspace
xcshareddata
IDEWorkspaceChecks.plist 238B
contents.xcworkspacedata 153B
xcuserdata
songgeng.xcuserdatad
UserInterfaceState.xcuserstate 40KB
README.md 3KB
共 51 条
- 1
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于javaweb的网上拍卖系统,采用Spring + SpringMvc+Mysql + Hibernate+ JSP技术
- polygon-mumbai
- Chrome代理 switchyOmega
- GVC-全球价值链参与地位指数,基于ICIO表,(Wang等 2017a)计算方法
- 易语言ADS指纹浏览器管理工具
- 易语言奇易模块5.3.6
- cad定制家具平面图工具-(FG)门板覆盖柜体
- asp.net 原生js代码及HTML实现多文件分片上传功能(自定义上传文件大小、文件上传类型)
- whl@pip install pyaudio ERROR: Failed building wheel for pyaudio
- Constantsfd密钥和权限集合.kt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功