Skip to content
/ SM2 Public

国密算法SM2的实现。基于stevenpsm/GM_SM2,封装的OC代码。注:源代码SM2算法有一些问题,无法使用。另外其他基于openssl的算法,算法太大,不适合对大小有要求的工程。如果有需要可以自行使用。算法通过了官方例子,在sm2.h中加了#define _DEBUG 宏用于调试,正常使用的时候要注释掉。

License

Notifications You must be signed in to change notification settings

dishibolei/SM2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 

Repository files navigation

SM2

国密算法SM2的实现。

基于stevenpsm/GM_SM2,封装的OC代码。

注:源代码SM2算法有一些问题,无法使用(SM3的算法有问题)。另外其他基于openssl的算法,算法太大,不适合对大小有要求的工程。如果有需要可以自行使用。

算法通过了官方文档中的例子,http://www.oscca.gov.cn/News/201012/News_1197.htm

在sm2.h中加了#define _DEBUG 宏用于调试,正常使用的时候要注释掉。

相关解读可以参考我的博客:

https://dishibolei.github.io/2017/05/25/save-encode/

  • 国密算法的基础是使用曲线计算。曲线应该使用官方推荐的曲线,曲线不同加解密肯定失败。

  • 国密算法生成的数据为C1C2C3,其中C1为固定的64字节,c2和原始数据一样长,C3为固定的32字节。有些要求数据前面加上’0x04’,旧的版本输出是C3C1C2。这两点要注意。

  • 公钥分为P_x和P_y,都是32字节长度。私钥长度从资料上看没有限制,是一个随机数[1,N-2]。N为曲线参数。

  • 加密过程中使用了SM3的散列算法(官方叫杂凑算法),这个算法输出为32字节的数据。如果对端没有用这个算法,两端也无法加解密成功。

注意:

本算法是基于stevenpsm/GM_SM2的算法,因为实际项目中只对sm2的加解密做了验证,所以OC只暴露了加解密的方法,其他的生成公私钥对和签名验证没有验证,有不通的应该需要对源码做修改,主要是KDF的算法有问题,可以按照官方算法校正

About

国密算法SM2的实现。基于stevenpsm/GM_SM2,封装的OC代码。注:源代码SM2算法有一些问题,无法使用。另外其他基于openssl的算法,算法太大,不适合对大小有要求的工程。如果有需要可以自行使用。算法通过了官方例子,在sm2.h中加了#define _DEBUG 宏用于调试,正常使用的时候要注释掉。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages