github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/tm2/pkg/crypto/secp256k1/secp256k1_nocgo_test.go (about)

     1  //go:build !libsecp256k1
     2  
     3  package secp256k1
     4  
     5  import (
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  // Ensure that signature verification works, and that
    12  // non-canonical signatures fail.
    13  // Note: run with CGO_ENABLED=0 or go test -tags !cgo.
    14  func TestSignatureVerificationAndRejectUpperS(t *testing.T) {
    15  	t.Parallel()
    16  
    17  	msg := []byte("We have lingered long enough on the shores of the cosmic ocean.")
    18  	for i := 0; i < 500; i++ {
    19  		priv := GenPrivKey()
    20  		sigStr, err := priv.Sign(msg)
    21  		require.NoError(t, err)
    22  		_, ok := signatureFromBytes(sigStr)
    23  		require.True(t, ok)
    24  
    25  		pub := priv.PubKey()
    26  		require.True(t, pub.VerifyBytes(msg, sigStr))
    27  	}
    28  }
    29  
    30  func BenchmarkVerify(b *testing.B) {
    31  	priv := GenPrivKey()
    32  	msg := []byte("We have lingered long enough on the shores of the cosmic ocean.")
    33  	sigStr, err := priv.Sign(msg)
    34  	require.NoError(b, err)
    35  
    36  	pub := priv.PubKey()
    37  	b.ResetTimer()
    38  
    39  	for i := 0; i < b.N; i++ {
    40  		ok := pub.VerifyBytes(msg, sigStr)
    41  		require.True(b, ok)
    42  	}
    43  }