sgx.py 0.11.dev0__tar.gz → 0.12.dev0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sgx_py-0.11.dev0/sgx.py.egg-info → sgx_py-0.12.dev0}/PKG-INFO +1 -1
- {sgx_py-0.11.dev0 → sgx_py-0.12.dev0}/README.md +4 -0
- {sgx_py-0.11.dev0 → sgx_py-0.12.dev0}/setup.py +1 -1
- {sgx_py-0.11.dev0 → sgx_py-0.12.dev0}/sgx/sgx.py +12 -0
- {sgx_py-0.11.dev0 → sgx_py-0.12.dev0}/sgx/sgx_rpc_handler.py +27 -0
- {sgx_py-0.11.dev0 → sgx_py-0.12.dev0}/sgx/sgx_zmq.py +30 -0
- {sgx_py-0.11.dev0 → sgx_py-0.12.dev0/sgx.py.egg-info}/PKG-INFO +1 -1
- {sgx_py-0.11.dev0 → sgx_py-0.12.dev0}/tests/test_dkg.py +199 -90
- {sgx_py-0.11.dev0 → sgx_py-0.12.dev0}/LICENSE +0 -0
- {sgx_py-0.11.dev0 → sgx_py-0.12.dev0}/setup.cfg +0 -0
- {sgx_py-0.11.dev0 → sgx_py-0.12.dev0}/sgx/__init__.py +0 -0
- {sgx_py-0.11.dev0 → sgx_py-0.12.dev0}/sgx/constants.py +0 -0
- {sgx_py-0.11.dev0 → sgx_py-0.12.dev0}/sgx/generate.sh +0 -0
- {sgx_py-0.11.dev0 → sgx_py-0.12.dev0}/sgx/http.py +0 -0
- {sgx_py-0.11.dev0 → sgx_py-0.12.dev0}/sgx/utils.py +0 -0
- {sgx_py-0.11.dev0 → sgx_py-0.12.dev0}/sgx.py.egg-info/SOURCES.txt +0 -0
- {sgx_py-0.11.dev0 → sgx_py-0.12.dev0}/sgx.py.egg-info/dependency_links.txt +0 -0
- {sgx_py-0.11.dev0 → sgx_py-0.12.dev0}/sgx.py.egg-info/requires.txt +0 -0
- {sgx_py-0.11.dev0 → sgx_py-0.12.dev0}/sgx.py.egg-info/top_level.txt +0 -0
- {sgx_py-0.11.dev0 → sgx_py-0.12.dev0}/tests/test_core.py +0 -0
- {sgx_py-0.11.dev0 → sgx_py-0.12.dev0}/tests/test_http.py +0 -0
|
@@ -47,9 +47,13 @@ pip install -e .[dev]
|
|
|
47
47
|
|
|
48
48
|
Create a `.env` file in source directory, like the following:
|
|
49
49
|
```bash
|
|
50
|
+
# SGXWallet listening point (1026 uses https w/ certificates)
|
|
50
51
|
SERVER=https://127.0.0.1:1026
|
|
52
|
+
# path where you want tests to store the auto-generated certificates
|
|
51
53
|
CERT_PATH=.
|
|
54
|
+
# private key for the funded test account used by transaction tests
|
|
52
55
|
ETH_PRIVATE_KEY=
|
|
56
|
+
# Ethereum JSON-RPC endpoint used by transaction tests
|
|
53
57
|
GETH=
|
|
54
58
|
```
|
|
55
59
|
You may alter the fields as needed.
|
|
@@ -123,6 +123,11 @@ class SgxClient:
|
|
|
123
123
|
def generate_dkg_poly(self, poly_name):
|
|
124
124
|
return self.sgx_rpc_server.generate_dkg_poly(poly_name, self.t)
|
|
125
125
|
|
|
126
|
+
def generate_dkg_poly_v3(self, poly_name, previous_bls_private_key_name):
|
|
127
|
+
return self.sgx_rpc_server.generate_dkg_poly_v3(
|
|
128
|
+
poly_name, previous_bls_private_key_name, self.t
|
|
129
|
+
)
|
|
130
|
+
|
|
126
131
|
def get_verification_vector(self, poly_name):
|
|
127
132
|
return self.sgx_rpc_server.get_verification_vector(poly_name, self.n, self.t)
|
|
128
133
|
|
|
@@ -164,6 +169,13 @@ class SgxClient:
|
|
|
164
169
|
poly_name, bls_key_name, eth_key_name, secret_shares, self.n, self.t
|
|
165
170
|
)
|
|
166
171
|
|
|
172
|
+
def create_bls_private_key_v3(
|
|
173
|
+
self, poly_name, bls_key_name, eth_key_name, secret_contributions
|
|
174
|
+
):
|
|
175
|
+
return self.sgx_rpc_server.create_bls_private_key_v3(
|
|
176
|
+
poly_name, bls_key_name, eth_key_name, secret_contributions, self.n, self.t
|
|
177
|
+
)
|
|
178
|
+
|
|
167
179
|
def get_bls_public_key(self, bls_key_name):
|
|
168
180
|
return self.sgx_rpc_server.get_bls_public_key(bls_key_name)
|
|
169
181
|
|
|
@@ -83,6 +83,19 @@ class SgxRPCHandler:
|
|
|
83
83
|
else:
|
|
84
84
|
return DkgPolyStatus.FAIL
|
|
85
85
|
|
|
86
|
+
def generate_dkg_poly_v3(self, poly_name, previous_bls_private_key_name, t):
|
|
87
|
+
if self.is_poly_exist(poly_name):
|
|
88
|
+
return DkgPolyStatus.PREEXISTING
|
|
89
|
+
params = dict()
|
|
90
|
+
params['polyName'] = poly_name
|
|
91
|
+
params['previousBLSPrivateKeyName'] = previous_bls_private_key_name
|
|
92
|
+
params['t'] = t
|
|
93
|
+
response = self.__send_request("generateDKGPoly", params)
|
|
94
|
+
if response['result']['status'] == 0:
|
|
95
|
+
return DkgPolyStatus.NEW_GENERATED
|
|
96
|
+
else:
|
|
97
|
+
return DkgPolyStatus.FAIL
|
|
98
|
+
|
|
86
99
|
def get_verification_vector(self, poly_name, n, t):
|
|
87
100
|
params = dict()
|
|
88
101
|
params['polyName'] = poly_name
|
|
@@ -166,6 +179,20 @@ class SgxRPCHandler:
|
|
|
166
179
|
response = self.__send_request("createBLSPrivateKeyV2", params)
|
|
167
180
|
return response['result']['status'] == 0
|
|
168
181
|
|
|
182
|
+
def create_bls_private_key_v3(self, poly_name, bls_key_name, eth_key_name, secret_contributions, n, t):
|
|
183
|
+
params = dict()
|
|
184
|
+
# polyName is optional in V3 - new nodes joining the network do not pass it
|
|
185
|
+
if poly_name:
|
|
186
|
+
params['polyName'] = poly_name
|
|
187
|
+
|
|
188
|
+
params['blsKeyName'] = bls_key_name
|
|
189
|
+
params['ethKeyName'] = eth_key_name
|
|
190
|
+
params['secretContributions'] = secret_contributions
|
|
191
|
+
params['n'] = n
|
|
192
|
+
params['t'] = t
|
|
193
|
+
response = self.__send_request("createBLSPrivateKeyV3", params)
|
|
194
|
+
return response['result']['status'] == 0
|
|
195
|
+
|
|
169
196
|
def get_bls_public_key(self, bls_key_name):
|
|
170
197
|
params = dict()
|
|
171
198
|
params["blsKeyName"] = bls_key_name
|
|
@@ -130,6 +130,19 @@ class SgxZmq:
|
|
|
130
130
|
else:
|
|
131
131
|
return DkgPolyStatus.FAIL
|
|
132
132
|
|
|
133
|
+
def generate_dkg_poly_v3(self, poly_name, previous_bls_private_key_name):
|
|
134
|
+
if self.is_poly_exists(poly_name):
|
|
135
|
+
return DkgPolyStatus.PREEXISTING
|
|
136
|
+
params = dict()
|
|
137
|
+
params['polyName'] = poly_name
|
|
138
|
+
params['previousBLSPrivateKeyName'] = previous_bls_private_key_name
|
|
139
|
+
params['t'] = self.t
|
|
140
|
+
response = self.__send_request('generateDKGPoly', params)
|
|
141
|
+
if response['status'] == 0:
|
|
142
|
+
return DkgPolyStatus.NEW_GENERATED
|
|
143
|
+
else:
|
|
144
|
+
return DkgPolyStatus.FAIL
|
|
145
|
+
|
|
133
146
|
def get_verification_vector(self, poly_name):
|
|
134
147
|
params = dict()
|
|
135
148
|
params['polyName'] = poly_name
|
|
@@ -181,6 +194,22 @@ class SgxZmq:
|
|
|
181
194
|
response = self.__send_request('createBLSPrivateKey', params)
|
|
182
195
|
return response['status'] == 0
|
|
183
196
|
|
|
197
|
+
def create_bls_private_key_v3(
|
|
198
|
+
self, poly_name, bls_key_name, eth_key_name, secret_contributions
|
|
199
|
+
):
|
|
200
|
+
params = dict()
|
|
201
|
+
# polyName is optional in V3 - new nodes joining the network do not pass it
|
|
202
|
+
if poly_name:
|
|
203
|
+
params['polyName'] = poly_name
|
|
204
|
+
|
|
205
|
+
params['blsKeyName'] = bls_key_name
|
|
206
|
+
params['ethKeyName'] = eth_key_name
|
|
207
|
+
params['secretContributions'] = secret_contributions
|
|
208
|
+
params['n'] = self.n
|
|
209
|
+
params['t'] = self.t
|
|
210
|
+
response = self.__send_request('createBLSPrivateKeyV3', params)
|
|
211
|
+
return response['status'] == 0
|
|
212
|
+
|
|
184
213
|
def get_bls_public_key(self, bls_key_name):
|
|
185
214
|
params = dict()
|
|
186
215
|
params['blsKeyName'] = bls_key_name
|
|
@@ -322,6 +351,7 @@ class SgxZmq:
|
|
|
322
351
|
self.method_to_type['getServerVersion'] = 'getServerVersionReq'
|
|
323
352
|
self.method_to_type['dkgVerification'] = 'dkgVerificationReq'
|
|
324
353
|
self.method_to_type['createBLSPrivateKey'] = 'createBLSPrivateReq'
|
|
354
|
+
self.method_to_type['createBLSPrivateKeyV3'] = 'createBLSPrivateV3Req'
|
|
325
355
|
self.method_to_type['getBLSPublicKeyShare'] = 'getBLSPublicReq'
|
|
326
356
|
self.method_to_type['complaintResponse'] = 'complaintResponseReq'
|
|
327
357
|
self.method_to_type['importBLSKeyShare'] = 'importBLSReq'
|
|
@@ -12,6 +12,13 @@ import hashlib
|
|
|
12
12
|
|
|
13
13
|
load_dotenv()
|
|
14
14
|
|
|
15
|
+
DKG_TEST_SLEEP_SECONDS = float(os.getenv('DKG_TEST_SLEEP_SECONDS', '0.1'))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def dkg_sleep():
|
|
19
|
+
if DKG_TEST_SLEEP_SECONDS > 0:
|
|
20
|
+
sleep(DKG_TEST_SLEEP_SECONDS)
|
|
21
|
+
|
|
15
22
|
|
|
16
23
|
def bxor(b1, b2):
|
|
17
24
|
parts = []
|
|
@@ -36,6 +43,162 @@ def convert_g2_point_to_hex(data):
|
|
|
36
43
|
return data_hexed
|
|
37
44
|
|
|
38
45
|
|
|
46
|
+
def get_sgx_client(n, t, with_zmq=False):
|
|
47
|
+
if not with_zmq:
|
|
48
|
+
return SgxClient(os.environ['SERVER'], path_to_cert=os.environ.get('CERT_PATH'), n=n, t=t)
|
|
49
|
+
return SgxClient(
|
|
50
|
+
os.environ['SERVER'], path_to_cert=os.environ.get('CERT_PATH'), n=n, t=t, zmq=True
|
|
51
|
+
).zmq
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def get_poly_name(node_id, dkg_id):
|
|
55
|
+
return (
|
|
56
|
+
"POLY:SCHAIN_ID:"
|
|
57
|
+
f"{str(0)}"
|
|
58
|
+
":NODE_ID:"
|
|
59
|
+
f"{str(node_id)}"
|
|
60
|
+
":DKG_ID:"
|
|
61
|
+
f"{str(dkg_id)}"
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def get_bls_key_name(node_id, dkg_id):
|
|
66
|
+
return (
|
|
67
|
+
"BLS_KEY:SCHAIN_ID:"
|
|
68
|
+
f"{str(0)}"
|
|
69
|
+
":NODE_ID:"
|
|
70
|
+
f"{str(node_id)}"
|
|
71
|
+
":DKG_ID:"
|
|
72
|
+
f"{str(dkg_id)}"
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def hex_verification_vectors(verification_vectors):
|
|
77
|
+
hexed_vv = []
|
|
78
|
+
for vv in verification_vectors:
|
|
79
|
+
cur_hexed = ""
|
|
80
|
+
for elem in vv:
|
|
81
|
+
cur_hexed += convert_g2_point_to_hex(elem)
|
|
82
|
+
hexed_vv.append(cur_hexed)
|
|
83
|
+
return hexed_vv
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def assert_bls_signature(sgx, bls_key_name):
|
|
87
|
+
message = secrets.token_hex(32)
|
|
88
|
+
signature_share = sgx.bls_sign(bls_key_name, message)
|
|
89
|
+
splitted_signature = signature_share.split(':')
|
|
90
|
+
assert len(splitted_signature) == 4
|
|
91
|
+
|
|
92
|
+
assert len(splitted_signature[0]) > 0
|
|
93
|
+
assert len(splitted_signature[0]) < 78
|
|
94
|
+
|
|
95
|
+
assert len(splitted_signature[1]) > 0
|
|
96
|
+
assert len(splitted_signature[1]) < 78
|
|
97
|
+
|
|
98
|
+
assert len(splitted_signature[2]) > 0
|
|
99
|
+
assert len(splitted_signature[2]) < 78
|
|
100
|
+
|
|
101
|
+
assert int(splitted_signature[3]) < 1000
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def assert_new_dkg_poly(response, node_id):
|
|
105
|
+
if response.name == 'FAIL':
|
|
106
|
+
raise TypeError("failed generate dkg poly for " + str(node_id))
|
|
107
|
+
assert response.name == 'NEW_GENERATED'
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def perform_dkg_v3(t=3, n=4, with_zmq=False):
|
|
111
|
+
initial_dkg = perform_dkg(t, n, with_0x=True, with_v2=not with_zmq, with_zmq=with_zmq)
|
|
112
|
+
sgx = initial_dkg['sgx']
|
|
113
|
+
|
|
114
|
+
active_node_ids = [0, 1, 2]
|
|
115
|
+
joining_node_id = 3
|
|
116
|
+
new_node_key = sgx.generate_key()
|
|
117
|
+
|
|
118
|
+
public_keys = [
|
|
119
|
+
initial_dkg['public_keys'][0],
|
|
120
|
+
initial_dkg['public_keys'][1],
|
|
121
|
+
initial_dkg['public_keys'][2],
|
|
122
|
+
new_node_key.public_key,
|
|
123
|
+
]
|
|
124
|
+
key_names = [
|
|
125
|
+
initial_dkg['key_names'][0],
|
|
126
|
+
initial_dkg['key_names'][1],
|
|
127
|
+
initial_dkg['key_names'][2],
|
|
128
|
+
new_node_key.name,
|
|
129
|
+
]
|
|
130
|
+
dkg_sleep()
|
|
131
|
+
|
|
132
|
+
random_dkg_id = random.randint(0, 10**50)
|
|
133
|
+
|
|
134
|
+
active_poly_names = []
|
|
135
|
+
for node_id in active_node_ids:
|
|
136
|
+
poly_name = get_poly_name(node_id, random_dkg_id)
|
|
137
|
+
response = sgx.generate_dkg_poly_v3(poly_name, initial_dkg['bls_key_names'][node_id])
|
|
138
|
+
assert_new_dkg_poly(response, node_id)
|
|
139
|
+
active_poly_names.append(poly_name)
|
|
140
|
+
dkg_sleep()
|
|
141
|
+
|
|
142
|
+
verification_vectors = []
|
|
143
|
+
for poly_name in active_poly_names:
|
|
144
|
+
verification_vectors.append(sgx.get_verification_vector(poly_name))
|
|
145
|
+
dkg_sleep()
|
|
146
|
+
|
|
147
|
+
hexed_vv = hex_verification_vectors(verification_vectors)
|
|
148
|
+
|
|
149
|
+
secret_key_contributions = []
|
|
150
|
+
for poly_name in active_poly_names:
|
|
151
|
+
if with_zmq:
|
|
152
|
+
secret_key_contributions.append(sgx.get_secret_key_contribution(poly_name, public_keys))
|
|
153
|
+
else:
|
|
154
|
+
secret_key_contributions.append(
|
|
155
|
+
sgx.get_secret_key_contribution_v2(poly_name, public_keys)
|
|
156
|
+
)
|
|
157
|
+
dkg_sleep()
|
|
158
|
+
|
|
159
|
+
for i in range(n):
|
|
160
|
+
for j in range(len(active_node_ids)):
|
|
161
|
+
if with_zmq:
|
|
162
|
+
assert sgx.verify_secret_share(
|
|
163
|
+
hexed_vv[j],
|
|
164
|
+
key_names[i],
|
|
165
|
+
secret_key_contributions[j][192*i:192*(i + 1)],
|
|
166
|
+
i,
|
|
167
|
+
)
|
|
168
|
+
else:
|
|
169
|
+
assert sgx.verify_secret_share_v2(
|
|
170
|
+
hexed_vv[j],
|
|
171
|
+
key_names[i],
|
|
172
|
+
secret_key_contributions[j][192*i:192*(i + 1)],
|
|
173
|
+
i,
|
|
174
|
+
)
|
|
175
|
+
dkg_sleep()
|
|
176
|
+
|
|
177
|
+
for i in range(n):
|
|
178
|
+
poly_name = active_poly_names[i] if i in active_node_ids else None
|
|
179
|
+
if i == joining_node_id:
|
|
180
|
+
assert poly_name is None
|
|
181
|
+
bls_key_name = get_bls_key_name(i, random_dkg_id)
|
|
182
|
+
assert sgx.create_bls_private_key_v3(
|
|
183
|
+
poly_name,
|
|
184
|
+
bls_key_name,
|
|
185
|
+
key_names[i],
|
|
186
|
+
[
|
|
187
|
+
{
|
|
188
|
+
'contributorIndex': active_node_ids[j],
|
|
189
|
+
'secretShare': secret_key_contributions[j][192*i:192*(i + 1)],
|
|
190
|
+
}
|
|
191
|
+
for j in range(len(active_node_ids))
|
|
192
|
+
],
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
public_key = sgx.get_bls_public_key(bls_key_name)
|
|
196
|
+
assert len(public_key) == 4
|
|
197
|
+
assert all(len(point) > 0 for point in public_key)
|
|
198
|
+
assert_bls_signature(sgx, bls_key_name)
|
|
199
|
+
dkg_sleep()
|
|
200
|
+
|
|
201
|
+
|
|
39
202
|
def perform_complaint(sgx, t, poly_name, public_key, corrupted_secret_key_contribution):
|
|
40
203
|
response = sgx.complaint_response(poly_name, 1)
|
|
41
204
|
share, dh_key = response.share, response.dh_key
|
|
@@ -59,14 +222,10 @@ def perform_complaint(sgx, t, poly_name, public_key, corrupted_secret_key_contri
|
|
|
59
222
|
|
|
60
223
|
|
|
61
224
|
def perform_dkg(t, n, with_0x=True, with_v2=True, with_complaint=False, with_zmq=False):
|
|
62
|
-
sgx =
|
|
63
|
-
if not with_zmq:
|
|
64
|
-
sgx = SgxClient(os.environ['SERVER'], path_to_cert=os.environ.get('CERT_PATH'), n=n, t=t)
|
|
65
|
-
else:
|
|
66
|
-
sgx = SgxClient(os.environ['SERVER'], path_to_cert=os.environ.get('CERT_PATH'),
|
|
67
|
-
n=n, t=t, zmq=True).zmq
|
|
225
|
+
sgx = get_sgx_client(n, t, with_zmq=with_zmq)
|
|
68
226
|
|
|
69
227
|
public_keys = []
|
|
228
|
+
generated_public_keys = []
|
|
70
229
|
key_name = []
|
|
71
230
|
|
|
72
231
|
random_dkg_id = random.randint(0, 10**50)
|
|
@@ -77,55 +236,27 @@ def perform_dkg(t, n, with_0x=True, with_v2=True, with_complaint=False, with_zmq
|
|
|
77
236
|
public_keys.append(generated_key.public_key)
|
|
78
237
|
else:
|
|
79
238
|
public_keys.append(generated_key.public_key[2:])
|
|
239
|
+
generated_public_keys.append(generated_key.public_key)
|
|
80
240
|
key_name.append(generated_key.name)
|
|
81
|
-
|
|
241
|
+
dkg_sleep()
|
|
82
242
|
|
|
83
243
|
for i in range(n):
|
|
84
|
-
poly_name = (
|
|
85
|
-
"POLY:SCHAIN_ID:"
|
|
86
|
-
f"{str(0)}"
|
|
87
|
-
":NODE_ID:"
|
|
88
|
-
f"{str(i)}"
|
|
89
|
-
":DKG_ID:"
|
|
90
|
-
f"{str(random_dkg_id)}"
|
|
91
|
-
)
|
|
92
|
-
from sgx.sgx_rpc_handler import DkgPolyStatus
|
|
244
|
+
poly_name = get_poly_name(i, random_dkg_id)
|
|
93
245
|
response = sgx.generate_dkg_poly(poly_name)
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
sleep(5)
|
|
246
|
+
assert_new_dkg_poly(response, i)
|
|
247
|
+
dkg_sleep()
|
|
97
248
|
|
|
98
249
|
verification_vector = []
|
|
99
250
|
for i in range(n):
|
|
100
|
-
poly_name = (
|
|
101
|
-
"POLY:SCHAIN_ID:"
|
|
102
|
-
f"{str(0)}"
|
|
103
|
-
":NODE_ID:"
|
|
104
|
-
f"{str(i)}"
|
|
105
|
-
":DKG_ID:"
|
|
106
|
-
f"{str(random_dkg_id)}"
|
|
107
|
-
)
|
|
251
|
+
poly_name = get_poly_name(i, random_dkg_id)
|
|
108
252
|
verification_vector.append(sgx.get_verification_vector(poly_name))
|
|
109
|
-
|
|
253
|
+
dkg_sleep()
|
|
110
254
|
|
|
111
|
-
hexed_vv =
|
|
112
|
-
|
|
113
|
-
for vv in verification_vector:
|
|
114
|
-
cur_hexed = ""
|
|
115
|
-
for elem in vv:
|
|
116
|
-
cur_hexed += convert_g2_point_to_hex(elem)
|
|
117
|
-
hexed_vv.append(cur_hexed)
|
|
255
|
+
hexed_vv = hex_verification_vectors(verification_vector)
|
|
118
256
|
|
|
119
257
|
secret_key_contribution = []
|
|
120
258
|
for i in range(n):
|
|
121
|
-
poly_name = (
|
|
122
|
-
"POLY:SCHAIN_ID:"
|
|
123
|
-
f"{str(0)}"
|
|
124
|
-
":NODE_ID:"
|
|
125
|
-
f"{str(i)}"
|
|
126
|
-
":DKG_ID:"
|
|
127
|
-
f"{str(random_dkg_id)}"
|
|
128
|
-
)
|
|
259
|
+
poly_name = get_poly_name(i, random_dkg_id)
|
|
129
260
|
|
|
130
261
|
if with_v2:
|
|
131
262
|
secret_key_contribution.append(
|
|
@@ -134,7 +265,7 @@ def perform_dkg(t, n, with_0x=True, with_v2=True, with_complaint=False, with_zmq
|
|
|
134
265
|
print("KEYS", public_keys)
|
|
135
266
|
secret_key_contribution.append(
|
|
136
267
|
sgx.get_secret_key_contribution(poly_name, public_keys))
|
|
137
|
-
|
|
268
|
+
dkg_sleep()
|
|
138
269
|
|
|
139
270
|
if not with_complaint:
|
|
140
271
|
for i in range(n):
|
|
@@ -145,34 +276,21 @@ def perform_dkg(t, n, with_0x=True, with_v2=True, with_complaint=False, with_zmq
|
|
|
145
276
|
key_name[i],
|
|
146
277
|
secret_key_contribution[j][192*i:192*(i + 1)], i):
|
|
147
278
|
raise ValueError(f'{i} failed to verify {j}')
|
|
148
|
-
|
|
279
|
+
dkg_sleep()
|
|
149
280
|
else:
|
|
150
281
|
if not sgx.verify_secret_share(
|
|
151
282
|
hexed_vv[j],
|
|
152
283
|
key_name[i],
|
|
153
284
|
secret_key_contribution[j][192*i:192*(i + 1)], i):
|
|
154
285
|
raise ValueError(f'{i} failed to verify {j}')
|
|
155
|
-
|
|
286
|
+
dkg_sleep()
|
|
156
287
|
|
|
157
|
-
|
|
288
|
+
calculated_bls_public_keys = sgx.calculate_all_bls_public_keys(hexed_vv)
|
|
289
|
+
bls_key_names = []
|
|
158
290
|
|
|
159
291
|
for i in range(n):
|
|
160
|
-
poly_name = (
|
|
161
|
-
|
|
162
|
-
f"{str(0)}"
|
|
163
|
-
":NODE_ID:"
|
|
164
|
-
f"{str(i)}"
|
|
165
|
-
":DKG_ID:"
|
|
166
|
-
f"{str(random_dkg_id)}"
|
|
167
|
-
)
|
|
168
|
-
bls_key_name = (
|
|
169
|
-
"BLS_KEY:SCHAIN_ID:"
|
|
170
|
-
f"{str(0)}"
|
|
171
|
-
":NODE_ID:"
|
|
172
|
-
f"{str(i)}"
|
|
173
|
-
":DKG_ID:"
|
|
174
|
-
f"{str(random_dkg_id)}"
|
|
175
|
-
)
|
|
292
|
+
poly_name = get_poly_name(i, random_dkg_id)
|
|
293
|
+
bls_key_name = get_bls_key_name(i, random_dkg_id)
|
|
176
294
|
|
|
177
295
|
if with_v2:
|
|
178
296
|
sgx.create_bls_private_key_v2(
|
|
@@ -186,29 +304,21 @@ def perform_dkg(t, n, with_0x=True, with_v2=True, with_complaint=False, with_zmq
|
|
|
186
304
|
bls_key_name,
|
|
187
305
|
key_name[i],
|
|
188
306
|
"".join(secret_key_contribution[j][192*i:192*(i + 1)] for j in range(n)))
|
|
307
|
+
bls_key_names.append(bls_key_name)
|
|
189
308
|
|
|
190
309
|
public_key = sgx.get_bls_public_key(bls_key_name)
|
|
191
310
|
|
|
192
|
-
assert ":".join(public_key) ==
|
|
311
|
+
assert ":".join(public_key) == calculated_bls_public_keys[i]
|
|
193
312
|
|
|
194
|
-
|
|
313
|
+
assert_bls_signature(sgx, bls_key_name)
|
|
314
|
+
dkg_sleep()
|
|
195
315
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
assert len(splitted_signature[1]) > 0
|
|
204
|
-
assert len(splitted_signature[1]) < 78
|
|
205
|
-
|
|
206
|
-
assert len(splitted_signature[2]) > 0
|
|
207
|
-
assert len(splitted_signature[2]) < 78
|
|
208
|
-
|
|
209
|
-
assert int(splitted_signature[3]) < 1000
|
|
210
|
-
|
|
211
|
-
sleep(5)
|
|
316
|
+
return {
|
|
317
|
+
'sgx': sgx,
|
|
318
|
+
'public_keys': generated_public_keys,
|
|
319
|
+
'key_names': key_name,
|
|
320
|
+
'bls_key_names': bls_key_names,
|
|
321
|
+
}
|
|
212
322
|
else:
|
|
213
323
|
corrupted_secret_key_contribution = secret_key_contribution[0]
|
|
214
324
|
secret_key_contribution[0] = secret_key_contribution[1]
|
|
@@ -237,16 +347,9 @@ def perform_dkg(t, n, with_0x=True, with_v2=True, with_complaint=False, with_zmq
|
|
|
237
347
|
hexed_vv[j],
|
|
238
348
|
key_name[i],
|
|
239
349
|
secret_key_contribution[j][192*i:192*(i + 1)], i)
|
|
240
|
-
|
|
350
|
+
dkg_sleep()
|
|
241
351
|
|
|
242
|
-
poly_name = (
|
|
243
|
-
"POLY:SCHAIN_ID:"
|
|
244
|
-
f"{str(0)}"
|
|
245
|
-
":NODE_ID:"
|
|
246
|
-
f"{str(0)}"
|
|
247
|
-
":DKG_ID:"
|
|
248
|
-
f"{str(random_dkg_id)}"
|
|
249
|
-
)
|
|
352
|
+
poly_name = get_poly_name(0, random_dkg_id)
|
|
250
353
|
perform_complaint(
|
|
251
354
|
sgx,
|
|
252
355
|
t,
|
|
@@ -409,6 +512,12 @@ def test_dkg_zmq():
|
|
|
409
512
|
print("TEST DKG WITH ZMQ PASSED")
|
|
410
513
|
|
|
411
514
|
|
|
515
|
+
def test_dkg_v3():
|
|
516
|
+
perform_dkg_v3(3, 4)
|
|
517
|
+
perform_dkg_v3(3, 4, with_zmq=True)
|
|
518
|
+
print("TEST DKG V3 PASSED")
|
|
519
|
+
|
|
520
|
+
|
|
412
521
|
def test_dkg_complaint():
|
|
413
522
|
perform_dkg(2, 2, with_complaint=True)
|
|
414
523
|
perform_dkg(2, 2, with_v2=False, with_complaint=True, with_zmq=True)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|