package identity_test

import (
	"crypto/ecdsa"
	"crypto/elliptic"
	"crypto/rand"
	"log"
	"testing"

	"koti.casa/numenor-labs/dsfx/pkg/crypto/identity"
)

func TestImportExportPrivate(t *testing.T) {
	key, err := ecdsa.GenerateKey(elliptic.P384(), rand.Reader)
	if err != nil {
		t.Fatalf("failed to generate key: %v", err)
		return
	}

	exported, err := identity.ExportPrivateKey(key)
	if err != nil {
		t.Fatalf("failed to export key: %v", err)
		return
	}

	imported, err := identity.ImportPrivateKey(exported)
	if err != nil {
		t.Fatalf("failed to import key: %v", err)
		return
	}

	if !key.Equal(imported) {
		t.Fatalf("imported key does not match original")
		return
	}
}

func TestImportExportPublic(t *testing.T) {
	key, err := ecdsa.GenerateKey(elliptic.P384(), rand.Reader)
	if err != nil {
		t.Fatalf("failed to generate key: %v", err)
		return
	}

	exported, err := identity.ExportPublicKey(&key.PublicKey)
	if err != nil {
		t.Fatalf("failed to export key: %v", err)
		return
	}

	log.Println("keylen", len(exported))
	imported, err := identity.ImportPublicKey(exported)
	if err != nil {
		t.Fatalf("failed to import key: %v", err)
		return
	}

	if !key.PublicKey.Equal(imported) {
		t.Fatalf("imported key does not match original")
		return
	}
}