@@ -3,6 +3,7 @@ package shutterservice
3
3
import (
4
4
"bytes"
5
5
"context"
6
+ "crypto/ecdsa"
6
7
"encoding/binary"
7
8
"testing"
8
9
@@ -14,6 +15,7 @@ import (
14
15
corekeyperdatabase "github.com/shutter-network/rolling-shutter/rolling-shutter/keyper/database"
15
16
"github.com/shutter-network/rolling-shutter/rolling-shutter/keyperimpl/shutterservice/database"
16
17
"github.com/shutter-network/rolling-shutter/rolling-shutter/keyperimpl/shutterservice/serviceztypes"
18
+ "github.com/shutter-network/rolling-shutter/rolling-shutter/medley/testkeygen"
17
19
"github.com/shutter-network/rolling-shutter/rolling-shutter/medley/testsetup"
18
20
"github.com/shutter-network/rolling-shutter/rolling-shutter/p2p"
19
21
"github.com/shutter-network/rolling-shutter/rolling-shutter/p2pmsg"
@@ -91,73 +93,26 @@ func TestHandleDecryptionKeySharesThresholdNotReached(t *testing.T) {
91
93
assert .Equal (t , len (msgs ), 0 )
92
94
}
93
95
94
- //nolint
95
96
func TestHandleDecryptionKeySharesThresholdReached (t * testing.T ) {
96
97
if testing .Short () {
97
98
t .Skip ("skipping integration test" )
98
99
}
99
100
ctx := context .Background ()
100
-
101
101
dbpool , dbclose := testsetup .NewTestDBPool (ctx , t , database .Definition )
102
102
t .Cleanup (dbclose )
103
-
104
- obsKeyperDB := obskeyperdatabase .New (dbpool )
105
103
keyperCoreDB := corekeyperdatabase .New (dbpool )
104
+
106
105
keyper1PrivateKey , keyper1Address , err := generateRandomAccount ()
107
106
assert .NilError (t , err )
108
107
keyper2PrivateKey , keyper2Address , err := generateRandomAccount ()
109
108
assert .NilError (t , err )
110
- keyperIndex := uint64 (1 )
111
109
keyperConfigIndex := uint64 (1 )
112
110
113
- err = obsKeyperDB .InsertKeyperSet (ctx , obskeyperdatabase.InsertKeyperSetParams {
114
- KeyperConfigIndex : int64 (keyperConfigIndex ),
115
- ActivationBlockNumber : 1 ,
116
- Keypers : shdb .EncodeAddresses ([]common.Address {keyper1Address , keyper2Address }),
117
- Threshold : 2 ,
118
- })
119
- assert .NilError (t , err )
120
- identityPreimages := []serviceztypes.IdentityPreimage {}
121
- for i := 0 ; i < 3 ; i ++ {
122
- identityPreimage := serviceztypes.IdentityPreimage {
123
- Bytes : intTo32ByteArray (i ),
124
- }
125
- identityPreimages = append (identityPreimages , identityPreimage )
126
- }
111
+ keys , handler := initiateHandler (t , keyper1Address , keyper2Address , keyperConfigIndex )
127
112
128
- decryptionData := & serviceztypes.DecryptionSignatureData {
129
- InstanceID : config .GetInstanceID (),
130
- Eon : keyperConfigIndex ,
131
- IdentityPreimages : identityPreimages ,
132
- }
133
-
134
- keyper1Signature , err := decryptionData .ComputeSignature (keyper1PrivateKey )
135
- assert .NilError (t , err )
113
+ identityPreimages := generateIdentityPreimages (t )
136
114
137
- keys := testsetup .InitializeEon (ctx , t , dbpool , config , keyperIndex )
138
-
139
- var handler p2p.MessageHandler = & DecryptionKeySharesHandler {dbpool : dbpool }
140
-
141
- // threshold is two, so no outgoing message after first input
142
- shares := []* p2pmsg.KeyShare {}
143
- for _ , identityPreimage := range identityPreimages {
144
- share := & p2pmsg.KeyShare {
145
- IdentityPreimage : identityPreimage .Bytes ,
146
- Share : keys .EpochSecretKeyShare (identityPreimage .Bytes , 0 ).Marshal (),
147
- }
148
- shares = append (shares , share )
149
- }
150
- msg := & p2pmsg.DecryptionKeyShares {
151
- InstanceId : config .GetInstanceID (),
152
- Eon : keyperConfigIndex ,
153
- KeyperIndex : 0 ,
154
- Shares : shares ,
155
- Extra : & p2pmsg.DecryptionKeyShares_Service {
156
- Service : & p2pmsg.ShutterServiceDecryptionKeySharesExtra {
157
- Signature : keyper1Signature ,
158
- },
159
- },
160
- }
115
+ decryptionData , msg := generateDecryptionMessage (t , keyperConfigIndex , 0 , identityPreimages , keyper1PrivateKey , keys )
161
116
validation , err := handler .ValidateMessage (ctx , msg )
162
117
assert .NilError (t , err , "validation returned error" )
163
118
assert .Equal (t , validation , pubsub .ValidationAccept )
@@ -171,7 +126,7 @@ func TestHandleDecryptionKeySharesThresholdReached(t *testing.T) {
171
126
172
127
// now thrsehold will be reached after this message causing to send out
173
128
// the message
174
- shares = []* p2pmsg.KeyShare {}
129
+ shares : = []* p2pmsg.KeyShare {}
175
130
encodedDecryptionKeys := [][]byte {}
176
131
for _ , identityPreimage := range identityPreimages {
177
132
share := & p2pmsg.KeyShare {
@@ -219,6 +174,77 @@ func TestHandleDecryptionKeySharesThresholdReached(t *testing.T) {
219
174
}
220
175
}
221
176
177
+ func initiateHandler (t * testing.T , keyper1Address , keyper2Address common.Address ,
178
+ keyperConfigIndex uint64 ,
179
+ ) (* testkeygen.EonKeys , p2p.MessageHandler ) {
180
+ t .Helper ()
181
+ ctx := context .Background ()
182
+ dbpool , dbclose := testsetup .NewTestDBPool (ctx , t , database .Definition )
183
+ t .Cleanup (dbclose )
184
+
185
+ obsKeyperDB := obskeyperdatabase .New (dbpool )
186
+
187
+ keyperIndex := uint64 (1 )
188
+
189
+ err := obsKeyperDB .InsertKeyperSet (ctx , obskeyperdatabase.InsertKeyperSetParams {
190
+ KeyperConfigIndex : int64 (keyperConfigIndex ),
191
+ ActivationBlockNumber : 1 ,
192
+ Keypers : shdb .EncodeAddresses ([]common.Address {keyper1Address , keyper2Address }),
193
+ Threshold : 2 ,
194
+ })
195
+ assert .NilError (t , err )
196
+
197
+ keys := testsetup .InitializeEon (ctx , t , dbpool , config , keyperIndex )
198
+ return keys , & DecryptionKeySharesHandler {dbpool : dbpool }
199
+ }
200
+
201
+ func generateIdentityPreimages (t * testing.T ) []serviceztypes.IdentityPreimage {
202
+ t .Helper ()
203
+ identityPreimages := []serviceztypes.IdentityPreimage {}
204
+ for i := 0 ; i < 3 ; i ++ {
205
+ identityPreimage := serviceztypes.IdentityPreimage {
206
+ Bytes : intTo32ByteArray (i ),
207
+ }
208
+ identityPreimages = append (identityPreimages , identityPreimage )
209
+ }
210
+ return identityPreimages
211
+ }
212
+
213
+ func generateDecryptionMessage (t * testing.T , keyperConfigIndex , keyperIndex uint64 , identityPreimages []serviceztypes.IdentityPreimage ,
214
+ pvtKey * ecdsa.PrivateKey , keys * testkeygen.EonKeys ,
215
+ ) (* serviceztypes.DecryptionSignatureData , * p2pmsg.DecryptionKeyShares ) {
216
+ t .Helper ()
217
+ decryptionData := & serviceztypes.DecryptionSignatureData {
218
+ InstanceID : config .GetInstanceID (),
219
+ Eon : keyperConfigIndex ,
220
+ IdentityPreimages : identityPreimages ,
221
+ }
222
+
223
+ signature , err := decryptionData .ComputeSignature (pvtKey )
224
+ assert .NilError (t , err )
225
+ // threshold is two, so no outgoing message after first input
226
+ shares := []* p2pmsg.KeyShare {}
227
+ for _ , identityPreimage := range identityPreimages {
228
+ share := & p2pmsg.KeyShare {
229
+ IdentityPreimage : identityPreimage .Bytes ,
230
+ Share : keys .EpochSecretKeyShare (identityPreimage .Bytes , 0 ).Marshal (),
231
+ }
232
+ shares = append (shares , share )
233
+ }
234
+ msg := & p2pmsg.DecryptionKeyShares {
235
+ InstanceId : config .GetInstanceID (),
236
+ Eon : keyperConfigIndex ,
237
+ KeyperIndex : keyperIndex ,
238
+ Shares : shares ,
239
+ Extra : & p2pmsg.DecryptionKeyShares_Service {
240
+ Service : & p2pmsg.ShutterServiceDecryptionKeySharesExtra {
241
+ Signature : signature ,
242
+ },
243
+ },
244
+ }
245
+ return decryptionData , msg
246
+ }
247
+
222
248
func TestValidateAndHandleDecryptionKey (t * testing.T ) {
223
249
if testing .Short () {
224
250
t .Skip ("skipping integration test" )
0 commit comments