API 参考¶
常用接口已经自动导入 gmalg
命名空间, 可以直接使用, 点击下方链接快速跳转至说明.
gmalg.SM2
gmalg.SM3
gmalg.SM4
gmalg.SM9KGC
gmalg.SM9
gmalg.ZUC
gmalg.KEYXCHG_MODE
gmalg.PC_MODE
gmalg.errors
继续向下阅读 gmalg
中涉及的所有主要接口及其参数说明.
gmalg.sm2
¶
SM2 Algorithm Implementation Module.
gmalg.sm2.SM2Core(ecdlp, hash_cls, rnd_fn=None)
¶
Bases: SMCoreBase
SM2 Core Algorithms.
Attributes: |
|
---|
Parameters: |
---|
gmalg.sm2.SM2Core.generate_pk(sk)
¶
gmalg.sm2.SM2Core.generate_keypair()
¶
gmalg.sm2.SM2Core.verify_pk(pk)
¶
gmalg.sm2.SM2Core.entity_info(uid, pk)
¶
Generate other entity information bytes.
Parameters: |
---|
Returns: |
|
---|
Raises: |
|
---|
gmalg.sm2.SM2Core.sign(message, sk, uid, pk=None)
¶
gmalg.sm2.SM2Core.verify(message, r, s, uid, pk)
¶
gmalg.sm2.SM2Core.encrypt(plain, pk)
¶
Encrypt.
Parameters: |
---|
Returns: |
---|
Raises: |
|
---|
Note
The return order is C1, C2, C3
, NOT C1, C3, C2
.
gmalg.sm2.SM2Core.decrypt(C1, C2, C3, sk)
¶
Decrypt.
Parameters: |
---|
Returns: |
|
---|
Raises: |
|
---|
gmalg.sm2.SM2Core.begin_key_exchange(sk)
¶
gmalg.sm2.SM2Core.get_secret_point(t, R, pk)
¶
Generate same secret point as another user.
Parameters: |
---|
Returns: |
|
---|
Raises: |
|
---|
gmalg.sm2.SM2(sk=None, uid=None, pk=None, *, rnd_fn=None, pc_mode=PC_MODE.RAW)
¶
SM2 Algorithm.
Parameters: |
|
---|
gmalg.sm2.SM2.can_sign: bool
property
¶
Whether can do sign.
gmalg.sm2.SM2.can_verify: bool
property
¶
Whether can do verify.
gmalg.sm2.SM2.can_encrypt: bool
property
¶
Whether can do encrypt.
gmalg.sm2.SM2.can_decrypt: bool
property
¶
Whether can do decrypt.
gmalg.sm2.SM2.can_exchange_key: bool
property
¶
Whether can do key exchange.
gmalg.sm2.SM2.generate_pk(sk)
¶
gmalg.sm2.SM2.generate_keypair()
¶
gmalg.sm2.SM2.verify_pk(pk)
¶
gmalg.sm2.SM2.sign(message)
¶
Generate signature on message.
Returns: |
---|
Raises: |
|
---|
gmalg.sm2.SM2.verify(message, r, s)
¶
Verify a message and it's signature.
Parameters: |
---|
Returns: |
|
---|
Raises: |
|
---|
gmalg.sm2.SM2.encrypt(plain)
¶
Encrypt.
Parameters: |
|
---|
Returns: |
|
---|
Raises: |
|
---|
gmalg.sm2.SM2.decrypt(cipher)
¶
Decrypt.
Parameters: |
|
---|
Returns: |
|
---|
Raises: |
|
---|
gmalg.sm2.SM2.begin_key_exchange()
¶
gmalg.sm2.point_to_bytes(P, mode)
¶
gmalg.sm2.bytes_to_point(b)
¶
Convert bytes to point.
Parameters: |
|
---|
Returns: |
|
---|
Raises: |
|
---|
gmalg.sm3
¶
SM3 Algorithm Implementation Module.
gmalg.sm3.SM3()
¶
Bases: Hash
SM3 Algorithm.
gmalg.sm3.SM3.max_msg_length()
classmethod
¶
Get maximum message length in bytes.
gmalg.sm3.SM3.hash_length()
classmethod
¶
Get output hash value length in bytes.
gmalg.sm3.SM3.update(data)
¶
Update internal state.
Parameters: |
|
---|
Raises: |
|
---|
gmalg.sm4
¶
SM4 Algorithm Implementation Module.
gmalg.sm4.SM4(key)
¶
Bases: BlockCipher
SM4 Algorithm.
Parameters: |
|
---|
Raises: |
|
---|
gmalg.sm4.SM4.key_length()
classmethod
¶
Get key length in bytes.
gmalg.sm4.SM4.block_length()
classmethod
¶
Get block length in bytes.
gmalg.sm4.SM4.encrypt(block)
¶
Encrypt.
Parameters: |
|
---|
Returns: |
|
---|
Raises: |
|
---|
gmalg.sm4.SM4.decrypt(block)
¶
Decrypt.
Parameters: |
|
---|
Returns: |
|
---|
Raises: |
|
---|
gmalg.sm9
¶
SM9 Algorithm Implementation Module.
gmalg.sm9.SM9Core(bnbp, hash_cls, rnd_fn=None)
¶
Bases: SMCoreBase
SM9 Core Algorithms.
Attributes: |
|
---|
Parameters: |
---|
gmalg.sm9.SM9Core.generate_mpk_sign(msk_s)
¶
gmalg.sm9.SM9Core.generate_keypair_sign()
¶
gmalg.sm9.SM9Core.generate_mpk_encrypt(msk_e)
¶
gmalg.sm9.SM9Core.generate_keypair_encrypt()
¶
gmalg.sm9.SM9Core.generate_sk_sign(hid_s, msk_s, uid)
¶
Generate user secret key for sign.
Parameters: |
---|
Returns: |
|
---|
Raises: |
|
---|
gmalg.sm9.SM9Core.generate_sk_encrypt(hid_e, msk_e, uid)
¶
Generate user secret key for encrypt.
Parameters: |
---|
Returns: |
|
---|
Raises: |
|
---|
gmalg.sm9.SM9Core.sign(message, mpk_s, sk_s)
¶
gmalg.sm9.SM9Core.verify(message, h, S, hid_s, mpk_s, uid)
¶
gmalg.sm9.SM9Core.begin_key_exchange(hid_e, mpk_e, uid)
¶
gmalg.sm9.SM9Core.get_secret_data(mpk_e, r, R, sk_e)
¶
Generate same secret point as another user.
Parameters: |
---|
Returns: |
---|
Raises: |
|
---|
gmalg.sm9.SM9Core.generate_skey(klen, g1, g2, g3, uid_init, R_init, uid_resp, R_resp)
¶
Generate secret key of klen bytes as same as another user.
Parameters: |
|
---|
Returns: |
|
---|
gmalg.sm9.SM9Core.encapsulate(hid_e, mpk_e, klen, uid)
¶
Encapsulate secret key.
Parameters: |
---|
Returns: |
---|
gmalg.sm9.SM9Core.decapsulate(C, klen, sk_e, uid)
¶
Decapsulate secret key.
Parameters: |
---|
Returns: |
|
---|
Raises: |
|
---|
gmalg.sm9.SM9Core.encrypt(hid_e, mpk_e, plain, uid, mac_klen)
¶
Encrypt.
Parameters: |
---|
Returns: |
---|
gmalg.sm9.SM9Core.decrypt(C1, C2, C3, sk_e, uid, mac_klen)
¶
Decrypt.
Parameters: |
---|
Returns: |
|
---|
Raises: |
|
---|
gmalg.sm9.SM9KGC(hid_s=None, msk_s=None, mpk_s=None, hid_e=None, msk_e=None, mpk_e=None, *, rnd_fn=None, pc_mode=PC_MODE.RAW)
¶
SM9 Key Generation Center.
Parameters: |
|
---|
gmalg.sm9.SM9KGC.can_generate_sk_sign: bool
property
¶
Whether can generate user secret key for sign.
gmalg.sm9.SM9KGC.can_generate_sk_encrypt: bool
property
¶
Whether can generate user secret key for encrypt.
gmalg.sm9.SM9KGC.generate_mpk_sign(msk_s)
¶
gmalg.sm9.SM9KGC.generate_keypair_sign()
¶
gmalg.sm9.SM9KGC.generate_mpk_encrypt(msk_e)
¶
gmalg.sm9.SM9KGC.generate_keypair_encrypt()
¶
gmalg.sm9.SM9KGC.generate_sk_sign(uid)
¶
gmalg.sm9.SM9(hid_s=None, mpk_s=None, sk_s=None, hid_e=None, mpk_e=None, sk_e=None, uid=None, *, rnd_fn=None, pc_mode=PC_MODE.RAW, mac_klen=32)
¶
SM9 Algorithm.
Parameters: |
|
---|
gmalg.sm9.SM9.can_sign: bool
property
¶
Whether can do sign.
gmalg.sm9.SM9.can_verify: bool
property
¶
Whether can do verify.
gmalg.sm9.SM9.can_exchange_key: bool
property
¶
Whether can do key exchange.
gmalg.sm9.SM9.can_encapsulate: bool
property
¶
Whether can do key encapsulate.
gmalg.sm9.SM9.can_decapsulate: bool
property
¶
Whether can do key decapsulate.
gmalg.sm9.SM9.can_encrypt: bool
property
¶
Whether can do encrypt.
gmalg.sm9.SM9.can_decrypt: bool
property
¶
Whether can do decrypt.
gmalg.sm9.SM9.sign(message)
¶
Sign.
Parameters: |
|
---|
Returns: |
---|
Raises: |
|
---|
gmalg.sm9.SM9.verify(message, h, S)
¶
Verify.
Parameters: |
---|
Returns: |
|
---|
Raises: |
|
---|
gmalg.sm9.SM9.begin_key_exchange(uid)
¶
Begin key exchange.
Parameters: |
|
---|
Returns: |
---|
Raises: |
|
---|
gmalg.sm9.SM9.end_key_exchange(klen, r, R, uid, R2, mode)
¶
gmalg.sm9.SM9.encapsulate(klen, uid)
¶
Encapsulate secret key.
Parameters: |
---|
Returns: |
---|
Raises: |
|
---|
gmalg.sm9.SM9.decapsulate(C, klen)
¶
Decapsulate secret key.
Parameters: |
---|
Returns: |
|
---|
Raises: |
|
---|
gmalg.sm9.SM9.encrypt(plain, uid)
¶
Encrypt.
Parameters: |
---|
Returns: |
|
---|
Raises: |
|
---|
gmalg.sm9.SM9.decrypt(cipher)
¶
Decrypt.
Parameters: |
|
---|
Returns: |
|
---|
Raises: |
|
---|
gmalg.sm9.point_to_bytes_1(P, mode)
¶
gmalg.sm9.bytes_to_point_1(p)
¶
Convert bytes to point (Fp).
Parameters: |
|
---|
Returns: |
|
---|
Raises: |
|
---|
gmalg.sm9.point_to_bytes_2(P, mode)
¶
gmalg.sm9.bytes_to_point_2(p)
¶
Convert bytes to point (Fp2).
Parameters: |
|
---|
Returns: |
|
---|
Raises: |
|
---|
gmalg.zuc
¶
ZUC Algorithm Implementation Module.
gmalg.zuc.ZUC(key, iv)
¶
ZUC Algorithm.
Parameters: |
---|
Raises: |
|
---|
gmalg.errors
¶
GM Exceptions.
gmalg.primefield
¶
Prime field operations module.
This module provides basic operations on extension fields. The extension field is constructed through a tower extension in the "1-2-4-12" manner, as detailed in the SM9 standard documentation.
gmalg.primefield.PrimeFieldBase(p)
¶
Base class of Fp operations.
All subclasses derived from this class have the same methods as the base class,
with the only difference being the replacement of the type FpExEle
with the corresponding field element type.
Any variations will be explicitly documented within the respective subclass.
Parameters: |
|
---|
gmalg.primefield.PrimeFieldBase.zero()
classmethod
¶
Get Zero.
gmalg.primefield.PrimeFieldBase.one()
classmethod
¶
Get One.
gmalg.primefield.PrimeFieldBase.extend(x)
classmethod
¶
Extend domain element.
gmalg.primefield.PrimeFieldBase.isoppo(x, y)
¶
Whether is opposite.
gmalg.primefield.PrimeFieldBase.neg(x)
¶
Negative.
gmalg.primefield.PrimeFieldBase.sadd(n, x)
¶
Scalar add.
gmalg.primefield.PrimeFieldBase.smul(k, x)
¶
Scalar mul.
gmalg.primefield.PrimeFieldBase.pmul(x, y)
¶
Multiply by position.
gmalg.primefield.PrimeFieldBase.add(x, y)
¶
Add two elements.
gmalg.primefield.PrimeFieldBase.sub(x, y)
¶
Substract two elements.
gmalg.primefield.PrimeFieldBase.mul(x, y)
¶
Multiply two elements.
gmalg.primefield.PrimeFieldBase.inv(x)
¶
Inverse of element.
gmalg.primefield.PrimeFieldBase.pow(x, e)
¶
Get the exponentiation of x raised to the power of e.
gmalg.primefield.PrimeFieldBase.sqrt(x)
¶
Square root of x.
gmalg.primefield.PrimeFieldBase.etob(e)
¶
Convert domain element to bytes.
gmalg.primefield.PrimeFieldBase.btoe(b)
¶
Convert bytes to domain element.
gmalg.primefield.PrimeField(p)
¶
gmalg.primefield.PrimeField2(p)
¶
Bases: PrimeFieldBase
Fp2 operations.
Attributes: |
|
---|
gmalg.primefield.PrimeField4(p)
¶
Bases: PrimeFieldBase
Fp4 operations.
Attributes: |
|
---|
gmalg.primefield.PrimeField12(p)
¶
Bases: PrimeFieldBase
Fp12 operations.
Attributes: |
|
---|
Fp2Ele = Tuple[int, int]
module-attribute
¶
Fp4Ele = Tuple[Fp2Ele, Fp2Ele]
module-attribute
¶
Fp12Ele = Tuple[Fp4Ele, Fp4Ele, Fp4Ele]
module-attribute
¶
FpExEle = Union[int, Fp2Ele, Fp4Ele, Fp12Ele]
module-attribute
¶
gmalg.ellipticcurve
¶
Elliptic curve operations.
This module provides fundamental operations related to elliptic curves, including but not limited to those specified in the national cryptographic standard documents.
gmalg.ellipticcurve.EllipticCurve(fp, a, b)
¶
Elliptic Curve.
Attributes: |
|
---|
Parameters: |
|
---|
Note
When instantiating the class, the FpExEle
or EcPointEx
type in the methods will correspond to the type of fp
.
Here, a generic placeholder are used to denote the data type.
gmalg.ellipticcurve.EllipticCurve.get_y_sqr(x)
¶
Get the square of y for the specified x.
gmalg.ellipticcurve.EllipticCurve.get_y(x)
¶
Get one of valid y for given x, None
means no solution.
gmalg.ellipticcurve.EllipticCurve.isvalid(P)
¶
Whether the point is on curve.
gmalg.ellipticcurve.EllipticCurve.neg(P)
¶
Get negative point.
gmalg.ellipticcurve.EllipticCurve.add(P1, P2)
¶
Add two points.
gmalg.ellipticcurve.EllipticCurve.sub(P1, P2)
¶
Substract two points.
gmalg.ellipticcurve.EllipticCurve.mul(k, P)
¶
Scalar multiplication of point by k.
gmalg.ellipticcurve.ECDLP(p, a, b, G, n, h=1)
¶
Elliptic Curve Discrete Logarithm Problem.
Attributes: |
|
---|
Parameters: |
---|
gmalg.ellipticcurve.ECDLP.kG(k)
¶
Scalar multiplication of G by k.
gmalg.ellipticcurve.SM9BNBP(G1, G2)
¶
SM9 Bilinear Pairing on Barreto-Naehrig (BN) Elliptic Curve.
For performance reasons, this implementation focuses solely on operations on the BN curve in the context of SM9. Consequently, certain intermediate values can be precomputed to enhance computational efficiency.
The fundamental parameters used in SM9 are as follows:
t = 0x600000000058F98A
p = 0xB640000002A3A6F1D603AB4FF58EC74521F2934B1A7AEEDBE56F9B27E351457D
n = 0xB640000002A3A6F1D603AB4FF58EC74449F2934B18EA8BEEE56EE19CD69ECF25
b = 0x05
beta_b = (5, 0)
There are some more precomputed intermediate values. Refer to the source code for detailed information.
Attributes: |
|
---|
Parameters: |
---|
EcPoint = Tuple[int, int]
module-attribute
¶
EcPoint2 = Tuple[Fp.Fp2Ele, Fp.Fp2Ele]
module-attribute
¶
EcPoint4 = Tuple[Fp.Fp4Ele, Fp.Fp4Ele]
module-attribute
¶
EcPoint12 = Tuple[Fp.Fp12Ele, Fp.Fp12Ele]
module-attribute
¶
EcPointEx = Tuple[Fp.FpExEle, Fp.FpExEle]
module-attribute
¶
gmalg.base
¶
This module provides some base classes and common items.
gmalg.base.PC_MODE
¶
Bases: Enum
Point compress mode.
Attributes: |
|
---|
gmalg.base.KEYXCHG_MODE
¶
gmalg.base.Hash()
¶
Base class of hash algorithm.