Skip to content
This repository has been archived by the owner on Oct 31, 2023. It is now read-only.

Commit

Permalink
fix!: avoid exposing internals of Assignments type (#119)
Browse files Browse the repository at this point in the history
fix: Avoid exposing internals of Assignments type
  • Loading branch information
phated authored Apr 17, 2023
1 parent 94f83a7 commit 614c81b
Show file tree
Hide file tree
Showing 5 changed files with 75 additions and 81 deletions.
60 changes: 23 additions & 37 deletions barretenberg_static_lib/src/composer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ mod test {
};

let case_1 = WitnessResult {
witness: Assignments(vec![]),
witness: vec![].into(),
public_inputs: Assignments::default(),
result: true,
};
Expand Down Expand Up @@ -235,27 +235,27 @@ mod test {
};

let case_1 = WitnessResult {
witness: Assignments(vec![(-1_i128).into(), 2_i128.into(), 1_i128.into()]),
witness: vec![(-1_i128).into(), 2_i128.into(), 1_i128.into()].into(),
public_inputs: Assignments::default(),
result: true,
};
let case_2 = WitnessResult {
witness: Assignments(vec![Scalar::zero(), Scalar::zero(), Scalar::zero()]),
witness: vec![Scalar::zero(), Scalar::zero(), Scalar::zero()].into(),
public_inputs: Assignments::default(),
result: true,
};
let case_3 = WitnessResult {
witness: Assignments(vec![10_i128.into(), (-3_i128).into(), 7_i128.into()]),
witness: vec![10_i128.into(), (-3_i128).into(), 7_i128.into()].into(),
public_inputs: Assignments::default(),
result: true,
};
let case_4 = WitnessResult {
witness: Assignments(vec![Scalar::zero(), Scalar::zero(), Scalar::one()]),
witness: vec![Scalar::zero(), Scalar::zero(), Scalar::one()].into(),
public_inputs: Assignments::default(),
result: false,
};
let case_5 = WitnessResult {
witness: Assignments(vec![Scalar::one(), 2_i128.into(), 6_i128.into()]),
witness: vec![Scalar::one(), 2_i128.into(), 6_i128.into()].into(),
public_inputs: Assignments::default(),
result: false,
};
Expand Down Expand Up @@ -296,42 +296,38 @@ mod test {
// but none are supplied in public_inputs. So the verifier will not
// supply anything.
let _case_1 = WitnessResult {
witness: Assignments(vec![(-1_i128).into(), 2_i128.into(), 1_i128.into()]),
witness: vec![(-1_i128).into(), 2_i128.into(), 1_i128.into()].into(),
public_inputs: Assignments::default(),
result: false,
};
let case_2 = WitnessResult {
witness: Assignments(vec![Scalar::zero(), Scalar::zero(), Scalar::zero()]),
public_inputs: Assignments(vec![Scalar::zero(), Scalar::zero()]),
witness: vec![Scalar::zero(), Scalar::zero(), Scalar::zero()].into(),
public_inputs: vec![Scalar::zero(), Scalar::zero()].into(),
result: true,
};

let case_3 = WitnessResult {
witness: Assignments(vec![Scalar::one(), 2_i128.into(), 6_i128.into()]),
public_inputs: Assignments(vec![Scalar::one(), 3_i128.into()]),
witness: vec![Scalar::one(), 2_i128.into(), 6_i128.into()].into(),
public_inputs: vec![Scalar::one(), 3_i128.into()].into(),
result: false,
};

// Not enough public inputs
let _case_4 = WitnessResult {
witness: Assignments(vec![
Scalar::one(),
Scalar::from(2_i128),
Scalar::from(6_i128),
]),
public_inputs: Assignments(vec![Scalar::one()]),
witness: vec![Scalar::one(), Scalar::from(2_i128), Scalar::from(6_i128)].into(),
public_inputs: vec![Scalar::one()].into(),
result: false,
};

let case_5 = WitnessResult {
witness: Assignments(vec![Scalar::one(), 2_i128.into(), 3_i128.into()]),
public_inputs: Assignments(vec![Scalar::one(), 2_i128.into()]),
witness: vec![Scalar::one(), 2_i128.into(), 3_i128.into()].into(),
public_inputs: vec![Scalar::one(), 2_i128.into()].into(),
result: true,
};

let case_6 = WitnessResult {
witness: Assignments(vec![Scalar::one(), 2_i128.into(), 3_i128.into()]),
public_inputs: Assignments(vec![Scalar::one(), 3_i128.into()]),
witness: vec![Scalar::one(), 2_i128.into(), 3_i128.into()].into(),
public_inputs: vec![Scalar::one(), 3_i128.into()].into(),
result: false,
};
let test_cases = vec![
Expand Down Expand Up @@ -381,23 +377,13 @@ mod test {
};

let case_1 = WitnessResult {
witness: Assignments(vec![
1_i128.into(),
1_i128.into(),
2_i128.into(),
3_i128.into(),
]),
public_inputs: Assignments(vec![Scalar::one()]),
witness: vec![1_i128.into(), 1_i128.into(), 2_i128.into(), 3_i128.into()].into(),
public_inputs: vec![Scalar::one()].into(),
result: true,
};
let case_2 = WitnessResult {
witness: Assignments(vec![
1_i128.into(),
1_i128.into(),
2_i128.into(),
13_i128.into(),
]),
public_inputs: Assignments(vec![Scalar::one()]),
witness: vec![1_i128.into(), 1_i128.into(), 2_i128.into(), 13_i128.into()].into(),
public_inputs: vec![Scalar::one()].into(),
result: false,
};

Expand Down Expand Up @@ -484,7 +470,7 @@ mod test {
witness_values.push(Scalar::zero());

let case_1 = WitnessResult {
witness: Assignments(witness_values),
witness: witness_values.into(),
public_inputs: Assignments::default(),
result: true,
};
Expand Down Expand Up @@ -548,7 +534,7 @@ mod test {
let witness_values = vec![scalar_0, scalar_1];

let case_1 = WitnessResult {
witness: Assignments(witness_values),
witness: witness_values.into(),
public_inputs: Assignments::default(),
result: true,
};
Expand Down
60 changes: 23 additions & 37 deletions barretenberg_wasm/src/composer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ mod test {
};

let case_1 = WitnessResult {
witness: Assignments(vec![]),
witness: vec![].into(),
public_inputs: Assignments::default(),
result: true,
};
Expand Down Expand Up @@ -302,27 +302,27 @@ mod test {
};

let case_1 = WitnessResult {
witness: Assignments(vec![(-1_i128).into(), 2_i128.into(), 1_i128.into()]),
witness: vec![(-1_i128).into(), 2_i128.into(), 1_i128.into()].into(),
public_inputs: Assignments::default(),
result: true,
};
let case_2 = WitnessResult {
witness: Assignments(vec![Scalar::zero(), Scalar::zero(), Scalar::zero()]),
witness: vec![Scalar::zero(), Scalar::zero(), Scalar::zero()].into(),
public_inputs: Assignments::default(),
result: true,
};
let case_3 = WitnessResult {
witness: Assignments(vec![10_i128.into(), (-3_i128).into(), 7_i128.into()]),
witness: vec![10_i128.into(), (-3_i128).into(), 7_i128.into()].into(),
public_inputs: Assignments::default(),
result: true,
};
let case_4 = WitnessResult {
witness: Assignments(vec![Scalar::zero(), Scalar::zero(), Scalar::one()]),
witness: vec![Scalar::zero(), Scalar::zero(), Scalar::one()].into(),
public_inputs: Assignments::default(),
result: false,
};
let case_5 = WitnessResult {
witness: Assignments(vec![Scalar::one(), 2_i128.into(), 6_i128.into()]),
witness: vec![Scalar::one(), 2_i128.into(), 6_i128.into()].into(),
public_inputs: Assignments::default(),
result: false,
};
Expand Down Expand Up @@ -363,42 +363,38 @@ mod test {
// but none are supplied in public_inputs. So the verifier will not
// supply anything.
let _case_1 = WitnessResult {
witness: Assignments(vec![(-1_i128).into(), 2_i128.into(), 1_i128.into()]),
witness: vec![(-1_i128).into(), 2_i128.into(), 1_i128.into()].into(),
public_inputs: Assignments::default(),
result: false,
};
let case_2 = WitnessResult {
witness: Assignments(vec![Scalar::zero(), Scalar::zero(), Scalar::zero()]),
public_inputs: Assignments(vec![Scalar::zero(), Scalar::zero()]),
witness: vec![Scalar::zero(), Scalar::zero(), Scalar::zero()].into(),
public_inputs: vec![Scalar::zero(), Scalar::zero()].into(),
result: true,
};

let case_3 = WitnessResult {
witness: Assignments(vec![Scalar::one(), 2_i128.into(), 6_i128.into()]),
public_inputs: Assignments(vec![Scalar::one(), 3_i128.into()]),
witness: vec![Scalar::one(), 2_i128.into(), 6_i128.into()].into(),
public_inputs: vec![Scalar::one(), 3_i128.into()].into(),
result: false,
};

// Not enough public inputs
let _case_4 = WitnessResult {
witness: Assignments(vec![
Scalar::one(),
Scalar::from(2_i128),
Scalar::from(6_i128),
]),
public_inputs: Assignments(vec![Scalar::one()]),
witness: vec![Scalar::one(), Scalar::from(2_i128), Scalar::from(6_i128)].into(),
public_inputs: vec![Scalar::one()].into(),
result: false,
};

let case_5 = WitnessResult {
witness: Assignments(vec![Scalar::one(), 2_i128.into(), 3_i128.into()]),
public_inputs: Assignments(vec![Scalar::one(), 2_i128.into()]),
witness: vec![Scalar::one(), 2_i128.into(), 3_i128.into()].into(),
public_inputs: vec![Scalar::one(), 2_i128.into()].into(),
result: true,
};

let case_6 = WitnessResult {
witness: Assignments(vec![Scalar::one(), 2_i128.into(), 3_i128.into()]),
public_inputs: Assignments(vec![Scalar::one(), 3_i128.into()]),
witness: vec![Scalar::one(), 2_i128.into(), 3_i128.into()].into(),
public_inputs: vec![Scalar::one(), 3_i128.into()].into(),
result: false,
};
let test_cases = vec![
Expand Down Expand Up @@ -448,23 +444,13 @@ mod test {
};

let case_1 = WitnessResult {
witness: Assignments(vec![
1_i128.into(),
1_i128.into(),
2_i128.into(),
3_i128.into(),
]),
public_inputs: Assignments(vec![Scalar::one()]),
witness: vec![1_i128.into(), 1_i128.into(), 2_i128.into(), 3_i128.into()].into(),
public_inputs: vec![Scalar::one()].into(),
result: true,
};
let case_2 = WitnessResult {
witness: Assignments(vec![
1_i128.into(),
1_i128.into(),
2_i128.into(),
13_i128.into(),
]),
public_inputs: Assignments(vec![Scalar::one()]),
witness: vec![1_i128.into(), 1_i128.into(), 2_i128.into(), 13_i128.into()].into(),
public_inputs: vec![Scalar::one()].into(),
result: false,
};

Expand Down Expand Up @@ -551,7 +537,7 @@ mod test {
witness_values.push(Scalar::zero());

let case_1 = WitnessResult {
witness: Assignments(witness_values),
witness: witness_values.into(),
public_inputs: Assignments::default(),
result: true,
};
Expand Down Expand Up @@ -615,7 +601,7 @@ mod test {
let witness_values = vec![scalar_0, scalar_1];

let case_1 = WitnessResult {
witness: Assignments(witness_values),
witness: witness_values.into(),
public_inputs: Assignments::default(),
result: true,
};
Expand Down
4 changes: 2 additions & 2 deletions barretenberg_wasm/src/pedersen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ impl Barretenberg {
FieldElement::from_be_bytes_reduce(&result_bytes)
}
pub fn compress_many(&mut self, inputs: Vec<FieldElement>) -> FieldElement {
let input_buf = Assignments(inputs).to_bytes();
let input_buf = Assignments::from(inputs).to_bytes();
let input_ptr = self.allocate(&input_buf);

self.call_multiple(
Expand All @@ -32,7 +32,7 @@ impl Barretenberg {
}

pub fn encrypt(&mut self, inputs: Vec<FieldElement>) -> (FieldElement, FieldElement) {
let input_buf = Assignments(inputs).to_bytes();
let input_buf = Assignments::from(inputs).to_bytes();
let input_ptr = self.allocate(&input_buf);

let result_ptr = Value::I32(32);
Expand Down
29 changes: 26 additions & 3 deletions common/src/barretenberg_structures.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,16 @@ use acvm::acir::BlackBoxFunc;
pub use acvm::FieldElement as Scalar;

#[derive(Debug, Clone)]
pub struct Assignments(pub Vec<Scalar>);
pub struct Assignments(Vec<Scalar>);
pub type WitnessAssignments = Assignments;

// This is a separate impl so the constructor can get the wasm_bindgen macro in the future
impl Assignments {
pub fn new() -> Assignments {
Assignments(vec![])
}
}

impl Assignments {
pub fn to_bytes(&self) -> Vec<u8> {
let mut buffer = Vec::new();
Expand All @@ -32,8 +39,24 @@ impl Assignments {
pub fn push(&mut self, value: Scalar) {
self.0.push(value);
}
pub fn new() -> Assignments {
Assignments(vec![])

pub fn is_empty(&self) -> bool {
self.0.is_empty()
}
}

impl IntoIterator for Assignments {
type Item = Scalar;
type IntoIter = std::vec::IntoIter<Self::Item>;

fn into_iter(self) -> Self::IntoIter {
self.0.into_iter()
}
}

impl From<Vec<Scalar>> for Assignments {
fn from(w: Vec<Scalar>) -> Assignments {
Assignments(w)
}
}

Expand Down
3 changes: 1 addition & 2 deletions common/src/proof.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,11 @@ pub fn remove_public_inputs(num_pub_inputs: usize, proof: &[u8]) -> Vec<u8> {
}

pub fn prepend_public_inputs(proof: Vec<u8>, public_inputs: Assignments) -> Vec<u8> {
if public_inputs.0.is_empty() {
if public_inputs.is_empty() {
return proof;
}

let public_inputs_bytes = public_inputs
.0
.into_iter()
.flat_map(|assignment| assignment.to_be_bytes());

Expand Down

0 comments on commit 614c81b

Please sign in to comment.