Skip to main content

A Rust Implementation of China's Standards of Encryption Algorithms(SM2/SM3/SM4)

Project description

本项目是smcrypto的Python3实现,改库实现了国密SM3SM2SM4算法。

安装

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

smcryptopy-0.2.1.tar.gz (25.1 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

smcryptopy-0.2.1-py3-none-win_amd64.whl (1.5 MB view details)

Uploaded Python 3Windows x86-64

smcryptopy-0.2.1-py3-none-musllinux_1_2_x86_64.whl (6.8 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

smcryptopy-0.2.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.7 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

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

Hashes for smcryptopy-0.2.1.tar.gz
Algorithm Hash digest
SHA256 e6bee0f245107914b019c033a97449a0d2f77ab5646c33756f6d1f8aab6270c4
MD5 0ab80807a236a2097af2b5e300fdb352
BLAKE2b-256 f14c5af0325b8dac0536b09c89329bae6d2f47a60d30a16909569962de0d1fc8

See more details on using hashes here.

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

Hashes for smcryptopy-0.2.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 a7f844ab665eb051b38c470688d6521bac5e182911641c94010dd981f41b70e7
MD5 c7a1a18ca1b9d5d366ae8f339427fb26
BLAKE2b-256 a4e9fe7545321c5a3b2c244d13fa6276e2a742473bb56f7e7d7661603bb31b08

See more details on using hashes here.

File details

Details for the file smcryptopy-0.2.1-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for smcryptopy-0.2.1-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 404c8b7fef2445842ecb2f9cb1771844f4d5da0c281f0f2fd724711d2aee63b9
MD5 f2c2de44bcd0ffeb045270a85077b863
BLAKE2b-256 44ebd0c8c13927ead1274ddaa192bcfb5e687136b9b92eeb86ac188e5551b158

See more details on using hashes here.

File details

Details for the file smcryptopy-0.2.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for smcryptopy-0.2.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a3f910b76119e68e89fc5111b4e4d36a5bfefa478f640a336eb11fede11b0f90
MD5 5b6cd31e10d78f0d7e8893e31f20f1ed
BLAKE2b-256 78800697e6b56c11f9c563c6fe8f8946e4cec4100290325352d57ca95dca4a4f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page