func (sig Signature) Verify(public curve.Point, m []byte) bool {
	group := public.Curve()
	challengeHash := hash.New()
	_ = challengeHash.WriteAny(sig.R, public, messageHash(m))
	challenge := sample.Scalar(challengeHash.Digest(), group)
	expected := challenge.Act(public)
	expected = expected.Add(sig.R)
	actual := sig.z.ActOnBase()
	return expected.Equal(actual)
}
Verify checks if a signature equation actually holds.

Note that m is the hash of a message, and not the message itself.
package sign
import (
	"io"
	"github.com/taurusgroup/multi-party-sig/pkg/hash"
	"github.com/taurusgroup/multi-party-sig/pkg/math/curve"
	"github.com/taurusgroup/multi-party-sig/pkg/math/sample"
)
type messageHash []byte
func (m messageHash) WriteTo(w io.Writer) (int64, error) {
	if m == nil {
		return 0, io.ErrUnexpectedEOF
	}
	n, err := w.Write(m)
	return int64(n), err
}
func (messageHash) Domain() string {
	return "messageHash"
}
type Signature struct {
	R curve.Point
	z curve.Scalar
}