mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-01-08 14:24:09 -05:00
132 lines
3.7 KiB
Python
132 lines
3.7 KiB
Python
# Functions here are called from pism.py using getattr()
|
|
# and the function name as a string.
|
|
|
|
def witness(line, out, point):
|
|
return \
|
|
r"""let %s = ecc::EdwardsPoint::witness(
|
|
cs.namespace(|| "%s"),
|
|
%s.map(jubjub::ExtendedPoint::from))?;""" % (out, line, point)
|
|
|
|
def assert_not_small_order(line, point):
|
|
return '%s.assert_not_small_order(cs.namespace(|| "%s"))?;' % (point, line)
|
|
|
|
def u64_as_binary_le(line, out, val):
|
|
return \
|
|
r"""let %s = boolean::u64_into_boolean_vec_le(
|
|
cs.namespace(|| "%s"),
|
|
%s,
|
|
)?;""" % (out, line, val)
|
|
|
|
def fr_as_binary_le(line, out, fr):
|
|
return \
|
|
r"""let %s = boolean::field_into_boolean_vec_le(
|
|
cs.namespace(|| "%s"), %s)?;""" % (out, line, fr)
|
|
|
|
def ec_mul_const(line, out, fr, base):
|
|
return \
|
|
r"""let %s = ecc::fixed_base_multiplication(
|
|
cs.namespace(|| "%s"),
|
|
&%s,
|
|
&%s,
|
|
)?;""" % (out, line, base, fr)
|
|
|
|
def ec_mul(line, out, fr, base):
|
|
return 'let %s = %s.mul(cs.namespace(|| "%s"), &%s)?;' % (
|
|
out, base, line, fr)
|
|
|
|
def ec_add(line, out, a, b):
|
|
return 'let %s = %s.add(cs.namespace(|| "%s"), &%s)?;' % (out, a, line, b)
|
|
|
|
def ec_repr(line, out, point):
|
|
return 'let %s = %s.repr(cs.namespace(|| "%s"))?;' % (out, point, line)
|
|
|
|
def ec_get_u(line, out, point):
|
|
return "let mut %s = %s.get_u().clone();" % (out, point)
|
|
|
|
def emit_ec(line, point):
|
|
return '%s.inputize(cs.namespace(|| "%s"))?;' % (point, line)
|
|
|
|
def alloc_binary(line, out):
|
|
return "let mut %s = vec![];" % out
|
|
|
|
def binary_clone(line, out, binary):
|
|
return "let mut %s: Vec<_> = %s.iter().cloned().collect();" % (out, binary)
|
|
|
|
def binary_extend(line, binary, value):
|
|
return "%s.extend(%s);" % (binary, value)
|
|
|
|
def binary_push(line, binary, bit):
|
|
return "%s.push(%s);" % (binary, bit)
|
|
|
|
def binary_truncate(line, binary, size):
|
|
return "%s.truncate(%s);" % (binary, size)
|
|
|
|
def static_assert_binary_size(line, binary, size):
|
|
return "assert_eq!(%s.len(), %s);" % (binary, size)
|
|
|
|
def blake2s(line, out, input, personalization):
|
|
return \
|
|
r"""let mut %s = blake2s::blake2s(
|
|
cs.namespace(|| "%s"),
|
|
&%s,
|
|
%s,
|
|
)?;""" % (out, line, input, personalization)
|
|
|
|
def pedersen_hash(line, out, input, personalization):
|
|
return \
|
|
r"""let mut %s = pedersen_hash::pedersen_hash(
|
|
cs.namespace(|| "%s"),
|
|
%s,
|
|
&%s,
|
|
)?;""" % (out, line, personalization, input)
|
|
|
|
def emit_binary(line, binary):
|
|
return 'multipack::pack_into_inputs(cs.namespace(|| "%s"), &%s)?;' % (
|
|
line, binary)
|
|
|
|
def alloc_bit(line, out, value):
|
|
return \
|
|
r"""let %s = boolean::Boolean::from(boolean::AllocatedBit::alloc(
|
|
cs.namespace(|| "%s"),
|
|
%s
|
|
)?);""" % (out, line, value)
|
|
|
|
def alloc_const_bit(line, out, value):
|
|
return "let %s = Boolean::constant(%s);" % (out, value)
|
|
|
|
def clone_bit(line, out, value):
|
|
return "let %s = %s.clone();" % (out, value)
|
|
|
|
def alloc_scalar(line, out, scalar):
|
|
return \
|
|
r"""let %s =
|
|
num::AllocatedNum::alloc(cs.namespace(|| "%s"), || Ok(*%s.get()?))?;""" % (
|
|
out, line, scalar)
|
|
|
|
def scalar_as_binary(line, out, scalar):
|
|
return 'let %s = %s.to_bits_le(cs.namespace(|| "%s"))?;' % (out, scalar,
|
|
line)
|
|
|
|
def emit_scalar(line, scalar):
|
|
return '%s.inputize(cs.namespace(|| "%s"))?;' % (scalar, line)
|
|
|
|
def scalar_enforce_equal(line, scalar_left, scalar_right):
|
|
return \
|
|
r"""cs.enforce(
|
|
|| "%s",
|
|
|lc| lc + %s.get_variable(),
|
|
|lc| lc + CS::one(),
|
|
|lc| lc + %s.get_variable(),
|
|
);""" % (line, scalar_left, scalar_right)
|
|
|
|
def conditionally_reverse(line, out_left, out_right, in_left, in_right,
|
|
condition):
|
|
return \
|
|
r"""let (%s, %s) = num::AllocatedNum::conditionally_reverse(
|
|
cs.namespace(|| "%s"),
|
|
&%s,
|
|
&%s,
|
|
&%s,
|
|
)?;""" % (out_left, out_right, line, in_left, in_right, condition)
|
|
|