aboutsummaryrefslogtreecommitdiff
path: root/src/Specific/Framework
diff options
context:
space:
mode:
authorGravatar Jason Gross <jgross@mit.edu>2017-10-16 01:16:24 -0400
committerGravatar Jason Gross <jasongross9@gmail.com>2017-10-18 23:01:29 -0400
commit3963ad55fada5c6df6c52e82ee483da9a085c9a9 (patch)
tree50f5831e0608a6a48873ebdd9226460866cb9a86 /src/Specific/Framework
parent228b9c35ae331ac30b5829689d9a9320612edb67 (diff)
Remake some curves
Diffstat (limited to 'src/Specific/Framework')
-rwxr-xr-xsrc/Specific/Framework/make_curve.py28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/Specific/Framework/make_curve.py b/src/Specific/Framework/make_curve.py
index 516b67868..65577fec6 100755
--- a/src/Specific/Framework/make_curve.py
+++ b/src/Specific/Framework/make_curve.py
@@ -29,6 +29,13 @@ def compute_c(modulus_str):
ret.append((part, '1'))
elif part[:3] == '-2^' and part[3:].isdigit():
ret.append((part[1:], '-1'))
+ elif len(part.split('*')) == 2:
+ a, b = part.split("*")
+ if "^" not in b:
+ ret.append((part, '1'))
+ else:
+ assert(b.replace(' ', '')[:2] == '2^')
+ ret.append((a.strip(), b.strip()))
else:
raw_input('Unhandled part: %s' % part)
ret = None
@@ -53,10 +60,23 @@ def compute_goldilocks(s, c):
if two_k != 2 * k: return False
return True
-
+def parse_base(base):
+ ret = 0
+ for term in base.split('+'):
+ term = term.strip()
+ if term.isdigit():
+ ret += int(term)
+ elif '.' in term and '/' not in term:
+ ret += float(term)
+ elif '/' in term and '.' not in term:
+ ret += Fraction(term)
+ else:
+ raw_input('Unhandled: %s' % term)
+ assert(False)
+ return ret
def negate_numexpr(expr):
- remap = dict([(d, d) for d in '0123456789^ '] + [('-', '+'), ('+', '-')])
+ remap = dict([(d, d) for d in '0123456789^* '] + [('-', '+'), ('+', '-')])
return ''.join(remap[ch] for ch in expr)
def usage(exitcode=0, errmsg=None):
@@ -195,9 +215,9 @@ def make_curve_parameters(parameters):
return 'Some %s%s' % (term, scope_string)
return term
replacements = dict(parameters)
- assert(all(ch in '0123456789^+- ' for ch in parameters['modulus']))
+ assert(all(ch in '0123456789^+-* ' for ch in parameters['modulus']))
modulus = eval(parameters['modulus'].replace('^', '**'))
- base = float(parameters['base'])
+ base = parse_base(parameters['base'])
replacements['reformatted_base'] = reformat_base(parameters['base'])
replacements['bitwidth'] = parameters.get('bitwidth', str(compute_bitwidth(base)))
bitwidth = int(replacements['bitwidth'])