aboutsummaryrefslogtreecommitdiffhomepage
path: root/pyecsca/ec/op.py
diff options
context:
space:
mode:
authorJ08nY2019-03-21 14:55:14 +0100
committerJ08nY2019-03-21 14:55:14 +0100
commit647dfbbec29d9a4cabf1ca132390c837870535fd (patch)
treeef2c7148bbe6365916abc6b3e4c5f83ccdaa6c49 /pyecsca/ec/op.py
parent626102a3885d5c9bea88cafcb143fe626685f4b6 (diff)
downloadpyecsca-647dfbbec29d9a4cabf1ca132390c837870535fd.tar.gz
pyecsca-647dfbbec29d9a4cabf1ca132390c837870535fd.tar.zst
pyecsca-647dfbbec29d9a4cabf1ca132390c837870535fd.zip
Add conversion to and from affine points.
Diffstat (limited to 'pyecsca/ec/op.py')
-rw-r--r--pyecsca/ec/op.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/pyecsca/ec/op.py b/pyecsca/ec/op.py
index b366617..ea2254f 100644
--- a/pyecsca/ec/op.py
+++ b/pyecsca/ec/op.py
@@ -1,4 +1,5 @@
from ast import Module, walk, Name
+from types import CodeType
from typing import FrozenSet
from .mod import Mod
@@ -15,6 +16,7 @@ class Op(object):
class CodeOp(Op):
code: Module
+ compiled: CodeType
def __init__(self, code: Module):
self.code = code
@@ -31,8 +33,12 @@ class CodeOp(Op):
params.add(name)
self.parameters = frozenset(params)
self.variables = frozenset(variables)
+ self.compiled = compile(self.code, "", mode="exec")
+
+ def __repr__(self):
+ return f"CodeOp({self.result} = f(params={self.parameters}, vars={self.variables}))"
def __call__(self, *args, **kwargs) -> Mod:
loc = dict(kwargs)
- exec(compile(self.code, "", mode="exec"), {}, loc)
+ exec(self.compiled, {}, loc)
return loc[self.result]