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_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_dropkeypair(kp: *mut libc::c_void);
|
||||
fn libsnarkwrap_eval(
|
||||
cs: *const libc::c_void,
|
||||
lc1: *const G1,
|
||||
|
@ -30,6 +31,17 @@ extern "C" {
|
|||
bt1: *mut G1,
|
||||
bt2: *mut G2,
|
||||
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(
|
||||
cs: *const libc::c_void,
|
||||
tau: *const Fr,
|
||||
|
@ -73,6 +85,32 @@ pub struct CS {
|
|||
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 {
|
||||
pub fn dummy() -> Self {
|
||||
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> {
|
||||
fn g1<'a>(&'a self, other: &'a Other) -> &'a G1;
|
||||
fn g2<'a>(&'a self, other: &'a Other) -> &'a G2;
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include "relations/arithmetic_programs/qap/qap.hpp"
|
||||
#include "reductions/r1cs_to_qap/r1cs_to_qap.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 libsnark;
|
||||
|
@ -205,6 +206,11 @@ extern "C" void libsnarkwrap_dropcs(r1cs_constraint_system<curve_Fr> *cs)
|
|||
delete cs;
|
||||
}
|
||||
|
||||
extern "C" void libsnarkwrap_dropkeypair(r1cs_ppzksnark_keypair<curve_pp> *kp)
|
||||
{
|
||||
delete kp;
|
||||
}
|
||||
|
||||
extern "C" void libsnarkwrap_eval(
|
||||
const r1cs_constraint_system<curve_Fr> *cs,
|
||||
const curve_G1 *lc1,
|
||||
|
@ -244,6 +250,33 @@ extern "C" void libsnarkwrap_eval(
|
|||
|
||||
// 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(
|
||||
const curve_G1 *inputs1,
|
||||
const curve_G2 *inputs2,
|
||||
|
|
|
@ -158,6 +158,20 @@ impl Secrets {
|
|||
|
||||
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 {
|
||||
|
@ -556,6 +570,8 @@ fn implthing() {
|
|||
vk_beta_gamma_two = new_vk_beta_gamma_two;
|
||||
pk_K = new_pk_K;
|
||||
}
|
||||
|
||||
// Compare against libsnark:
|
||||
|
||||
let mut shared_secrets = Secrets::new_blank();
|
||||
|
||||
|
@ -563,5 +579,5 @@ fn implthing() {
|
|||
player.test_multiply_secrets(&mut shared_secrets);
|
||||
}
|
||||
|
||||
|
||||
let target_kp = shared_secrets.keypair(&cs);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue