(Translated by https://www.hiragana.jp/)
GitHub - ww-rm/gmalglib: C 语言实现的国密基础算法 Python 扩展库
Skip to content
/ gmalglib Public

C 语言实现てきこくみつもと础算ほう Python 扩展库

License

Notifications You must be signed in to change notification settings

ww-rm/gmalglib

Repository files navigation

gmalglib

Unittest PyPI docs

くにみつ算法さんぽうてき Python 扩展库, 提供ていきょう一些原始基础算法.

使用しよう C 语言实现, もと于原せい CPython せっこう进行ふうそう, 赖其にんなんだいさんぽう库.

あんそう

pip install gmalglib

やめ实现てき核心かくしん算法さんぽう

  • SM2 椭圆きょく线公钥密码算ほう
    • 签名验签
    • みつ钥交换
    • みつかいみつ
  • SM3 みつ码杂凑算ほう
    • 消息しょうそく摘要てきよう
    • みつ派生はせい
    • 消息しょうそく认证
  • SM4 ふん组密码算ほう
  • ZUC 序列じょれつみつ码算ほう

用法ようほう

对于 gmalglib したてき块, ぶん别导りょう不同ふどう算法さんぽうふうそうきさき结构, 按面こう对象方式ほうしき使用しよう.

from gmalglib.sm3 import SM3

obj = SM3()
obj.update(b"message")
obj.update(b"digest")
print(obj.digest().hex())

gmalglib.wrapped しも包装ほうそうりょう所有しょゆう算法さんぽう对象てきなり员方ほう, 提供ていきょうめんこう过程てき调用方式ほうしき, 且已导入 gmalglib 命名めいめいそら间, 直接ちょくせつ使用しよう.

import gmalglib

print(gmalglib.sm3_digest(b"messagedigest").hex())

关于ずいつくえすう发生

所有しょゆうわたる及随つくえすう发生てき部分ぶぶん, ひとし提供ていきょうりょうてい义随つくえすう发生てきさんすう, 以回调函すう方式ほうしき实现, 函数かんすう类型为 Callable[[int], bytes], そく生成せいせい指定してい长度てきずいつくえ节串.

def rnd_fn(n: int) -> bytes: ...

如不传入ずいつくえすう发生, 则使用しようだま认的けい统相关随つくえすう发生, ざい Windows 使用しよう BCryptGenRandom, 其余けい使用しよう /dev/urandom 实现, 其实现类于 Python 标准库函すう os.urandom.

具体ぐたい实现见 random.c うち OsRandomProc.

性能せいのう测试

性能せいのう测试だい码见 benchmark.py, 13th Gen Intel(R) Core(TM) i7-13700H うえ测试结果如下:

==================== SM2 Benchmark Test (1000 times, 32 bytes data) ====================
SM2.encrypt             : 0.454363s (2200.88 times/s)
SM2.decrypt             : 0.356014s (2808.88 times/s)
SM2.sign_digest         : 0.088565s (11291.12 times/s)
SM2.verify_digest       : 0.409243s (2443.54 times/s)
SM2.sign                : 0.087475s (11431.80 times/s)
SM2.verify              : 0.404026s (2475.09 times/s)
SM2.begin_key_exchange  : 0.086665s (11538.62 times/s)
SM2.end_key_exchange    : 0.536552s (1863.75 times/s)
==================== SM3 Benchmark Test (1,000,000,000 bytes data) ====================
SM3.update & SM3.digest : 3.083487s (324,308,109 B/s)
==================== SM4 Benchmark Test (1000000 times) ====================
SM4.encrypt             : 0.197393s (5066040.91 times/s)
SM4.decrypt             : 0.185619s (5387391.13 times/s)
==================== ZUC Benchmark Test (1000000 times) ====================
zuc.generate            : 0.028821s (34696561.22 times/s)