package util import ( "crypto/ecdsa" "crypto/elliptic" "crypto/rand" "fmt" "github.com/emmansun/gmsm/sm2" "log" "math/big" "testing" ) func TestSignatureBySM2(t *testing.T) { key, _ := sm2.GenerateKey(rand.Reader) d := new(big.Int).SetBytes(key.D.Bytes()) // here we do NOT check if the d is in (0, N) or not // Create private key from *big.Int keyCopy := new(sm2.PrivateKey) keyCopy.Curve = sm2.P256() keyCopy.D = d keyCopy.PublicKey.X, keyCopy.PublicKey.Y = keyCopy.ScalarBaseMult(keyCopy.D.Bytes()) fmt.Println(keyCopy) if !key.Equal(keyCopy) { log.Println("private key and copy should be equal") } pointBytes := elliptic.Marshal(key.Curve, key.X, key.Y) // Create public key from point (uncompressed) publicKeyCopy := new(ecdsa.PublicKey) publicKeyCopy.Curve = sm2.P256() publicKeyCopy.X, publicKeyCopy.Y = elliptic.Unmarshal(publicKeyCopy.Curve, pointBytes) if !key.PublicKey.Equal(publicKeyCopy) { log.Println("public key and copy should be equal") } } func TestSM2_GenerateKeyPair(t *testing.T) { pair, privateKey, _ := SM2_GenerateKeyPair() log.Println(pair) log.Println(privateKey) } func TestSM2_Sign(t *testing.T) { // sm2 解密 privateKey := "ekUiEssevFHLcwNeRH0DqV6xJqasrVCPfdRzGmC2tJg=" encPassword := "BI9/V+ILZNtygiQ93L2bX0TxXjhsep7MZCvfJjXdLhPN7la4Cy/h3XveI5AMiaqSIRfplhfmnXTLLH9mlVX9AzLNI9vfrp6vzuHzFcM77h9bJK8YfTuqJGvjk+oqxyqDWXod0wPLWoxZx5EWDKDBf5CQkNI2hWiBJw==" content, err := DecryptBySM2PrivateKey(privateKey, []byte(encPassword)) if err != nil { log.Println(err) } else { log.Println("sm2解密=", string(content)) } // sm4解密 encData := "fN6LHINSdu/QYzdWttl29yEVHrw2oFbxzBb/rLB64MVSDrHeXJbcA0fymmVKy2XHRCUQcFf2KlFYPLuVtBVN93xCGA+wRXuw/Xis926CoZ2ZzZMnBkLfmu7aEuRDdQtO32WICQBAU6MmrL2qolkhKCa4OOv8rHuco0btXBpF7BpLgR78RyCZKay90CLg27MfZOiEdIX4IcIwAnp/CLRH9xLJsosbFKZ5WnsBBu9e3DsxV0cjV1/VGR3vxfrUzX8msF85qpIktHUOY2b4UHDQDHUb1kiTH9RlGZ4sFDMfloMp/rOBjdNOqcelCcVn75bUAVuOlyjJPu1WIblpIPsmou7wW0TOjkuJPcfnVtAyvumSjknzpNSk1Rev0pT+qJyd853ME8Oy0+nrh3N5/wagFRTrpkIByc4b6JikqhGgj0fskXGiKXdkWfrBfM+By8zvWijSw71e5DZg1ZUFfgv9PQziiI7zl6vL/Qt1OrwkvIRt+8oftlWt3gLEeg+/qekC" pwd := "9A9A4QyNz/pc8kZZXzhXOQ==" result, err := SM4Decrypt2(encData, pwd) if err != nil { log.Println(err) } else { log.Println("sm4解密=", result) } }