mirror of https://github.com/zcash/mpc.git
Refactor dummy CS instance creation.
This commit is contained in:
parent
f2c79f9111
commit
6fdcc6f75b
|
@ -9,7 +9,7 @@ use bn::*;
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
fn libsnarkwrap_init();
|
fn libsnarkwrap_init();
|
||||||
fn libsnarkwrap_getcs(d: *mut libc::uint64_t, vars: *mut libc::uint64_t, inputs: *mut libc::uint64_t, omega: *mut Fr) -> *mut libc::c_void;
|
fn libsnarkwrap_getcs_dummy(d: *mut libc::uint64_t, vars: *mut libc::uint64_t, inputs: *mut libc::uint64_t, omega: *mut Fr) -> *mut libc::c_void;
|
||||||
fn libsnarkwrap_dropcs(cs: *mut libc::c_void);
|
fn libsnarkwrap_dropcs(cs: *mut libc::c_void);
|
||||||
fn libsnarkwrap_dropkeypair(kp: *mut libc::c_void);
|
fn libsnarkwrap_dropkeypair(kp: *mut libc::c_void);
|
||||||
fn libsnarkwrap_eval(
|
fn libsnarkwrap_eval(
|
||||||
|
@ -204,7 +204,7 @@ impl CS {
|
||||||
let mut num_inputs = 0;
|
let mut num_inputs = 0;
|
||||||
let mut o = Fr::zero();
|
let mut o = Fr::zero();
|
||||||
|
|
||||||
let cs = unsafe { libsnarkwrap_getcs(&mut d, &mut vars, &mut num_inputs, &mut o) };
|
let cs = unsafe { libsnarkwrap_getcs_dummy(&mut d, &mut vars, &mut num_inputs, &mut o) };
|
||||||
|
|
||||||
CS {
|
CS {
|
||||||
ptr: cs,
|
ptr: cs,
|
||||||
|
|
|
@ -39,35 +39,48 @@ extern "C" void libsnarkwrap_init() {
|
||||||
|
|
||||||
// QAP
|
// QAP
|
||||||
|
|
||||||
extern "C" void* libsnarkwrap_getcs(uint64_t *d, uint64_t *vars, uint64_t *num_inputs, curve_Fr *omega)
|
void* libsnark_cs_return(
|
||||||
|
uint64_t *d, uint64_t *vars, uint64_t *num_inputs, curve_Fr *omega,
|
||||||
|
r1cs_constraint_system<curve_Fr> cs
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// A/B swap
|
||||||
|
cs.swap_AB_if_beneficial();
|
||||||
|
|
||||||
|
// QAP reduction
|
||||||
|
auto qap = r1cs_to_qap_instance_map(cs);
|
||||||
|
|
||||||
|
*vars = cs.num_variables()+1;
|
||||||
|
*d = qap.degree();
|
||||||
|
|
||||||
|
// Sanity checks
|
||||||
|
assert(qap.A_in_Lagrange_basis.size() == *vars);
|
||||||
|
assert(qap.B_in_Lagrange_basis.size() == *vars);
|
||||||
|
assert(qap.C_in_Lagrange_basis.size() == *vars);
|
||||||
|
|
||||||
|
// Degree of the QAP must be a power of 2
|
||||||
|
assert(*d >= 2);
|
||||||
|
assert(((*d / 2) * 2) == *d);
|
||||||
|
|
||||||
|
// Assume radix2 evaluation domain
|
||||||
|
*omega = std::static_pointer_cast<basic_radix2_domain<curve_Fr>>(qap.domain)->omega;
|
||||||
|
*num_inputs = cs.num_inputs();
|
||||||
|
|
||||||
|
return new r1cs_constraint_system<curve_Fr>(cs);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" void* libsnarkwrap_getcs_dummy(uint64_t *d, uint64_t *vars, uint64_t *num_inputs, curve_Fr *omega)
|
||||||
{
|
{
|
||||||
// Generate a dummy circuit
|
// Generate a dummy circuit
|
||||||
auto example = generate_r1cs_example_with_field_input<curve_Fr>(250, 4);
|
auto example = generate_r1cs_example_with_field_input<curve_Fr>(250, 4);
|
||||||
|
|
||||||
// A/B swap
|
return libsnark_cs_return(
|
||||||
example.constraint_system.swap_AB_if_beneficial();
|
d,
|
||||||
|
vars,
|
||||||
{
|
num_inputs,
|
||||||
// QAP reduction
|
omega,
|
||||||
auto qap = r1cs_to_qap_instance_map(example.constraint_system);
|
example.constraint_system
|
||||||
|
);
|
||||||
// Sanity checks
|
|
||||||
assert(qap.A_in_Lagrange_basis.size() == example.constraint_system.num_variables()+1);
|
|
||||||
assert(qap.B_in_Lagrange_basis.size() == example.constraint_system.num_variables()+1);
|
|
||||||
assert(qap.C_in_Lagrange_basis.size() == example.constraint_system.num_variables()+1);
|
|
||||||
|
|
||||||
// Degree of the QAP must be a power of 2
|
|
||||||
assert(qap.degree() == 256);
|
|
||||||
|
|
||||||
// Assume radix2 evaluation domain
|
|
||||||
*omega = std::static_pointer_cast<basic_radix2_domain<curve_Fr>>(qap.domain)->omega;
|
|
||||||
|
|
||||||
*d = qap.degree();
|
|
||||||
*vars = example.constraint_system.num_variables()+1;
|
|
||||||
*num_inputs = example.constraint_system.num_inputs();
|
|
||||||
}
|
|
||||||
|
|
||||||
return new r1cs_constraint_system<curve_Fr>(example.constraint_system);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void libsnarkwrap_dropcs(r1cs_constraint_system<curve_Fr> *cs)
|
extern "C" void libsnarkwrap_dropcs(r1cs_constraint_system<curve_Fr> *cs)
|
||||||
|
|
Loading…
Reference in New Issue