package elgamal

import (
	"context"
	"log"
	"math/big"
	"testing"

	"git.ali33.ru/fcg-xvii/curve/v2/tools"
)

func TestMessage(t *testing.T) {
	// curve init
	c, err := tools.NewCurve(
		big.NewInt(2),
		big.NewInt(4),
	)
	if err != nil {
		t.Fatal(err)
	}
	p := tools.SearchPrime(big.NewInt(100000))
	if err = c.SetP(p); err != nil {
		t.Fatal(err)
	}
	if err = c.SetGRandom(context.Background()); err != nil {
		t.Fatal(err)
	}
	log.Println("CURVE NORM")
	ce, _ := NewCurve(c, context.Background())
	log.Println("CURVE2 NORM")
	p1, _ := CurveKeyPair(ce, context.Background())
	p2, _ := CurveKeyPair(ce, context.Background())
	p1.Map().LogPretty()
	p2.Map().LogPretty()
	message := "Привет, мир ;)"
	mes, err := p1.MessageEncode([]byte(message), p2.KeyPublic())
	if err != nil {
		t.Fatal(err)
	}
	src, err := p2.MessageDecode(mes)
	if err != nil {
		t.Fatal(err)
	}
	t.Log(string(src))
	aPair, err := p2.KeyPublic().Attack(context.Background())
	if err != nil {
		t.Fatal(err)
	}
	aPair.Map().LogPretty()
	src, err = aPair.MessageDecode(mes)
	if err != nil {
		t.Fatal(err)
	}
	t.Log(string(src))
}