diff --git a/benchmark/test_benchmark_hbavss.py b/benchmark/test_benchmark_hbavss.py index 10e343f4..8fa64dc7 100644 --- a/benchmark/test_benchmark_hbavss.py +++ b/benchmark/test_benchmark_hbavss.py @@ -19,10 +19,35 @@ def get_avss_params(n, t): return g, h, public_keys, private_keys -@mark.parametrize("t, k", [(1, 5), (3, 5), (5, 5), (16, 5), (33, 5), (85, 5), - (1, 25), (3, 25), (5, 25), (16, 25), (33, 25), (85, 25), - (1, 50), (3, 50), (5, 50), (16, 50), (33, 50), (85, 50), - (1, 100), (3, 100), (5, 100), (16, 100), (33, 100), (85, 100)]) # (# noqa: E501) +@mark.parametrize( + "t, k", + [ + (1, 5), + (3, 5), + (5, 5), + (16, 5), + (33, 5), + (85, 5), + (1, 25), + (3, 25), + (5, 25), + (16, 25), + (33, 25), + (85, 25), + (1, 50), + (3, 50), + (5, 50), + (16, 50), + (33, 50), + (85, 50), + (1, 100), + (3, 100), + (5, 100), + (16, 100), + (33, 100), + (85, 100), + ], +) # (# noqa: E501) def test_benchmark_hbavss_lite_dealer(test_router, benchmark, t, k): loop = asyncio.get_event_loop() field = ZR @@ -36,13 +61,35 @@ def test_benchmark_hbavss_lite_dealer(test_router, benchmark, t, k): def _prog(): loop.run_until_complete(hbavss_light_batch_dealer(test_router, params)) + benchmark(_prog) -@mark.parametrize("t, k", [(1, 5), (3, 5), (5, 5), (16, 5), (33, 5), - (1, 25), (3, 25), (5, 25), (16, 25), (33, 25), - (1, 50), (3, 50), (5, 50), (16, 50), (33, 50), - (1, 100), (3, 100), (5, 100), (16, 100), (33, 100)]) +@mark.parametrize( + "t, k", + [ + (1, 5), + (3, 5), + (5, 5), + (16, 5), + (33, 5), + (1, 25), + (3, 25), + (5, 25), + (16, 25), + (33, 25), + (1, 50), + (3, 50), + (5, 50), + (16, 50), + (33, 50), + (1, 100), + (3, 100), + (5, 100), + (16, 100), + (33, 100), + ], +) def test_benchmark_hbavss_dealer(test_router, benchmark, t, k): loop = asyncio.get_event_loop() n = 3 * t + 1 @@ -57,13 +104,39 @@ def test_benchmark_hbavss_dealer(test_router, benchmark, t, k): def _prog(): loop.run_until_complete(hbavss_multibatch_dealer(test_router, params)) + benchmark(_prog) -@mark.parametrize("t, k", [(1, 5), (3, 5), (5, 5), (16, 5), (33, 5), (85, 5), - (1, 25), (3, 25), (5, 25), (16, 25), (33, 25), (85, 25), - (1, 50), (3, 50), (5, 50), (16, 50), (33, 50), (85, 50), - (1, 100), (3, 100), (5, 100), (16, 100), (33, 100), (85, 100)]) # (# noqa: E501) +@mark.parametrize( + "t, k", + [ + (1, 5), + (3, 5), + (5, 5), + (16, 5), + (33, 5), + (85, 5), + (1, 25), + (3, 25), + (5, 25), + (16, 25), + (33, 25), + (85, 25), + (1, 50), + (3, 50), + (5, 50), + (16, 50), + (33, 50), + (85, 50), + (1, 100), + (3, 100), + (5, 100), + (16, 100), + (33, 100), + (85, 100), + ], +) # (# noqa: E501) def test_benchmark_hbavss_lite(test_router, benchmark, t, k): loop = asyncio.get_event_loop() # field = GF(Subgroup.BLS12_381) @@ -78,13 +151,35 @@ def test_benchmark_hbavss_lite(test_router, benchmark, t, k): def _prog(): loop.run_until_complete(hbavss_light_batch(test_router, params)) + benchmark(_prog) -@mark.parametrize("t, k", [(1, 5), (3, 5), (5, 5), (16, 5), (33, 5), - (1, 25), (3, 25), (5, 25), (16, 25), (33, 25), - (1, 50), (3, 50), (5, 50), (16, 50), (33, 50), - (1, 100), (3, 100), (5, 100), (16, 100), (33, 100)]) +@mark.parametrize( + "t, k", + [ + (1, 5), + (3, 5), + (5, 5), + (16, 5), + (33, 5), + (1, 25), + (3, 25), + (5, 25), + (16, 25), + (33, 25), + (1, 50), + (3, 50), + (5, 50), + (16, 50), + (33, 50), + (1, 100), + (3, 100), + (5, 100), + (16, 100), + (33, 100), + ], +) def test_benchmark_hbavss(test_router, benchmark, t, k): loop = asyncio.get_event_loop() n = 3 * t + 1 @@ -99,6 +194,7 @@ def test_benchmark_hbavss(test_router, benchmark, t, k): def _prog(): loop.run_until_complete(hbavss_multibatch(test_router, params)) + benchmark(_prog) @@ -112,15 +208,15 @@ async def hbavss_light_batch(test_router, params): with ExitStack() as stack: for i in range(n): hbavss = HbAvssLight( - pks, sks[i], crs, n, t, i, sends[i], recvs[i], pc=pc, field=field) + pks, sks[i], crs, n, t, i, sends[i], recvs[i], pc=pc, field=field + ) hbavss_list[i] = hbavss stack.enter_context(hbavss) if i == dealer_id: avss_tasks[i] = asyncio.create_task(hbavss.avss(0, value=values)) else: avss_tasks[i] = asyncio.create_task(hbavss.avss(0, dealer_id=dealer_id)) - await asyncio.gather( - *[hbavss_list[i].output_queue.get() for i in range(n)]) + await asyncio.gather(*[hbavss_list[i].output_queue.get() for i in range(n)]) for task in avss_tasks: task.cancel() @@ -131,7 +227,18 @@ async def hbavss_light_batch_dealer(test_router, params): sends, recvs, _ = test_router(n + 1) dealer_id = n - hbavss = HbAvssLight(pks, None, crs, n, t, dealer_id, sends[dealer_id], recvs[dealer_id], pc=pc, field=field) # (# noqa: E501) + hbavss = HbAvssLight( + pks, + None, + crs, + n, + t, + dealer_id, + sends[dealer_id], + recvs[dealer_id], + pc=pc, + field=field, + ) # (# noqa: E501) await asyncio.create_task(hbavss.avss(0, value=values, client_mode=True)) @@ -146,15 +253,15 @@ async def hbavss_multibatch(test_router, params): hbavss_list = [None] * n for i in range(n): hbavss = HbAvssBatch( - pks, sks[i], crs, n, t, i, sends[i], recvs[i], pc=pc, field=field) + pks, sks[i], crs, n, t, i, sends[i], recvs[i], pc=pc, field=field + ) hbavss_list[i] = hbavss stack.enter_context(hbavss) if i == dealer_id: avss_tasks[i] = asyncio.create_task(hbavss.avss(0, values=values)) else: avss_tasks[i] = asyncio.create_task(hbavss.avss(0, dealer_id=dealer_id)) - await asyncio.gather( - *[hbavss_list[i].output_queue.get() for i in range(n)]) + await asyncio.gather(*[hbavss_list[i].output_queue.get() for i in range(n)]) for task in avss_tasks: task.cancel() @@ -163,5 +270,16 @@ async def hbavss_multibatch_dealer(test_router, params): (t, n, g, h, pks, sks, crs, pc, values, field) = params sends, recvs, _ = test_router(n + 1) dealer_id = n - hbavss = HbAvssBatch(pks, None, crs, n, t, dealer_id, sends[dealer_id], recvs[dealer_id], pc=pc, field=field) # (# noqa: E501) + hbavss = HbAvssBatch( + pks, + None, + crs, + n, + t, + dealer_id, + sends[dealer_id], + recvs[dealer_id], + pc=pc, + field=field, + ) # (# noqa: E501) await hbavss.avss(0, values=values, client_mode=True) diff --git a/benchmark/test_benchmark_rbc.py b/benchmark/test_benchmark_rbc.py index 77d32c13..261d1119 100644 --- a/benchmark/test_benchmark_rbc.py +++ b/benchmark/test_benchmark_rbc.py @@ -5,10 +5,27 @@ import os -@mark.parametrize("t, msglen", [(1, 200), (1, 10000), (3, 200), (3, 10000), - (5, 200), (5, 10000), (10, 200), (10, 10000), - (16, 200), (16, 10000), (25, 200), (25, 10000), - (33, 200), (33, 10000), (50, 200), (50, 10000)]) +@mark.parametrize( + "t, msglen", + [ + (1, 200), + (1, 10000), + (3, 200), + (3, 10000), + (5, 200), + (5, 10000), + (10, 200), + (10, 10000), + (16, 200), + (16, 10000), + (25, 200), + (25, 10000), + (33, 200), + (33, 10000), + (50, 200), + (50, 10000), + ], +) def test_benchmark_rbc(test_router, benchmark, t, msglen): loop = asyncio.get_event_loop() n = 3 * t + 1 @@ -18,14 +35,32 @@ def test_benchmark_rbc(test_router, benchmark, t, msglen): def _prog(): loop.run_until_complete(rbc(params)) + benchmark(_prog) # cProfile.runctx("_prog()", None, locals()) -@mark.parametrize("t, msglen", [(1, 200), (1, 10000), (3, 200), (3, 10000), - (5, 200), (5, 10000), (10, 200), (10, 10000), - (16, 200), (16, 10000), (25, 200), (25, 10000), - (33, 200), (33, 10000), (50, 200), (50, 10000)]) +@mark.parametrize( + "t, msglen", + [ + (1, 200), + (1, 10000), + (3, 200), + (3, 10000), + (5, 200), + (5, 10000), + (10, 200), + (10, 10000), + (16, 200), + (16, 10000), + (25, 200), + (25, 10000), + (33, 200), + (33, 10000), + (50, 200), + (50, 10000), + ], +) def test_benchmark_rbc_dealer(test_router, benchmark, t, msglen): loop = asyncio.get_event_loop() n = 3 * t + 1 @@ -35,6 +70,7 @@ def test_benchmark_rbc_dealer(test_router, benchmark, t, msglen): def _prog(): loop.run_until_complete(rbc_dealer(params)) + benchmark(_prog) # cProfile.runctx("_prog()", None, locals()) @@ -49,10 +85,12 @@ async def rbc(params): for i in range(n): if i == dealer_id: rbc_tasks[i] = asyncio.create_task( - reliablebroadcast(tag, i, n, t, dealer_id, msg, recvs[i], sends[i])) + reliablebroadcast(tag, i, n, t, dealer_id, msg, recvs[i], sends[i]) + ) else: rbc_tasks[i] = asyncio.create_task( - reliablebroadcast(tag, i, n, t, dealer_id, None, recvs[i], sends[i])) + reliablebroadcast(tag, i, n, t, dealer_id, None, recvs[i], sends[i]) + ) await asyncio.gather(*rbc_tasks) for task in rbc_tasks: task.cancel() diff --git a/benchmark/test_benchmark_reed_solomon.py b/benchmark/test_benchmark_reed_solomon.py index 88460aa2..53e92363 100644 --- a/benchmark/test_benchmark_reed_solomon.py +++ b/benchmark/test_benchmark_reed_solomon.py @@ -53,5 +53,5 @@ def test_benchmark_gao_robust_decode_fft(benchmark, t, galois_field): if i in faults: shares_with_faults.append(int(galois_field.random())) else: - shares_with_faults.append(int(truepoly(omega**(i) % p))) + shares_with_faults.append(int(truepoly(omega ** (i) % p))) benchmark(dec.robust_decode, parties, shares_with_faults) diff --git a/honeybadgermpc/betterpairing.py b/honeybadgermpc/betterpairing.py index 4ae13575..38604d89 100644 --- a/honeybadgermpc/betterpairing.py +++ b/honeybadgermpc/betterpairing.py @@ -125,8 +125,9 @@ def __pow__(self, other): exponend = ZR(intother) except ValueError: raise TypeError( - 'Invalid exponentiation param. Expected ZR or int. Got ' - + str(type(other))) + "Invalid exponentiation param. Expected ZR or int. Got " + + str(type(other)) + ) out = G1(dupe_pyg1(self.pyg1)) self.pyg1.ppmul(exponend.val, out.pyg1) return out @@ -549,10 +550,10 @@ def __init__(self, val=None): self.val = PyFr(0, 0, 0, 0) elif type(val) is int: uint = val % (bls12_381_r) - u1 = uint % 2**64 - u2 = (uint // (2**64)) % 2**64 - u3 = (uint // (2**128)) % 2**64 - u4 = (uint // (2**192)) + u1 = uint % 2 ** 64 + u2 = (uint // (2 ** 64)) % 2 ** 64 + u3 = (uint // (2 ** 128)) % 2 ** 64 + u4 = uint // (2 ** 192) self.val = PyFr(u1, u2, u3, u4) elif type(val) is str: if val[0:2] == "0x": @@ -560,10 +561,10 @@ def __init__(self, val=None): else: intval = int(val) uint = intval % (bls12_381_r) - u1 = uint % 2**64 - u2 = (uint // (2**64)) % 2**64 - u3 = (uint // (2**128)) % 2**64 - u4 = (uint // (2**192)) + u1 = uint % 2 ** 64 + u2 = (uint // (2 ** 64)) % 2 ** 64 + u3 = (uint // (2 ** 128)) % 2 ** 64 + u4 = uint // (2 ** 192) self.val = PyFr(u1, u2, u3, u4) elif type(val) is PyFr: self.val = val diff --git a/honeybadgermpc/broadcast/crypto/boldyreva.py b/honeybadgermpc/broadcast/crypto/boldyreva.py index 1b3ebeb7..726c0ac1 100644 --- a/honeybadgermpc/broadcast/crypto/boldyreva.py +++ b/honeybadgermpc/broadcast/crypto/boldyreva.py @@ -84,7 +84,7 @@ def __setstate__(self, d): def __eq__(self, other): return ( - self.l == other.l # noqa: E741 + self.l == other.l # noqa: E741 and self.k == other.k # noqa: E741 and self.VK == other.VK and self.VKs == other.VKs diff --git a/honeybadgermpc/broadcast/reliablebroadcast.py b/honeybadgermpc/broadcast/reliablebroadcast.py index 2dc5d4cc..d3c3b5d7 100644 --- a/honeybadgermpc/broadcast/reliablebroadcast.py +++ b/honeybadgermpc/broadcast/reliablebroadcast.py @@ -133,7 +133,9 @@ def merkle_verify(n, val, root_hash, branch, index): return True -async def reliablebroadcast(sid, pid, n, f, leader, input, receive, send, client_mode=False): # (# noqa: E501) +async def reliablebroadcast( + sid, pid, n, f, leader, input, receive, send, client_mode=False +): # (# noqa: E501) """Reliable broadcast :param int pid: ``0 <= pid < N`` :param int N: at least 3 diff --git a/honeybadgermpc/hbavss.py b/honeybadgermpc/hbavss.py index 46d39a38..e6b03a02 100644 --- a/honeybadgermpc/hbavss.py +++ b/honeybadgermpc/hbavss.py @@ -28,8 +28,10 @@ class HbAVSSMessageType: RECOVERY2 = "RECOVERY2" -class HbAvssLight(): - def __init__(self, public_keys, private_key, crs, n, t, my_id, send, recv, pc=None, field=ZR): # (# noqa: E501) +class HbAvssLight: + def __init__( + self, public_keys, private_key, crs, n, t, my_id, send, recv, pc=None, field=ZR + ): # (# noqa: E501) self.public_keys, self.private_key = public_keys, private_key self.n, self.t, self.my_id = n, t, my_id self.g = crs[0] @@ -291,7 +293,7 @@ async def avss(self, avss_id, value=None, dealer_id=None, client_mode=False): broadcast_msg, recv, send, - client_mode=client_mode + client_mode=client_mode, ) if client_mode and self.my_id == dealer_id: @@ -321,8 +323,10 @@ async def avss_parallel(self, avss_id, k, values=None, dealer_id=None): return await asyncio.gather(*avss_tasks) -class HbAvssBatch(): - def __init__(self, public_keys, private_key, crs, n, t, my_id, send, recv, pc=None, field=ZR): # (# noqa: E501) +class HbAvssBatch: + def __init__( + self, public_keys, private_key, crs, n, t, my_id, send, recv, pc=None, field=ZR + ): # (# noqa: E501) self.public_keys, self.private_key = public_keys, private_key self.n, self.t, self.my_id = n, t, my_id assert len(crs) == 3 @@ -633,7 +637,16 @@ async def avss(self, avss_id, values=None, dealer_id=None, client_mode=False): logger.debug("[%d] Starting reliable broadcast", self.my_id) rbc_msg = await reliablebroadcast( - tag, self.my_id, n, self.t, dealer_id, broadcast_msg, recv, send, client_mode=client_mode) # (# noqa: E501) + tag, + self.my_id, + n, + self.t, + dealer_id, + broadcast_msg, + recv, + send, + client_mode=client_mode, + ) # (# noqa: E501) tag = f"{dealer_id}-{avss_id}-B-AVID" send, recv = self.get_send(tag), self.subscribe_recv(tag) diff --git a/tests/test_hbavss.py b/tests/test_hbavss.py index edacb0d2..767924f2 100644 --- a/tests/test_hbavss.py +++ b/tests/test_hbavss.py @@ -75,7 +75,8 @@ async def test_hbavss_light_gf(test_router): with ExitStack() as stack: for i in range(n): hbavss = HbAvssLight( - pks, sks[i], crs, n, t, i, sends[i], recvs[i], field=field) + pks, sks[i], crs, n, t, i, sends[i], recvs[i], field=field + ) hbavss_list[i] = hbavss stack.enter_context(hbavss) if i == dealer_id: @@ -85,7 +86,8 @@ async def test_hbavss_light_gf(test_router): avss_tasks[i].add_done_callback(print_exception_callback) # shares = await asyncio.gather(*avss_tasks) outputs = await asyncio.gather( - *[hbavss_list[i].output_queue.get() for i in range(n)]) + *[hbavss_list[i].output_queue.get() for i in range(n)] + ) for task in avss_tasks: task.cancel() shares = [] @@ -634,7 +636,8 @@ async def test_hbavss_light_client_mode(test_router): hbavss_list[i] = hbavss stack.enter_context(hbavss) avss_tasks[i] = asyncio.create_task( - hbavss.avss(0, dealer_id=dealer_id, client_mode=True)) + hbavss.avss(0, dealer_id=dealer_id, client_mode=True) + ) avss_tasks[i].add_done_callback(print_exception_callback) outputs = await asyncio.gather( *[hbavss_list[i].output_queue.get() for i in range(n)] @@ -674,7 +677,8 @@ async def test_hbavss_batch_client_mode(test_router): hbavss_list[i] = hbavss stack.enter_context(hbavss) avss_tasks[i] = asyncio.create_task( - hbavss.avss(0, dealer_id=dealer_id, client_mode=True)) + hbavss.avss(0, dealer_id=dealer_id, client_mode=True) + ) avss_tasks[i].add_done_callback(print_exception_callback) outputs = await asyncio.gather( *[hbavss_list[i].output_queue.get() for i in range(n)] @@ -858,7 +862,8 @@ async def test_hbavss_batch_batch_gf(test_router): hbavss_list = [None] * n for i in range(n): hbavss = HbAvssBatch( - pks, sks[i], crs, n, t, i, sends[i], recvs[i], field=field) + pks, sks[i], crs, n, t, i, sends[i], recvs[i], field=field + ) hbavss_list[i] = hbavss stack.enter_context(hbavss) if i == dealer_id: @@ -867,7 +872,8 @@ async def test_hbavss_batch_batch_gf(test_router): avss_tasks[i] = asyncio.create_task(hbavss.avss(0, dealer_id=dealer_id)) avss_tasks[i].add_done_callback(print_exception_callback) outputs = await asyncio.gather( - *[hbavss_list[i].output_queue.get() for i in range(n)]) + *[hbavss_list[i].output_queue.get() for i in range(n)] + ) shares = [output[2] for output in outputs] for task in avss_tasks: task.cancel() @@ -875,7 +881,8 @@ async def test_hbavss_batch_batch_gf(test_router): fliped_shares = list(map(list, zip(*shares))) recovered_values = [] for item in fliped_shares: - recovered_values.append(polynomials_over( - field).interpolate_at(zip(range(1, n + 1), item))) + recovered_values.append( + polynomials_over(field).interpolate_at(zip(range(1, n + 1), item)) + ) assert recovered_values == values