//
// Copyright Coinbase, Inc. All Rights Reserved.
//
// SPDX-License-Identifier: Apache-2.0
//

package elgamal

import (
	"testing"

	"github.com/stretchr/testify/require"

	"source.quilibrium.com/quilibrium/monorepo/nekryptology/pkg/core/curves"
)

func TestCipherTextMarshal(t *testing.T) {
	domain := []byte("TestCipherTextMarshal")

	k256 := curves.K256()
	ek, _, err := NewKeys(k256)
	require.NoError(t, err)

	msg := k256.Scalar.New(1)
	msgBytes := msg.Bytes()
	require.NoError(t, err)
	cs, _, err := ek.VerifiableEncrypt(msgBytes, &EncryptParams{
		Domain:          domain,
		MessageIsHashed: true,
	})
	require.NoError(t, err)

	bin, err := cs.MarshalBinary()
	require.NoError(t, err)
	dup := new(CipherText)
	err = dup.UnmarshalBinary(bin)
	require.NoError(t, err)
	require.True(t, cs.C1.Equal(dup.C1))
	require.True(t, cs.C2.Equal(dup.C2))
	require.Equal(t, cs.Nonce, dup.Nonce)
	require.Equal(t, cs.Aead, dup.Aead)
}