1
- package simplestOT
1
+ // Reference: https://eprint.iacr.org/2015/267.pdf (1 out of 2 OT case)
2
+ // Sender has 2 messages m0, m1
3
+ // Receiver receives mc based on the choice bit c
4
+
5
+ package simot
2
6
3
7
import (
4
8
"bytes"
@@ -8,15 +12,43 @@ import (
8
12
"github.com/cloudflare/circl/group"
9
13
)
10
14
11
- const TestBaseOTCount = 100
15
+ const testSimOTCount = 100
16
+
17
+ func simOT (myGroup group.Group , sender * SenderSimOT , receiver * ReceiverSimOT , m0 , m1 []byte , choice , index int ) error {
18
+ // Initialization
19
+ A := sender .InitSender (myGroup , m0 , m1 , index )
20
+
21
+ // Round 1
22
+ // Sender sends A to receiver
23
+ B := receiver .Round1Receiver (myGroup , choice , index , A )
24
+
25
+ // Round 2
26
+ // Receiver sends B to sender
27
+ e0 , e1 := sender .Round2Sender (B )
28
+
29
+ // Round 3
30
+ // Sender sends e0 e1 to receiver
31
+ errDec := receiver .Round3Receiver (e0 , e1 , receiver .c )
32
+ if errDec != nil {
33
+ return errDec
34
+ }
35
+
36
+ return nil
37
+ }
12
38
13
- func testNegativeBaseOT (t * testing.T , myGroup group.Group , choice int ) {
39
+ func testNegativeSimOT (t * testing.T , myGroup group.Group , choice int ) {
14
40
var sender SenderSimOT
15
41
var receiver ReceiverSimOT
16
42
m0 := make ([]byte , myGroup .Params ().ScalarLength )
17
43
m1 := make ([]byte , myGroup .Params ().ScalarLength )
18
- rand .Read (m0 )
19
- rand .Read (m1 )
44
+ _ , errRand := rand .Read (m0 )
45
+ if errRand != nil {
46
+ panic (errRand )
47
+ }
48
+ _ , errRand = rand .Read (m1 )
49
+ if errRand != nil {
50
+ panic (errRand )
51
+ }
20
52
21
53
// Initialization
22
54
A := sender .InitSender (myGroup , m0 , m1 , 0 )
@@ -32,7 +64,7 @@ func testNegativeBaseOT(t *testing.T, myGroup group.Group, choice int) {
32
64
// The receiver will not learn anything about m_{1-c}
33
65
errDec := receiver .Round3Receiver (e0 , e1 , 1 - choice )
34
66
if errDec == nil {
35
- t .Error ("BaseOT decryption failed" , errDec )
67
+ t .Error ("SimOT decryption failed" , errDec )
36
68
}
37
69
38
70
if choice == 0 {
@@ -54,23 +86,29 @@ func testNegativeBaseOT(t *testing.T, myGroup group.Group, choice int) {
54
86
t .Error ("Receiver decryption should fail" )
55
87
}
56
88
}
57
-
58
89
}
59
90
60
91
// Input: myGroup, the group we operate in
61
- func testBaseOT (t * testing.T , myGroup group.Group , choice int ) {
92
+ func testSimOT (t * testing.T , myGroup group.Group , choice int ) {
62
93
var sender SenderSimOT
63
94
var receiver ReceiverSimOT
64
95
65
96
m0 := make ([]byte , myGroup .Params ().ScalarLength )
66
97
m1 := make ([]byte , myGroup .Params ().ScalarLength )
67
- rand .Read (m0 )
68
- rand .Read (m1 )
69
- err := BaseOT (myGroup , & sender , & receiver , m0 , m1 , choice , 0 )
70
- if err != nil {
71
- t .Error ("BaseOT failed" , err )
98
+ _ , errRand := rand .Read (m0 )
99
+ if errRand != nil {
100
+ panic (errRand )
101
+ }
102
+ _ , errRand = rand .Read (m1 )
103
+ if errRand != nil {
104
+ panic (errRand )
105
+ }
106
+
107
+ errDec := simOT (myGroup , & sender , & receiver , m0 , m1 , choice , 0 )
108
+ if errDec != nil {
109
+ t .Error ("AES GCM Decryption failed" )
72
110
}
73
- //Confirm
111
+
74
112
if choice == 0 {
75
113
equal0 := bytes .Compare (sender .m0 , receiver .mc )
76
114
if equal0 != 0 {
@@ -84,29 +122,41 @@ func testBaseOT(t *testing.T, myGroup group.Group, choice int) {
84
122
}
85
123
}
86
124
87
- func benchmarBaseOT (b * testing.B , myGroup group.Group ) {
125
+ func benchmarSimOT (b * testing.B , myGroup group.Group ) {
88
126
var sender SenderSimOT
89
127
var receiver ReceiverSimOT
90
128
m0 := make ([]byte , myGroup .Params ().ScalarLength )
91
129
m1 := make ([]byte , myGroup .Params ().ScalarLength )
92
- rand .Read (m0 )
93
- rand .Read (m1 )
130
+ _ , errRand := rand .Read (m0 )
131
+ if errRand != nil {
132
+ panic (errRand )
133
+ }
134
+ _ , errRand = rand .Read (m1 )
135
+ if errRand != nil {
136
+ panic (errRand )
137
+ }
94
138
95
139
for iter := 0 ; iter < b .N ; iter ++ {
96
- err := BaseOT (myGroup , & sender , & receiver , m0 , m1 , iter % 2 , 0 )
97
- if err != nil {
98
- b .Error ("BaseOT failed" )
140
+ errDec := simOT (myGroup , & sender , & receiver , m0 , m1 , iter % 2 , 0 )
141
+ if errDec != nil {
142
+ b .Error ("AES GCM Decryption failed" )
99
143
}
100
144
}
101
145
}
102
146
103
- func benchmarkBaseOTRound (b * testing.B , myGroup group.Group ) {
147
+ func benchmarkSimOTRound (b * testing.B , myGroup group.Group ) {
104
148
var sender SenderSimOT
105
149
var receiver ReceiverSimOT
106
150
m0 := make ([]byte , myGroup .Params ().ScalarLength )
107
151
m1 := make ([]byte , myGroup .Params ().ScalarLength )
108
- rand .Read (m0 )
109
- rand .Read (m1 )
152
+ _ , errRand := rand .Read (m0 )
153
+ if errRand != nil {
154
+ panic (errRand )
155
+ }
156
+ _ , errRand = rand .Read (m1 )
157
+ if errRand != nil {
158
+ panic (errRand )
159
+ }
110
160
111
161
b .Run ("Sender-Initialization" , func (b * testing.B ) {
112
162
for i := 0 ; i < b .N ; i ++ {
@@ -127,7 +177,6 @@ func benchmarkBaseOTRound(b *testing.B, myGroup group.Group) {
127
177
b .Run ("Sender-Round2" , func (b * testing.B ) {
128
178
for i := 0 ; i < b .N ; i ++ {
129
179
sender .Round2Sender (B )
130
-
131
180
}
132
181
})
133
182
@@ -152,34 +201,31 @@ func benchmarkBaseOTRound(b *testing.B, myGroup group.Group) {
152
201
if equal0 != 0 {
153
202
b .Error ("Receiver decryption failed" )
154
203
}
155
-
156
204
}
157
205
158
- func TestBaseOT (t * testing.T ) {
159
-
160
- t .Run ("BaseOT" , func (t * testing.T ) {
161
- for i := 0 ; i < TestBaseOTCount ; i ++ {
206
+ func TestSimOT (t * testing.T ) {
207
+ t .Run ("SimOT" , func (t * testing.T ) {
208
+ for i := 0 ; i < testSimOTCount ; i ++ {
162
209
currGroup := group .P256
163
210
choice := i % 2
164
- testBaseOT (t , currGroup , choice )
211
+ testSimOT (t , currGroup , choice )
165
212
}
166
213
})
167
- t .Run ("BaseOTNegative " , func (t * testing.T ) {
168
- for i := 0 ; i < TestBaseOTCount ; i ++ {
214
+ t .Run ("SimOTNegative " , func (t * testing.T ) {
215
+ for i := 0 ; i < testSimOTCount ; i ++ {
169
216
currGroup := group .P256
170
217
choice := i % 2
171
- testNegativeBaseOT (t , currGroup , choice )
218
+ testNegativeSimOT (t , currGroup , choice )
172
219
}
173
220
})
174
-
175
221
}
176
222
177
- func BenchmarkBaseOT (b * testing.B ) {
223
+ func BenchmarkSimOT (b * testing.B ) {
178
224
currGroup := group .P256
179
- benchmarBaseOT (b , currGroup )
225
+ benchmarSimOT (b , currGroup )
180
226
}
181
227
182
- func BenchmarkBaseOTRound (b * testing.B ) {
228
+ func BenchmarkSimOTRound (b * testing.B ) {
183
229
currGroup := group .P256
184
- benchmarkBaseOTRound (b , currGroup )
230
+ benchmarkSimOTRound (b , currGroup )
185
231
}
0 commit comments