package crypto

import (
	"crypto/ed25519"
	"fmt"
)

func ParseEd25519PrivateKey(b64Priv string) (ed25519.PrivateKey, error) {
	b, err := B64Decode(b64Priv)
	if err != nil {
		return nil, err
	}
	if l := len(b); l != ed25519.PrivateKeySize {
		return nil, fmt.Errorf("invalid ed25519 private key size: %d", l)
	}
	return ed25519.PrivateKey(b), nil
}

func ParseEd25519PublicKey(b64Pub string) (ed25519.PublicKey, error) {
	b, err := B64Decode(b64Pub)
	if err != nil {
		return nil, err
	}
	if l := len(b); l != ed25519.PublicKeySize {
		return nil, fmt.Errorf("invalid ed25519 public key size: %d", l)
	}
	return ed25519.PublicKey(b), nil
}

func SignEd25519(priv ed25519.PrivateKey, msg []byte) []byte {
	return ed25519.Sign(priv, msg)
}

func VerifyEd25519(pub ed25519.PublicKey, msg, sig []byte) bool {
	return ed25519.Verify(pub, msg, sig)
}
