github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/crypto/keys/sign_verify_test.go (about) 1 package keys 2 3 import ( 4 "crypto/ecdsa" 5 "math/big" 6 "testing" 7 8 "github.com/decred/dcrd/dcrec/secp256k1/v4" 9 "github.com/nspcc-dev/neo-go/pkg/crypto/hash" 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestIssue1223(t *testing.T) { 15 var d, x, y big.Int 16 d.SetString("75066030006596498716801752450216843918658392116070031536027203512060270094427", 10) 17 x.SetString("56810139335762307690884151098712528235297095596167964448512639328424930082240", 10) 18 y.SetString("108055740278314806025442297642651169427004858252141003070998851291610422839293", 10) 19 20 privateKey := PrivateKey{ 21 PrivateKey: ecdsa.PrivateKey{ 22 PublicKey: ecdsa.PublicKey{ 23 Curve: secp256k1.S256(), 24 X: &x, 25 Y: &y, 26 }, 27 D: &d, 28 }, 29 } 30 pubKey := PublicKey(ecdsa.PublicKey{ 31 Curve: secp256k1.S256(), 32 X: privateKey.X, 33 Y: privateKey.Y, 34 }) 35 36 hashedData := hash.Sha256([]byte("sample")) 37 signature := privateKey.SignHash(hashedData) 38 require.True(t, pubKey.Verify(signature, hashedData.BytesBE())) 39 } 40 41 func TestPubKeyVerify(t *testing.T) { 42 var data = []byte("sample") 43 hashedData := hash.Sha256(data) 44 45 t.Run("Secp256r1", func(t *testing.T) { 46 privKey, err := NewPrivateKey() 47 assert.Nil(t, err) 48 signedData := privKey.Sign(data) 49 pubKey := privKey.PublicKey() 50 result := pubKey.Verify(signedData, hashedData.BytesBE()) 51 expected := true 52 assert.Equal(t, expected, result) 53 54 // Small signature, no panic. 55 assert.False(t, pubKey.Verify([]byte{1, 2, 3}, hashedData.BytesBE())) 56 57 pubKey = &PublicKey{} 58 assert.False(t, pubKey.Verify(signedData, hashedData.BytesBE())) 59 }) 60 61 t.Run("Secp256k1", func(t *testing.T) { 62 privateKey, err := NewSecp256k1PrivateKey() 63 assert.Nil(t, err) 64 signedData := privateKey.SignHash(hashedData) 65 pubKey := privateKey.PublicKey() 66 require.True(t, pubKey.Verify(signedData, hashedData.BytesBE())) 67 68 pubKey = &PublicKey{} 69 assert.False(t, pubKey.Verify(signedData, hashedData.BytesBE())) 70 }) 71 } 72 73 func TestWrongPubKey(t *testing.T) { 74 sample := []byte("sample") 75 hashedData := hash.Sha256(sample) 76 77 t.Run("Secp256r1", func(t *testing.T) { 78 privKey, _ := NewPrivateKey() 79 signedData := privKey.Sign(sample) 80 81 secondPrivKey, _ := NewPrivateKey() 82 wrongPubKey := secondPrivKey.PublicKey() 83 84 actual := wrongPubKey.Verify(signedData, hashedData.BytesBE()) 85 expcted := false 86 assert.Equal(t, expcted, actual) 87 }) 88 89 t.Run("Secp256k1", func(t *testing.T) { 90 privateKey, err := NewSecp256k1PrivateKey() 91 assert.Nil(t, err) 92 signedData := privateKey.SignHash(hashedData) 93 94 secondPrivKey, err := NewSecp256k1PrivateKey() 95 assert.Nil(t, err) 96 wrongPubKey := secondPrivKey.PublicKey() 97 98 assert.False(t, wrongPubKey.Verify(signedData, hashedData.BytesBE())) 99 }) 100 }