aboutsummaryrefslogtreecommitdiffhomepage
path: root/pyecsca/codegen/client.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyecsca/codegen/client.py')
-rw-r--r--pyecsca/codegen/client.py32
1 files changed, 20 insertions, 12 deletions
diff --git a/pyecsca/codegen/client.py b/pyecsca/codegen/client.py
index 197c703..cd4cff7 100644
--- a/pyecsca/codegen/client.py
+++ b/pyecsca/codegen/client.py
@@ -68,16 +68,16 @@ def cmd_init_prng(seed: bytes) -> str:
@public
-def cmd_set_params(group: DomainParameters) -> str:
+def cmd_set_params(params: DomainParameters) -> str:
data = {
- "p": encode_scalar(group.curve.prime),
- "n": encode_scalar(group.order),
- "h": encode_scalar(group.cofactor)
+ "p": encode_scalar(params.curve.prime),
+ "n": encode_scalar(params.order),
+ "h": encode_scalar(params.cofactor)
}
- for param, value in group.curve.parameters.items():
+ for param, value in params.curve.parameters.items():
data[param] = encode_scalar(value)
- data["g"] = encode_point(group.generator.to_affine())
- data["i"] = encode_point(group.neutral)
+ data["g"] = encode_point(params.generator.to_affine())
+ data["i"] = encode_point(params.curve.neutral)
return "c" + hexlify(encode_data(None, data)).decode()
@@ -113,7 +113,7 @@ def cmd_ecdsa_sign(data: bytes) -> str:
@public
def cmd_ecdsa_verify(data: bytes, sig: bytes) -> str:
- return "v" + hexlify(encode_data(None, {"d": data, "s": sig})).decode()
+ return "r" + hexlify(encode_data(None, {"d": data, "s": sig})).decode()
@public
@@ -173,7 +173,7 @@ class ImplTarget(SerialTarget):
def scalar_mult(self, scalar: int) -> Point:
self.write(cmd_scalar_mult(scalar).encode())
result = self.read(1)[1:-1]
- plen = (self.params.curve.prime + 7) // 8
+ plen = ((self.params.curve.prime.bit_length() + 7) // 8) * 2
self.read(1)
params = {var: Mod(int(result[i * plen:(i + 1) * plen], 16), self.params.curve.prime) for
i, var in enumerate(self.coords.variables)}
@@ -209,10 +209,12 @@ class ImplTarget(SerialTarget):
class BinaryTarget(ImplTarget):
binary: str
process: Optional[Popen]
+ debug_output: bool
- def __init__(self, binary: str, model: CurveModel, coords: CoordinateModel):
+ def __init__(self, binary: str, model: CurveModel, coords: CoordinateModel, debug_output: bool = False):
super().__init__(model, coords)
self.binary = binary
+ self.debug_output = debug_output
def connect(self):
self.process = Popen([self.binary], stdin=subprocess.PIPE, stdout=subprocess.PIPE,
@@ -221,20 +223,26 @@ class BinaryTarget(ImplTarget):
def write(self, data: bytes):
if self.process is None:
raise ValueError
+ if self.debug_output:
+ print(">>", data.decode())
self.process.stdin.write(data.decode() + "\n")
self.process.stdin.flush()
def read(self, timeout: int) -> bytes:
if self.process is None:
raise ValueError
- return self.process.stdout.readline().encode()
+ read = self.process.stdout.readline().encode()
+ if self.debug_output:
+ print("<<", read.decode(), end="")
+ return read
def disconnect(self):
if self.process is None:
return
self.process.stdin.close()
self.process.stdout.close()
- self.process.kill()
+ self.process.terminate()
+ self.process.wait()
@click.group(context_settings={"help_option_names": ["-h", "--help"]})