Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pass more arguments by reference #77

Merged
merged 11 commits into from
Jul 24, 2024
6 changes: 3 additions & 3 deletions acl/src/sign.rs
Original file line number Diff line number Diff line change
Expand Up @@ -386,9 +386,9 @@ impl<A: ACLConfig> SigProof<A> {
pub fn prove<T: RngCore + CryptoRng>(
rng: &mut T,
tag_key: sw::Affine<A>,
sig_m: SigSign<A>,
vals: Vec<<A as CurveConfig>::ScalarField>,
gens: Vec<sw::Affine<A>>,
sig_m: &SigSign<A>,
vals: &[<A as CurveConfig>::ScalarField],
gens: &[sw::Affine<A>],
comm_r: <A as CurveConfig>::ScalarField,
) -> SigProof<A> {
let b_gamma = (A::GENERATOR.mul(sig_m.opening.gamma)).into_affine();
Expand Down
6 changes: 3 additions & 3 deletions acl/src/verify.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ impl<A: ACLConfig> SigComm<A> {
/// # Arguments
/// * `inter` - the intermediate values to use.
pub fn commit<T: RngCore + CryptoRng>(
keys: KeyPair<A>,
keys: &KeyPair<A>,
rng: &mut T,
comm: sw::Affine<A>,
) -> SigComm<A> {
Expand Down Expand Up @@ -163,7 +163,7 @@ impl<A: ACLConfig> SigVerify<A> {
pub fn verify(
pub_key: sw::Affine<A>,
tag_key: sw::Affine<A>,
sig_m: SigSign<A>,
sig_m: &SigSign<A>,
message: &str,
) -> bool {
let z2 = sig_m.sigma.zeta - sig_m.sigma.zeta1;
Expand Down Expand Up @@ -225,7 +225,7 @@ impl<A: ACLConfig> SigVerifProof<A> {
transcript.append_message(b"c1", &compressed_bytes[..]);
}

pub fn verify(proof: SigProof<A>, tag_key: sw::Affine<A>, sig_m: SigSign<A>) -> bool {
pub fn verify(proof: SigProof<A>, tag_key: sw::Affine<A>, sig_m: &SigSign<A>) -> bool {
// Equality proof of zeta = b_gamma
let rhs1 = (tag_key.mul(proof.pi1.a1)).into_affine();
let rhs2 = (A::GENERATOR.mul(proof.pi1.a1)).into_affine();
Expand Down
47 changes: 22 additions & 25 deletions boomerang/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -119,20 +119,19 @@ impl<B: BoomerangConfig> IssuanceC<B> {
let r_0 = <B as CurveConfig>::ScalarField::rand(rng);

let vals: Vec<<B as CurveConfig>::ScalarField> = vec![id_0, v, key_pair.x, r_0];
let (c1, gens) = PedersenComm::new_multi(vals.clone(), rng);
let (c1, gens) = PedersenComm::new_multi(&vals, rng);

let label = b"BoomerangM1";
let mut transcript = Transcript::new(label);

let proof =
IssuanceProofMulti::create(&mut transcript, rng, vals.clone(), &c1, gens.clone());
let proof = IssuanceProofMulti::create(&mut transcript, rng, &vals, &c1, &gens);

let m1 = IssuanceM1 {
comm: c1,
pi_issuance: proof,
u_pk: key_pair.public_key,
len: vals.len(),
gens: gens.clone(),
gens,
id_0,
r: r_0,
};
Expand Down Expand Up @@ -174,7 +173,7 @@ impl<B: BoomerangConfig> IssuanceC<B> {
pub fn populate_state(
c_m: IssuanceC<B>,
s_m: IssuanceS<B>,
s_key_pair: ServerKeyPair<B>,
s_key_pair: &ServerKeyPair<B>,
c_key_pair: UKeyPair<B>,
) -> State<B> {
let sig = SigSign::sign(
Expand Down Expand Up @@ -268,7 +267,7 @@ impl<B: BoomerangConfig> CollectionC<B> {
rng: &mut T,
state: State<B>,
s_m: CollectionS<B>,
s_key_pair: ServerKeyPair<B>,
s_key_pair: &ServerKeyPair<B>,
) -> CollectionC<B> {
let r1 = <B as CurveConfig>::ScalarField::rand(rng);
let id1 = <B as CurveConfig>::ScalarField::rand(rng);
Expand All @@ -283,23 +282,22 @@ impl<B: BoomerangConfig> CollectionC<B> {
state.token_state[0].r,
];

let (c1, gens) = PedersenComm::new_multi(vals.clone(), rng);
let (c1, gens) = PedersenComm::new_multi(&vals, rng);

let label = b"BoomerangCollectionM2O1";
let mut transcript = Transcript::new(label);

let proof_1 =
OpeningProofMulti::create(&mut transcript, rng, vals.clone(), &c1, gens.clone());
let proof_1 = OpeningProofMulti::create(&mut transcript, rng, &vals, &c1, &gens);

let label1 = b"BoomerangCollectionM2O2";
let mut transcript1 = Transcript::new(label1);

let proof_2 = OpeningProofMulti::create(
&mut transcript1,
rng,
prev_vals.clone(),
&prev_vals,
&state.comm_state[0],
state.token_state[0].gens.clone(),
&state.token_state[0].gens,
);

let t_tag = state.c_key_pair.x * state.token_state[0].id;
Expand Down Expand Up @@ -333,9 +331,9 @@ impl<B: BoomerangConfig> CollectionC<B> {
let sig_proof = SigProof::prove(
rng,
s_key_pair.s_key_pair.tag_key,
state.sig_state[0].clone(),
prev_vals,
state.token_state[0].gens.generators.clone(),
&state.sig_state[0],
&prev_vals,
&state.token_state[0].gens.generators,
state.comm_state[0].r,
);

Expand Down Expand Up @@ -389,7 +387,7 @@ impl<B: BoomerangConfig> CollectionC<B> {
pub fn populate_state(
c_m: CollectionC<B>,
s_m: CollectionS<B>,
s_key_pair: ServerKeyPair<B>,
s_key_pair: &ServerKeyPair<B>,
c_key_pair: UKeyPair<B>,
) -> State<B> {
let sig = SigSign::sign(
Expand Down Expand Up @@ -487,7 +485,7 @@ impl<B: BoomerangConfig> SpendVerifyC<B> {
rng: &mut T,
state: State<B>,
s_m: SpendVerifyS<B>,
s_key_pair: ServerKeyPair<B>,
s_key_pair: &ServerKeyPair<B>,
) -> SpendVerifyC<B> {
// Generate r1, ID_0'
let r1 = <B as CurveConfig>::ScalarField::rand(rng);
Expand All @@ -506,21 +504,20 @@ impl<B: BoomerangConfig> SpendVerifyC<B> {
];

// pedersen commitment
let (c1, gens) = PedersenComm::new_multi(vals.clone(), rng);
let (c1, gens) = PedersenComm::new_multi(&vals, rng);

// pi_open tk0 (token)
let mut transcript_p1 = Transcript::new(b"BoomerangSpendVerifyM2O1");
let proof_1 =
OpeningProofMulti::create(&mut transcript_p1, rng, vals.clone(), &c1, gens.clone());
let proof_1 = OpeningProofMulti::create(&mut transcript_p1, rng, &vals, &c1, &gens);

// pi_open tk? (previous token?)
let mut transcript_p2 = Transcript::new(b"BoomerangSpendVerifyM2O2");
let proof_2 = OpeningProofMulti::create(
&mut transcript_p2,
rng,
prev_vals.clone(),
&prev_vals,
&state.comm_state[0],
state.token_state[0].gens.clone(),
&state.token_state[0].gens,
);

// tag = (sk_u * tk0.r1) + r2
Expand Down Expand Up @@ -558,9 +555,9 @@ impl<B: BoomerangConfig> SpendVerifyC<B> {
let sig_proof = SigProof::prove(
rng,
s_key_pair.s_key_pair.tag_key,
state.sig_state[0].clone(),
prev_vals,
state.token_state[0].gens.generators.clone(),
&state.sig_state[0],
&prev_vals,
&state.token_state[0].gens.generators,
state.comm_state[0].r,
);

Expand Down Expand Up @@ -635,7 +632,7 @@ impl<B: BoomerangConfig> SpendVerifyC<B> {
pub fn populate_state(
c_m: SpendVerifyC<B>,
s_m: SpendVerifyS<B>,
s_key_pair: ServerKeyPair<B>,
s_key_pair: &ServerKeyPair<B>,
c_key_pair: UKeyPair<B>,
) -> State<B> {
let sig = SigSign::sign(
Expand Down
7 changes: 0 additions & 7 deletions boomerang/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,3 @@ pub struct State<B: BoomerangConfig> {
/// The user keypair
pub c_key_pair: UKeyPair<B>,
}

impl<B: BoomerangConfig> State<B> {
/// Boomerang state
pub const fn state(&self) -> &Vec<PedersenComm<B>> {
&self.comm_state
}
}
61 changes: 26 additions & 35 deletions boomerang/src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ impl<B: BoomerangConfig> IssuanceS<B> {
/// * `inter` - the intermediate values to use.
pub fn generate_issuance_m2<T: RngCore + CryptoRng>(
c_m: IssuanceC<B>,
key_pair: ServerKeyPair<B>,
key_pair: &ServerKeyPair<B>,
rng: &mut T,
) -> IssuanceS<B> {
let label = b"BoomerangM1";
Expand All @@ -113,7 +113,7 @@ impl<B: BoomerangConfig> IssuanceS<B> {
&c_m.m1.comm.comm,
&c_m.m1.u_pk,
c_m.m1.len,
c_m.m1.gens.clone(),
&c_m.m1.gens,
);

if !check {
Expand All @@ -127,11 +127,11 @@ impl<B: BoomerangConfig> IssuanceS<B> {
let v3 = <B as CurveConfig>::ScalarField::zero();
let vals: Vec<<B as CurveConfig>::ScalarField> = vec![id_1, v1, v2, v3];

let c1 = PedersenComm::new_multi_with_all_generators(vals.clone(), rng, c_m.m1.gens);
let c1 = PedersenComm::new_multi_with_all_generators(&vals, rng, &c_m.m1.gens);

let c = c1 + c_m.m1.comm;

let sig_comm = SigComm::commit(key_pair.s_key_pair.clone(), rng, c.comm);
let sig_comm = SigComm::commit(&key_pair.s_key_pair, rng, c.comm);
let m2 = IssuanceM2 {
id_1,
comm: c1,
Expand All @@ -146,7 +146,7 @@ impl<B: BoomerangConfig> IssuanceS<B> {
pub fn generate_issuance_m4(
c_m: IssuanceC<B>,
s_m: IssuanceS<B>,
key_pair: ServerKeyPair<B>,
key_pair: &ServerKeyPair<B>,
) -> IssuanceS<B> {
let sig_resp = SigResp::respond(
key_pair.s_key_pair.clone(),
Expand Down Expand Up @@ -239,25 +239,22 @@ impl<B: BoomerangConfig> CollectionS<B> {
rng: &mut T,
c_m: CollectionC<B>,
s_m: CollectionS<B>,
key_pair: ServerKeyPair<B>,
key_pair: &ServerKeyPair<B>,
v: <B as CurveConfig>::ScalarField,
) -> CollectionS<B> {
let check = SigVerify::verify(
key_pair.s_key_pair.verifying_key,
key_pair.s_key_pair.tag_key,
c_m.m2.sig.clone(),
&c_m.m2.sig,
"message",
);

if !check {
panic!("Boomerang collection: invalid signature");
}

let check2 = SigVerifProof::verify(
c_m.m2.s_proof,
key_pair.s_key_pair.tag_key,
c_m.m2.sig.clone(),
);
let check2 =
SigVerifProof::verify(c_m.m2.s_proof, key_pair.s_key_pair.tag_key, &c_m.m2.sig);

if !check2 {
panic!("Boomerang collection: invalid proof sig");
Expand All @@ -269,7 +266,7 @@ impl<B: BoomerangConfig> CollectionS<B> {
let check3 = c_m
.m2
.pi_1
.verify(&mut transcript, &c_m.m2.comm.comm, 4, c_m.m2.gens.clone());
.verify(&mut transcript, &c_m.m2.comm.comm, 4, &c_m.m2.gens);

if !check3 {
panic!("Boomerang collection: invalid proof opening 1");
Expand All @@ -282,7 +279,7 @@ impl<B: BoomerangConfig> CollectionS<B> {
&mut transcript1,
&c_m.m2.prev_comm.comm,
4,
c_m.m2.prev_gens.clone(),
&c_m.m2.prev_gens,
);

if !check4 {
Expand Down Expand Up @@ -317,10 +314,10 @@ impl<B: BoomerangConfig> CollectionS<B> {
let v3 = <B as CurveConfig>::ScalarField::zero();
let vals: Vec<<B as CurveConfig>::ScalarField> = vec![id_1, v, v2, v3];

let c1 = PedersenComm::new_multi_with_all_generators(vals.clone(), rng, c_m.m2.gens);
let c1 = PedersenComm::new_multi_with_all_generators(&vals, rng, &c_m.m2.gens);
let c = c1 + c_m.m2.comm;

let sig_comm = SigComm::commit(key_pair.s_key_pair.clone(), rng, c.comm);
let sig_comm = SigComm::commit(&key_pair.s_key_pair, rng, c.comm);

let m3 = CollectionM3 {
id_1,
Expand All @@ -340,7 +337,7 @@ impl<B: BoomerangConfig> CollectionS<B> {
pub fn generate_collection_m5(
c_m: CollectionC<B>,
s_m: CollectionS<B>,
key_pair: ServerKeyPair<B>,
key_pair: &ServerKeyPair<B>,
) -> CollectionS<B> {
let sig_resp = SigResp::respond(
key_pair.s_key_pair.clone(),
Expand Down Expand Up @@ -459,7 +456,7 @@ impl<B: BoomerangConfig> SpendVerifyS<B> {
rng: &mut T,
c_m: SpendVerifyC<B>,
s_m: SpendVerifyS<B>,
key_pair: ServerKeyPair<B>,
key_pair: &ServerKeyPair<B>,
v: <B as CurveConfig>::ScalarField,
state_vector: Vec<u64>,
policy_vector: Vec<u64>,
Expand All @@ -468,7 +465,7 @@ impl<B: BoomerangConfig> SpendVerifyS<B> {
let check = SigVerify::verify(
key_pair.s_key_pair.verifying_key,
key_pair.s_key_pair.tag_key,
c_m.m2.sig.clone(),
&c_m.m2.sig,
"message",
);

Expand All @@ -477,24 +474,19 @@ impl<B: BoomerangConfig> SpendVerifyS<B> {
}

// verify signature proof
let check2 = SigVerifProof::verify(
c_m.m2.s_proof,
key_pair.s_key_pair.tag_key,
c_m.m2.sig.clone(),
);
let check2 =
SigVerifProof::verify(c_m.m2.s_proof, key_pair.s_key_pair.tag_key, &c_m.m2.sig);

if !check2 {
panic!("Boomerang spend/verify: invalid proof sig");
}

// verify opening proof \pi_open(tk0)
let mut transcript_p1 = Transcript::new(b"BoomerangSpendVerifyM2O1");
let check3 = c_m.m2.pi_1.verify(
&mut transcript_p1,
&c_m.m2.comm.comm,
4,
c_m.m2.gens.clone(),
);
let check3 = c_m
.m2
.pi_1
.verify(&mut transcript_p1, &c_m.m2.comm.comm, 4, &c_m.m2.gens);

if !check3 {
panic!("Boomerang spend/verify: invalid proof opening 1");
Expand All @@ -506,7 +498,7 @@ impl<B: BoomerangConfig> SpendVerifyS<B> {
&mut transcript_p2,
&c_m.m2.prev_comm.comm,
4,
c_m.m2.prev_gens.clone(),
&c_m.m2.prev_gens,
);

/*if !check4 {
Expand Down Expand Up @@ -555,16 +547,15 @@ impl<B: BoomerangConfig> SpendVerifyS<B> {
<B as CurveConfig>::ScalarField::zero(),
<B as CurveConfig>::ScalarField::zero(),
];
let c0dashdash =
PedersenComm::new_multi_with_all_generators(vals.clone(), rng, c_m.m2.gens);
let c0dashdash = PedersenComm::new_multi_with_all_generators(&vals, rng, &c_m.m2.gens);

// C0 = C0' - C0''
let c0 = c_m.m2.comm - c0dashdash;

// create signature commitment
// R = BSA.comm(sk_IC, C0)
// sig_comm = R
let sig_comm = SigComm::commit(key_pair.s_key_pair.clone(), rng, c0.comm);
let sig_comm = SigComm::commit(&key_pair.s_key_pair, rng, c0.comm);

// Compute reward state
let reward: u64 = state_vector
Expand Down Expand Up @@ -613,7 +604,7 @@ impl<B: BoomerangConfig> SpendVerifyS<B> {
pub fn generate_spendverify_m5(
c_m: SpendVerifyC<B>,
s_m: SpendVerifyS<B>,
key_pair: ServerKeyPair<B>,
key_pair: &ServerKeyPair<B>,
) -> SpendVerifyS<B> {
let sig_resp = SigResp::respond(
key_pair.s_key_pair.clone(),
Expand Down
Loading
Loading