package mocks

import (
	"crypto"
	"crypto/ed25519"
	"io"
)

// TestSign implements the signer interface.  It can be used to mock an Ed25519
// signer that always return the same public key, signature, and error.
type TestSigner struct {
	PublicKey [ed25519.PublicKeySize]byte
	Signature [ed25519.SignatureSize]byte
	Error     error
}

func (ts *TestSigner) Public() crypto.PublicKey {
	return ed25519.PublicKey(ts.PublicKey[:])
}

func (ts *TestSigner) Sign(rand io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte, error) {
	return ts.Signature[:], ts.Error
}