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  }