mirror of https://github.com/zcash/mpc.git
Generate keypair from shared secrets.
This commit is contained in:
parent
fa278a429d
commit
b6c4ed06f7
|
@ -20,6 +20,7 @@ extern "C" {
|
||||||
fn libsnarkwrap_pairing(p: *const G1, q: *const G2) -> Gt;
|
fn libsnarkwrap_pairing(p: *const G1, q: *const G2) -> Gt;
|
||||||
fn libsnarkwrap_getcs(d: *mut libc::uint64_t, vars: *mut libc::uint64_t, omega: *mut Fr) -> *mut libc::c_void;
|
fn libsnarkwrap_getcs(d: *mut libc::uint64_t, vars: *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_eval(
|
fn libsnarkwrap_eval(
|
||||||
cs: *const libc::c_void,
|
cs: *const libc::c_void,
|
||||||
lc1: *const G1,
|
lc1: *const G1,
|
||||||
|
@ -30,6 +31,17 @@ extern "C" {
|
||||||
bt1: *mut G1,
|
bt1: *mut G1,
|
||||||
bt2: *mut G2,
|
bt2: *mut G2,
|
||||||
ct: *mut G1);
|
ct: *mut G1);
|
||||||
|
fn libsnarkwrap_test_keygen(
|
||||||
|
cs: *const libc::c_void,
|
||||||
|
tau: *const Fr,
|
||||||
|
alpha_a: *const Fr,
|
||||||
|
alpha_b: *const Fr,
|
||||||
|
alpha_c: *const Fr,
|
||||||
|
rho_a: *const Fr,
|
||||||
|
rho_b: *const Fr,
|
||||||
|
beta: *const Fr,
|
||||||
|
gamma: *const Fr
|
||||||
|
) -> *mut libc::c_void;
|
||||||
fn libsnarkwrap_test_eval(
|
fn libsnarkwrap_test_eval(
|
||||||
cs: *const libc::c_void,
|
cs: *const libc::c_void,
|
||||||
tau: *const Fr,
|
tau: *const Fr,
|
||||||
|
@ -73,6 +85,32 @@ pub struct CS {
|
||||||
pub omega: Fr
|
pub omega: Fr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct Keypair {
|
||||||
|
ptr: *mut libc::c_void
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Keypair {
|
||||||
|
pub fn generate(
|
||||||
|
cs: &CS,
|
||||||
|
tau: &Fr,
|
||||||
|
alpha_a: &Fr,
|
||||||
|
alpha_b: &Fr,
|
||||||
|
alpha_c: &Fr,
|
||||||
|
rho_a: &Fr,
|
||||||
|
rho_b: &Fr,
|
||||||
|
beta: &Fr,
|
||||||
|
gamma: &Fr
|
||||||
|
) -> Keypair {
|
||||||
|
unsafe {
|
||||||
|
Keypair {
|
||||||
|
ptr: libsnarkwrap_test_keygen(
|
||||||
|
cs.ptr, tau, alpha_a, alpha_b, alpha_c, rho_a, rho_b, beta, gamma
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl CS {
|
impl CS {
|
||||||
pub fn dummy() -> Self {
|
pub fn dummy() -> Self {
|
||||||
let mut d = 0;
|
let mut d = 0;
|
||||||
|
@ -142,6 +180,12 @@ impl Drop for CS {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Drop for Keypair {
|
||||||
|
fn drop(&mut self) {
|
||||||
|
unsafe { libsnarkwrap_dropkeypair(self.ptr) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub trait Pairing<Other: Group> {
|
pub trait Pairing<Other: Group> {
|
||||||
fn g1<'a>(&'a self, other: &'a Other) -> &'a G1;
|
fn g1<'a>(&'a self, other: &'a Other) -> &'a G1;
|
||||||
fn g2<'a>(&'a self, other: &'a Other) -> &'a G2;
|
fn g2<'a>(&'a self, other: &'a Other) -> &'a G2;
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "relations/arithmetic_programs/qap/qap.hpp"
|
#include "relations/arithmetic_programs/qap/qap.hpp"
|
||||||
#include "reductions/r1cs_to_qap/r1cs_to_qap.hpp"
|
#include "reductions/r1cs_to_qap/r1cs_to_qap.hpp"
|
||||||
#include "relations/constraint_satisfaction_problems/r1cs/examples/r1cs_examples.hpp"
|
#include "relations/constraint_satisfaction_problems/r1cs/examples/r1cs_examples.hpp"
|
||||||
|
#include "zk_proof_systems/ppzksnark/r1cs_ppzksnark/r1cs_ppzksnark.hpp"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace libsnark;
|
using namespace libsnark;
|
||||||
|
@ -205,6 +206,11 @@ extern "C" void libsnarkwrap_dropcs(r1cs_constraint_system<curve_Fr> *cs)
|
||||||
delete cs;
|
delete cs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" void libsnarkwrap_dropkeypair(r1cs_ppzksnark_keypair<curve_pp> *kp)
|
||||||
|
{
|
||||||
|
delete kp;
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" void libsnarkwrap_eval(
|
extern "C" void libsnarkwrap_eval(
|
||||||
const r1cs_constraint_system<curve_Fr> *cs,
|
const r1cs_constraint_system<curve_Fr> *cs,
|
||||||
const curve_G1 *lc1,
|
const curve_G1 *lc1,
|
||||||
|
@ -244,6 +250,33 @@ extern "C" void libsnarkwrap_eval(
|
||||||
|
|
||||||
// Comparison tests
|
// Comparison tests
|
||||||
|
|
||||||
|
extern "C" void* libsnarkwrap_test_keygen(
|
||||||
|
const r1cs_constraint_system<curve_Fr> *cs,
|
||||||
|
const curve_Fr *tau,
|
||||||
|
const curve_Fr *alpha_A,
|
||||||
|
const curve_Fr *alpha_B,
|
||||||
|
const curve_Fr *alpha_C,
|
||||||
|
const curve_Fr *rho_A,
|
||||||
|
const curve_Fr *rho_B,
|
||||||
|
const curve_Fr *beta,
|
||||||
|
const curve_Fr *gamma
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return new r1cs_ppzksnark_keypair<curve_pp>(
|
||||||
|
r1cs_ppzksnark_generator<curve_pp>(
|
||||||
|
*cs,
|
||||||
|
*tau,
|
||||||
|
*alpha_A,
|
||||||
|
*alpha_B,
|
||||||
|
*alpha_C,
|
||||||
|
*rho_A,
|
||||||
|
*rho_B,
|
||||||
|
*beta,
|
||||||
|
*gamma
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" bool libsnarkwrap_test_compare_tau(
|
extern "C" bool libsnarkwrap_test_compare_tau(
|
||||||
const curve_G1 *inputs1,
|
const curve_G1 *inputs1,
|
||||||
const curve_G2 *inputs2,
|
const curve_G2 *inputs2,
|
||||||
|
|
|
@ -158,6 +158,20 @@ impl Secrets {
|
||||||
|
|
||||||
tmp
|
tmp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn keypair(&self, cs: &CS) -> Keypair {
|
||||||
|
Keypair::generate(
|
||||||
|
cs,
|
||||||
|
&self.tau,
|
||||||
|
&self.alpha_a,
|
||||||
|
&self.alpha_b,
|
||||||
|
&self.alpha_c,
|
||||||
|
&self.rho_a,
|
||||||
|
&self.rho_b,
|
||||||
|
&self.beta,
|
||||||
|
&self.gamma
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Player {
|
struct Player {
|
||||||
|
@ -556,6 +570,8 @@ fn implthing() {
|
||||||
vk_beta_gamma_two = new_vk_beta_gamma_two;
|
vk_beta_gamma_two = new_vk_beta_gamma_two;
|
||||||
pk_K = new_pk_K;
|
pk_K = new_pk_K;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Compare against libsnark:
|
||||||
|
|
||||||
let mut shared_secrets = Secrets::new_blank();
|
let mut shared_secrets = Secrets::new_blank();
|
||||||
|
|
||||||
|
@ -563,5 +579,5 @@ fn implthing() {
|
||||||
player.test_multiply_secrets(&mut shared_secrets);
|
player.test_multiply_secrets(&mut shared_secrets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let target_kp = shared_secrets.keypair(&cs);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue