Skip to content

Commit 84b6382

Browse files
committed
generate key
1 parent 0957af1 commit 84b6382

File tree

7 files changed

+769
-497
lines changed

7 files changed

+769
-497
lines changed

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@ SM2是国家密码管理局发布的椭圆曲线公钥密码算法。对标RSA
1919

2020
使用方法:
2121

22+
+ 生成秘钥
23+
```
24+
from fastgm import SM2
25+
26+
sk, pk = SM2.generate_key() # sk为私钥,pk为公钥,均为hex格式
27+
28+
```
29+
2230
+ 使用公钥加密
2331

2432
```
@@ -62,6 +70,13 @@ SM4.0(原名SMS4.0)是中华人民共和国政府采用的一种分组密码
6270

6371
使用方法:
6472

73+
+ 生成秘钥
74+
```
75+
from fastgm import SM4
76+
77+
key = SM4.generate_key() # key为16位bytes数组
78+
```
79+
6580
+ Zero Padding ECB加解密
6681
```
6782
from fastgm import SM4

notebook/sm2.ipynb

Lines changed: 37 additions & 22 deletions
Large diffs are not rendered by default.

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def no_cythonize(extensions, **_ignore):
4545

4646
setup(
4747
name="fastgm",
48-
version="0.1.0", # expected format is one of x.y.z.dev0, or x.y.z.rc1 or x.y.z (no to dashes, yes to dots)
48+
version="0.1.1", # expected format is one of x.y.z.dev0, or x.y.z.rc1 or x.y.z (no to dashes, yes to dots)
4949
author="wptoux",
5050
author_email="[email protected]",
5151
description="Fast GMSSL Library for Python",

src/fastgm/sm2.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,20 @@ def decrypt(sk, data, mode='C1C3C2'):
208208
else:
209209
return None
210210

211+
212+
def generate_key():
213+
"""
214+
return: sk, pk
215+
"""
216+
217+
k = os.urandom(32)
218+
k = int(k.hex(), 16)
219+
220+
pk = kP(k, G)
221+
222+
return ('%064x'% k).upper(), point2hex(pk).upper()
223+
224+
211225
class SM2:
212226
def __init__(self, mode='C1C3C2'):
213227
"""
@@ -216,6 +230,13 @@ def __init__(self, mode='C1C3C2'):
216230

217231
self._mode = mode
218232

233+
@classmethod
234+
def generate_key(cls):
235+
"""
236+
return: 私钥、公钥组成的tuple
237+
"""
238+
return generate_key()
239+
219240
def encrypt(self, pk, data):
220241
"""
221242
pk: 公钥, hex编码

0 commit comments

Comments
 (0)