async def prog(): n, t = 4, 1 pp = FakePreProcessedElements() pp.generate_zeros(1000, n, t) pp.generate_triples(120000, n, t) pp.generate_share_bits(1000, n, t) pp.generate_bits(3000, n, t) pp.generate_rands(10000, n, t) program_runner = TaskProgramRunner(n, t, config) program_runner.add(laesa_test_1) results = await program_runner.join() return results
async def test_get_share_bits(): n, t, = 4, 1 pp_elements = PreProcessedElements() pp_elements.generate_share_bits(1, n, t) async def _prog(ctx): share, bits = ctx.preproc.get_share_bits(ctx) opened_share = await share.open() opened_bits = await asyncio.gather(*[b.open() for b in bits]) bit_value = int("".join([str(b.value) for b in reversed(opened_bits)]), 2) assert bit_value == opened_share.value program_runner = TaskProgramRunner(n, t) program_runner.add(_prog) await program_runner.join()
async def test_less_than(begin, end, test_runner): pp_elements = PreProcessedElements() pp_elements.generate_share_bits(50, n, t) a_values = [randint(begin, end) for _ in range(3)] b_values = [a_values[0] - DIFF, a_values[1], a_values[2] + DIFF] async def _prog(context): a_shares = [context.Share(v) for v in a_values] b_shares = [context.Share(v) for v in b_values] results = await gather(*[(a_ < b_).open() for a_, b_ in zip(a_shares, b_shares)]) for (res, a, b) in zip(results, a_values, b_values): assert bool(res) == (a < b) await test_runner(_prog, n, t, PREPROCESSING, 2500, STANDARD_ARITHMETIC_MIXINS)
def _preprocess(n, t, k, to_generate): from honeybadgermpc.preprocessing import PreProcessedElements pp_elements = PreProcessedElements() for kind in to_generate: if kind == "triples": pp_elements.generate_triples(k, n, t) elif kind == "cubes": pp_elements.generate_cubes(k, n, t) elif kind == "zeros": pp_elements.generate_zeros(k, n, t) elif kind == "rands": pp_elements.generate_rands(k, n, t) elif kind == "bits": pp_elements.generate_bits(k, n, t) elif kind == "one_minus_one": pp_elements.generate_one_minus_ones(k, n, t) elif kind == "double_shares": pp_elements.generate_double_shares(k, n, t) elif kind == "share_bits": pp_elements.generate_share_bits(k, n, t) else: raise ValueError(f"{kind} must be manually preprocessed")