- package ed25519_test
-
- import (
- "testing"
-
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-
- "github.com/tendermint/tendermint/crypto"
- "github.com/tendermint/tendermint/crypto/ed25519"
- )
-
- func TestSignAndValidateEd25519(t *testing.T) {
-
- privKey := ed25519.GenPrivKey()
- pubKey := privKey.PubKey()
-
- msg := crypto.CRandBytes(128)
- sig, err := privKey.Sign(msg)
- require.Nil(t, err)
-
- // Test the signature
- assert.True(t, pubKey.VerifySignature(msg, sig))
-
- // Mutate the signature, just one bit.
- // TODO: Replace this with a much better fuzzer, tendermint/ed25519/issues/10
- sig[7] ^= byte(0x01)
-
- assert.False(t, pubKey.VerifySignature(msg, sig))
- }
-
- func TestBatchSafe(t *testing.T) {
- v := ed25519.NewBatchVerifier()
-
- for i := 0; i <= 38; i++ {
- priv := ed25519.GenPrivKey()
- pub := priv.PubKey()
-
- var msg []byte
- if i%2 == 0 {
- msg = []byte("easter")
- } else {
- msg = []byte("egg")
- }
-
- sig, err := priv.Sign(msg)
- require.NoError(t, err)
-
- err = v.Add(pub, msg, sig)
- require.NoError(t, err)
- }
-
- ok, _ := v.Verify()
- require.True(t, ok)
- }
|