package keypair

import (
	"crypto/ecdsa"

	"github.com/celo-org/celo-blockchain/common/hexutil"
	"github.com/celo-org/celo-blockchain/crypto"
)

type Key struct {
	Public  string
	Private string
}

// Generate creates a new keypair from internally randomized entropy.
func Generate() (Key, error) {
	privateKey, err := crypto.GenerateKey()
	if err != nil {
		return Key{}, err
	}
	privateKeyBytes := crypto.FromECDSA(privateKey)

	publicKey := privateKey.Public()
	publicKeyECDSA := publicKey.(*ecdsa.PublicKey)

	return Key{
		Public:  crypto.PubkeyToAddress(*publicKeyECDSA).Hex(),
		Private: hexutil.Encode(privateKeyBytes)[2:],
	}, nil
}