var ( C1C3C2 = 0 C1C2C3 = 1 )
func BytesCombine(pBytes ...[]byte) []byte
func CipherMarshal(data []byte) ([]byte, error)
*sm2密文转asn.1编码格式 *sm2密文结构如下: * x * y * hash * CipherText
func CipherUnmarshal(data []byte) ([]byte, error)
sm2密文asn.1编码格式转C1|C3|C2拼接格式
func Compress(a *PublicKey) []byte
func Decrypt(priv *PrivateKey, data []byte, mode int) ([]byte, error)
func DecryptAsn1(pub *PrivateKey, data []byte) ([]byte, error)
sm2解密,解析asn.1编码格式的密文内容
func Encrypt(pub *PublicKey, data []byte, random io.Reader, mode int) ([]byte, error)
* sm2密文结构如下: * x * y * hash * CipherText
func EncryptAsn1(pub *PublicKey, data []byte, rand io.Reader) ([]byte, error)
sm2加密,返回asn.1编码格式的密文内容
func KeyExchangeA(klen int, ida, idb []byte, priA *PrivateKey, pubB *PublicKey, rpri *PrivateKey, rpubB *PublicKey) (k, s1, s2 []byte, err error)
KeyExchangeA 协商第二部,用户A调用,返回共享密钥k
func KeyExchangeB(klen int, ida, idb []byte, priB *PrivateKey, pubA *PublicKey, rpri *PrivateKey, rpubA *PublicKey) (k, s1, s2 []byte, err error)
**************************Key agreement algorithm**************************// KeyExchangeB 协商第二部,用户B调用, 返回共享密钥k
func P256Sm2() elliptic.Curve
func SignDataToSignDigit(sign []byte) (*big.Int, *big.Int, error)
func SignDigitToSignData(r, s *big.Int) ([]byte, error)
func Sm2Sign(priv *PrivateKey, msg, uid []byte, random io.Reader) (r, s *big.Int, err error)
func Sm2Verify(pub *PublicKey, msg, uid []byte, r, s *big.Int) bool
func Verify(pub *PublicKey, hash []byte, r, s *big.Int) bool
za, err := ZA(pub, uid) if err != nil { return } e, err := msgHash(za, msg) hash=e.getBytes()
func WNafReversed(wnaf []int8) []int8
func ZA(pub *PublicKey, uid []byte) ([]byte, error)
ZA = H256(ENTLA || IDA || a || b || xG || yG || xA || yA)
type PrivateKey struct { PublicKey D *big.Int }
func GenerateKey(random io.Reader) (*PrivateKey, error)
func (priv *PrivateKey) Decrypt(_ io.Reader, msg []byte, _ crypto.DecrypterOpts) (plaintext []byte, err error)
crypto.Decrypter
func (priv *PrivateKey) DecryptAsn1(data []byte) ([]byte, error)
func (priv *PrivateKey) Public() crypto.PublicKey
The SM2's private key contains the public key
func (priv *PrivateKey) Sign(random io.Reader, msg []byte, signer crypto.SignerOpts) ([]byte, error)
sign format = 30 + len(z) + 02 + len(r) + r + 02 + len(s) + s, z being what follows its size, ie 02+len(r)+r+02+len(s)+s
type PublicKey struct { elliptic.Curve X, Y *big.Int }
func Decompress(a []byte) *PublicKey
func (pub *PublicKey) EncryptAsn1(data []byte, random io.Reader) ([]byte, error)
****************************Encryption algorithm****************************//
func (pub *PublicKey) Sm3Digest(msg, uid []byte) ([]byte, error)
func (pub *PublicKey) Verify(msg []byte, sign []byte) bool