7 from typing
import Optional, List
8 from os.path
import exists
15 Wrapper around the 'mpc' utility.
18 def __init__(self, mpc_tool: Optional[str] =
"", dry_run: bool =
False):
19 self.
mpc_tool = mpc_tool
or _default_mpc_tool()
25 powersoftau_file: str,
27 linear_comb_out_file: str,
28 pot_degree: Optional[int] =
None) -> bool:
29 args = [
"linear-combination"]
30 args += [
"--pot-degree",
str(pot_degree)]
if pot_degree
else []
31 args += [powersoftau_file, lagrange_file, linear_comb_out_file]
32 return self.
_exec(args)
34 def phase2_begin(self, linear_comb_file: str, challenge_0_file: str) -> bool:
35 return self.
_exec([
"phase2-begin", linear_comb_file, challenge_0_file])
41 out_new_challenge: Optional[str] =
None,
42 transcript: Optional[str] =
None) -> bool:
43 args = [
"phase2-verify-contribution"]
44 args += [
"--new-challenge", out_new_challenge] \
45 if out_new_challenge
else []
46 args += [
"--transcript", transcript]
if transcript
else []
47 args += [orig_challenge, response]
48 return self.
_exec(args)
55 digest_file: Optional[str] =
None) -> bool:
56 args = [
"phase2-verify-transcript"]
57 args += [
"--digest", digest_file]
if digest_file
else []
58 args += [orig_challenge, transcript, final_challenge]
59 return self.
_exec(args)
65 digest_file: Optional[str] =
None,
66 skip_user_input: bool =
False) -> bool:
67 args = [
"phase2-contribute", challenge_file, output_file]
68 args += [
"--digest", digest_file]
if digest_file
else []
69 args += [
"--skip-user-input"]
if skip_user_input
else []
70 return self.
_exec(args)
74 powersoftau_file: str,
75 linear_comb_file: str,
77 keypair_out_file: str,
78 pot_degree: Optional[int] =
None) -> bool:
79 args = [
"create-keypair"]
80 args += [
"--pot-degree",
str(pot_degree)]
if pot_degree
else []
86 return self.
_exec(args)
88 def _exec(self, args: List[str]) -> bool:
90 print(f
"CMD: {' '.join(cmd)}")
92 subprocess.run(cmd, check=
False).returncode == 0
95 def _default_mpc_tool() -> str:
97 os.path.dirname(__file__),
"..",
"..",
98 "build",
"mpc_tools",
"mpc_phase2",
"mpc-coord-phase2")