github.com/number571/tendermint@v0.34.11-gost/crypto/gost512/gost512_test.go (about)

     1  package gost512_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  	"github.com/stretchr/testify/require"
     8  
     9  	"github.com/number571/tendermint/crypto"
    10  	"github.com/number571/tendermint/crypto/gost512"
    11  )
    12  
    13  const (
    14  	TEST_SUBJECT  = "subject"
    15  	TEST_PASSWORD = "password"
    16  )
    17  
    18  func TestSignAndValidateGost512(t *testing.T) {
    19  
    20  	privKey := gost512.GenPrivKeyWithInput(TEST_SUBJECT, TEST_PASSWORD)
    21  	pubKey := privKey.PubKey()
    22  
    23  	msg := crypto.CRandBytes(128)
    24  	sig, err := privKey.Sign(msg)
    25  	require.Nil(t, err)
    26  
    27  	assert.True(t, pubKey.VerifySignature(msg, sig))
    28  
    29  	sig[7] ^= byte(0x01)
    30  
    31  	assert.False(t, pubKey.VerifySignature(msg, sig))
    32  }
    33  
    34  func TestBatchSafe(t *testing.T) {
    35  	v := gost512.NewBatchVerifier()
    36  
    37  	for i := 0; i <= 38; i++ {
    38  		priv := gost512.GenPrivKeyWithInput(TEST_SUBJECT, TEST_PASSWORD)
    39  		pub := priv.PubKey()
    40  
    41  		var msg []byte
    42  		if i%2 == 0 {
    43  			msg = []byte("easter")
    44  		} else {
    45  			msg = []byte("egg")
    46  		}
    47  
    48  		sig, err := priv.Sign(msg)
    49  		require.NoError(t, err)
    50  
    51  		err = v.Add(pub, msg, sig)
    52  		require.NoError(t, err)
    53  	}
    54  
    55  	ok, _ := v.Verify()
    56  	require.True(t, ok)
    57  }