github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/crypto/keys/private_key_test.go (about) 1 package keys 2 3 import ( 4 "encoding/hex" 5 "math/big" 6 "strings" 7 "testing" 8 9 "github.com/nspcc-dev/neo-go/internal/keytestcases" 10 "github.com/nspcc-dev/neo-go/pkg/crypto/hash" 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 ) 14 15 func TestPrivateKey(t *testing.T) { 16 for _, testCase := range keytestcases.Arr { 17 privKey, err := NewPrivateKeyFromHex(testCase.PrivateKey) 18 if testCase.Invalid { 19 assert.Error(t, err) 20 continue 21 } 22 23 assert.Nil(t, err) 24 address := privKey.Address() 25 assert.Equal(t, testCase.Address, address) 26 27 wif := privKey.WIF() 28 assert.Equal(t, testCase.Wif, wif) 29 pubKey := privKey.PublicKey() 30 assert.Equal(t, hex.EncodeToString(pubKey.Bytes()), testCase.PublicKey) 31 oldD := new(big.Int).Set(privKey.D) 32 privKey.Destroy() 33 assert.NotEqual(t, oldD, privKey.D) 34 } 35 } 36 37 func TestNewPrivateKeyOnCurve(t *testing.T) { 38 msg := []byte{1, 2, 3} 39 h := hash.Sha256(msg).BytesBE() 40 t.Run("Secp256r1", func(t *testing.T) { 41 p, err := NewPrivateKey() 42 require.NoError(t, err) 43 p.PublicKey().Verify(p.Sign(msg), h) 44 }) 45 t.Run("Secp256k1", func(t *testing.T) { 46 p, err := NewSecp256k1PrivateKey() 47 require.NoError(t, err) 48 p.PublicKey().Verify(p.Sign(msg), h) 49 }) 50 } 51 52 func TestPrivateKeyFromWIF(t *testing.T) { 53 for _, testCase := range keytestcases.Arr { 54 key, err := NewPrivateKeyFromWIF(testCase.Wif) 55 if testCase.Invalid { 56 assert.Error(t, err) 57 continue 58 } 59 60 assert.Nil(t, err) 61 assert.Equal(t, testCase.PrivateKey, key.String()) 62 } 63 } 64 65 func TestSigning(t *testing.T) { 66 // These were taken from the rfcPage:https://tools.ietf.org/html/rfc6979#page-33 67 // public key: U = xG 68 //Ux = 60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6 69 //Uy = 7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299 70 PrivateKey, _ := NewPrivateKeyFromHex("C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721") 71 72 data := PrivateKey.Sign([]byte("sample")) 73 74 r := "EFD48B2AACB6A8FD1140DD9CD45E81D69D2C877B56AAF991C34D0EA84EAF3716" 75 s := "F7CB1C942D657C41D436C7A1B6E29F65F3E900DBB9AFF4064DC4AB2F843ACDA8" 76 assert.Equal(t, strings.ToLower(r+s), hex.EncodeToString(data)) 77 }