func (r *CorreOTSetupSender) Round1(msg *CorreOTSetupReceiveRound1Message) (*CorreOTSetupSendRound1Message, error) {
	var err error
	r.setup, err = RandomOTSetupReceive(r.hash, &msg.Msg)
	if err != nil {
		return nil, err
	}
	_, _ = rand.Read(r._Delta[:])
	randomOTNonces := r.hash.Fork(&hash.BytesWithDomain{
		TheDomain: "CorreOT Random OT Nonces",
		Bytes:     nil,
	}).Digest()
	for i := 0; i < params.OTParam; i++ {
		choice := safenum.Choice(bitAt(i, r._Delta[:]))
		nonce := make([]byte, 32)
		_, _ = randomOTNonces.Read(nonce)
		r.randomOTReceivers[i] = NewRandomOTReceiver(nonce, r.setup, choice)
	}
	outMsg := new(CorreOTSetupSendRound1Message)
	errors := r.pl.Parallelize(params.OTParam, func(i int) interface{} {
		var err error
		outMsg.Msgs[i], err = r.randomOTReceivers[i].Round1()
		return err
	})
	for _, err := range errors {
		if err != nil {
			return outMsg, err.(error)
		}
	}
	return outMsg, nil
}
Round1 executes the Sender's first round of the Correlated OT setup.
package ot
import (
	"crypto/rand"
	"errors"
	"github.com/cronokirby/safenum"
	"github.com/taurusgroup/multi-party-sig/internal/params"
	"github.com/taurusgroup/multi-party-sig/pkg/hash"
	"github.com/taurusgroup/multi-party-sig/pkg/math/curve"
	"github.com/taurusgroup/multi-party-sig/pkg/pool"
	"github.com/zeebo/blake3"
)
type CorreOTSendSetup struct {
	_Delta [params.OTBytes]byte
	_K_Delta [params.OTParam][params.OTBytes]byte
}
type CorreOTSetupSender struct {
	pl   *pool.Pool
	hash *hash.Hash
	setup *RandomOTReceiveSetup
	_Delta [params.OTBytes]byte
	randomOTReceivers [params.OTParam]RandomOTReceiever
}
func NewCorreOTSetupSender(pl *pool.Pool, hash *hash.Hash) *CorreOTSetupSender {
	return &CorreOTSetupSender{pl: pl, hash: hash}
}
type CorreOTSetupSendRound1Message struct {
	Msgs [params.OTParam]RandomOTReceiveRound1Message
}