package consensus

import (
	"testing"

	"github.com/CityOfZion/neo-go/pkg/crypto/keys"
	"github.com/stretchr/testify/require"
)

func TestCrypt(t *testing.T) {
	key, err := keys.NewPrivateKey()
	require.NoError(t, err)

	priv := privateKey{key}
	data, err := priv.MarshalBinary()
	require.NoError(t, err)

	key1, err := keys.NewPrivateKey()
	require.NoError(t, err)

	priv1 := privateKey{key1}
	require.NotEqual(t, priv, priv1)
	require.NoError(t, priv1.UnmarshalBinary(data))
	require.Equal(t, priv, priv1)

	pub := publicKey{key.PublicKey()}
	data, err = pub.MarshalBinary()
	require.NoError(t, err)

	pub1 := publicKey{key1.PublicKey()}
	require.NotEqual(t, pub, pub1)
	require.NoError(t, pub1.UnmarshalBinary(data))
	require.Equal(t, pub, pub1)

	data = []byte{1, 2, 3, 4}

	sign, err := priv.Sign(data)
	require.NoError(t, err)
	require.NoError(t, pub.Verify(data, sign))

	sign[0] = ^sign[0]
	require.Error(t, pub.Verify(data, sign))
}