type Receiver struct { A group.Element // The random group element from the sender B group.Element // B = [b]G if c == 0, B = A+[b]G if c == 1 // contains filtered or unexported fields }
func (receiver *Receiver) Returnmc() []byte
func (receiver *Receiver) Round1Receiver(myGroup group.Group, choice int, index int, A group.Element) group.Element
Input: myGroup, the group we operate in Input: choice, the receiver choice bit Input: index, the index of this SimOT Input: A, from sender Output: B = [b]G if c == 0, B = A+[b]G if c == 1 (Implementation in constant time). b, the receiver randomness
func (receiver *Receiver) Round3Receiver(e0, e1 []byte, choice int) error
Input: e0, e1: encryption of m0 and m1 from the sender Input: choice, choice bit of receiver Choose e0 or e1 based on choice bit in constant time
type Sender struct { A group.Element // [a]G B group.Element // The random group element from the receiver // contains filtered or unexported fields }
func (sender *Sender) InitSender(myGroup group.Group, m0, m1 []byte, index int) group.Element
Input: myGroup, the group we operate in Input: m0, m1 the 2 message of the sender Input: index, the index of this SimOT Output: A = [a]G, a the sender randomness
func (sender *Sender) Returne0e1() ([]byte, []byte)
func (sender *Sender) Returnm0m1() ([]byte, []byte)
func (sender *Sender) Round2Sender(B group.Element) ([]byte, []byte)
Input: B from the receiver Output: e0, e1, encryption of m0 and m1 under key k0, k1