A Rust Implementation of China's Standards of Encryption Algorithms(SM2/SM3/SM4)
Project description
本项目是smcrypto的Python3实现,改库实现了国密SM3、SM2、SM4算法。
安装
pip install smcryptopy
快速开始
SM3消息摘要算法
from smcryptopy import sm3
# hash结果以16进制字符串形式返回
hash = sm3.sm3_hash(b'abc')
assert(hash == '66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0')
hash = sm3.sm3_hash_string('abc')
assert(hash == '66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0')
SM2非对称加密算法
from smcryptopy import sm2
# 生成密钥对,以64位或128位16进制字符串形式提供,公钥不包含开头的04标识
(sk, pk) = sm2.gen_keypair()
assert(len(sk) == 64)
assert(len(pk) == 128)
assert(sm2.hex_valid(sk))
assert(sm2.hex_valid(pk))
# 从私钥导出公钥
pk_ = sm2.pk_from_sk(sk)
assert(pk == pk_)
assert(sm2.privkey_valid(sk))
assert(sm2.pubkey_valid(pk))
# 签名和验签
sign = sm2.sign(b'yumeng', b'abc', sk)
verify = sm2.verify(b'yumeng', b'abc', sign, pk)
assert(verify)
# 加密和解密
enc = sm2.encrypt(b'abc', pk)
dec = sm2.decrypt(enc, sk)
assert(dec == b'abc')
# 加密和解密,但使用c1c2c3的排列方式
enc = sm2.encrypt_c1c2c3(b'abc', pk)
dec = sm2.decrypt_c1c2c3(enc, sk)
assert(dec == b'abc')
# 加密和解密,但使用asn1编码
enc = sm2.encrypt_asna1(b'abc', pk)
dec = sm2.decrypt_asna1(enc, sk)
assert(dec == b'abc')
# 加密和解密,但密文以16进制字符串形式提供
enc = sm2.encrypt_hex(b'abc', pk)
assert(sm2.hex_valid(enc))
dec = sm2.decrypt_hex(enc, sk)
assert(dec == b'abc')
# 加密和解密,但密文以base64编码形式提供
enc = sm2.encrypt_base64(b'abc', pk)
assert(sm2.base64_valid(enc))
dec = sm2.decrypt_base64(enc, sk)
assert(dec == b'abc')
# 密钥交换
id_a = b'a@example.com'
id_b = b'b@example.com'
klen = 16
sk_a = sm2.gen_keypair()[0]
sk_b = sm2.gen_keypair()[0]
a_1 = sm2.keyexchange_1ab(klen, id_a, sk_a)
b_1 = sm2.keyexchange_1ab(klen, id_b, sk_b)
a_k = sm2.keyexchange_2a(id_a, sk_a, a_1[1], b_1[0])
b_k = sm2.keyexchange_2b(id_b, sk_b, b_1[1], a_1[0])
assert(a_k == b_k)
SM4对称加密算法
from smcryptopy import sm4
# 秘钥和初始向量必须为32位16进制字符串(长度为16的字节串)
key = b'1234567812345678'
iv = b'0000000000000000'
# 加密和解密,ECB模式
enc = sm4.encrypt_ecb(b'abc', key)
dec = sm4.decrypt_ecb(enc, key)
assert(dec == b'abc')
# 加密和解密,ECB模式,密文使用base64编码形式
enc = sm4.encrypt_ecb_base64(b'abc', key)
dec = sm4.decrypt_ecb_base64(enc, key)
assert(dec == b'abc')
# 加密和解密,ECB模式,密文使用16进制字符串形式
enc = sm4.encrypt_ecb_hex(b'abc', key)
dec = sm4.decrypt_ecb_hex(enc, key)
assert(dec == b'abc')
# 加密和解密,CBC模式
enc = sm4.encrypt_cbc(b'abc', key, iv)
dec = sm4.decrypt_cbc(enc, key, iv)
assert(dec == b'abc')
# 加密和解密,CBC模式,密文使用base64编码形式
enc = sm4.encrypt_cbc_base64(b'abc', key, iv)
dec = sm4.decrypt_cbc_base64(enc, key, iv)
assert(dec == b'abc')
# 加密和解密,CBC模式,密文使用16进制字符串形式
enc = sm4.encrypt_cbc_hex(b'abc', key, iv)
dec = sm4.decrypt_cbc_hex(enc, key, iv)
assert(dec == b'abc')
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file smcryptopy-0.2.1.tar.gz.
File metadata
- Download URL: smcryptopy-0.2.1.tar.gz
- Upload date:
- Size: 25.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e6bee0f245107914b019c033a97449a0d2f77ab5646c33756f6d1f8aab6270c4
|
|
| MD5 |
0ab80807a236a2097af2b5e300fdb352
|
|
| BLAKE2b-256 |
f14c5af0325b8dac0536b09c89329bae6d2f47a60d30a16909569962de0d1fc8
|
File details
Details for the file smcryptopy-0.2.1-py3-none-win_amd64.whl.
File metadata
- Download URL: smcryptopy-0.2.1-py3-none-win_amd64.whl
- Upload date:
- Size: 1.5 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a7f844ab665eb051b38c470688d6521bac5e182911641c94010dd981f41b70e7
|
|
| MD5 |
c7a1a18ca1b9d5d366ae8f339427fb26
|
|
| BLAKE2b-256 |
a4e9fe7545321c5a3b2c244d13fa6276e2a742473bb56f7e7d7661603bb31b08
|
File details
Details for the file smcryptopy-0.2.1-py3-none-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: smcryptopy-0.2.1-py3-none-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 6.8 MB
- Tags: Python 3, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
404c8b7fef2445842ecb2f9cb1771844f4d5da0c281f0f2fd724711d2aee63b9
|
|
| MD5 |
f2c2de44bcd0ffeb045270a85077b863
|
|
| BLAKE2b-256 |
44ebd0c8c13927ead1274ddaa192bcfb5e687136b9b92eeb86ac188e5551b158
|
File details
Details for the file smcryptopy-0.2.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: smcryptopy-0.2.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 6.7 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a3f910b76119e68e89fc5111b4e4d36a5bfefa478f640a336eb11fede11b0f90
|
|
| MD5 |
5b6cd31e10d78f0d7e8893e31f20f1ed
|
|
| BLAKE2b-256 |
78800697e6b56c11f9c563c6fe8f8946e4cec4100290325352d57ca95dca4a4f
|