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

fix: audit fixes #331

Merged
merged 43 commits into from
Feb 8, 2024
Merged
Show file tree
Hide file tree
Changes from 40 commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
c916742
compatibility with Curta audit fixes: assertion on positive sqrt and …
tamirhemo Jan 16, 2024
cb3ab03
Merge remote-tracking branch 'origin/main' into tamir/audit_fixes
tamirhemo Jan 16, 2024
ece413a
fix: num_columns in a test
tamirhemo Jan 16, 2024
b85a0c7
fix: range checks on EC points and field element
tamirhemo Jan 16, 2024
27f8aaa
remove comment
tamirhemo Jan 16, 2024
454e91d
added assert num_bits % chunk_bits == 0
tamirhemo Jan 16, 2024
1b7a2e3
fix Uint reminder check
tamirhemo Jan 16, 2024
25696a2
added comments for generator results that need to be constrained
kevjue Oct 18, 2023
d1ed75a
audit of unconstrainted hints
kevjue Oct 19, 2023
bbbd684
audit of unconstrainted aync hints
kevjue Oct 19, 2023
ce3ef8e
removed hints and migrated to current lte
puma314 Oct 24, 2023
4b3db19
clippy
tamirhemo Nov 7, 2023
1230503
todos
tamirhemo Nov 9, 2023
5a3b955
keccac
tamirhemo Nov 9, 2023
a87b4e8
fix read, read_unsafe and add witness to functions
tamirhemo Nov 9, 2023
77a2cfe
fix from_vars_unsafe
tamirhemo Nov 9, 2023
47ad593
chore: update addresses (#332)
ctian1 Jan 18, 2024
8892625
feat(succinct-client): add gateways (#333)
ratankaliani Jan 19, 2024
843e088
refactor(succinct-client): derive (#336)
ratankaliani Jan 20, 2024
54e9b32
fix: rm broken optimism gateway (#334)
ratankaliani Jan 20, 2024
be4d598
refactor(succinct-client): gateway not found (#337)
ratankaliani Jan 22, 2024
79ba485
lint
ratankaliani Jan 24, 2024
2f11714
read_unsafe
ratankaliani Jan 24, 2024
f0e29d6
Merge remote-tracking branch 'origin/main' into tamir/audit_fixes
ratankaliani Jan 24, 2024
787396d
Merge remote-tracking branch 'origin/tamir/audit_fixes' into ratan/ma…
ratankaliani Jan 24, 2024
66e0036
fix
ratankaliani Jan 12, 2024
28f2d83
fix: use init for blake2b/sha256/sha512 digest (#345)
kevjue Jan 30, 2024
69cdcea
fix: Connect t values for curta hash verify_proof (#344)
kevjue Jan 30, 2024
e20e74c
refactor get_fixed_subarray
ratankaliani Feb 1, 2024
e368d5b
fix num columns blake
ratankaliani Feb 1, 2024
254cffc
Merge remote-tracking branch 'origin/tamir/audit_fixes' into ratan/re…
ratankaliani Feb 1, 2024
1b03be7
docs
ratankaliani Feb 1, 2024
3b8ba82
fix(audit): lt (#338)
ratankaliani Feb 3, 2024
0637395
fix(audit): refactor `pad_variable_length` for `sha256` + `sha512` (#…
ratankaliani Feb 3, 2024
c3f2044
fix: removed array_contains and handled partial subarray case for get…
kevjue Feb 3, 2024
ea6adad
fix(audit): constrain blake2b variable input length (#347)
ratankaliani Feb 3, 2024
4a44aeb
refactor(audit): sha256_variable input check
ratankaliani Feb 3, 2024
7dbad64
fix(audit): mark unconstrained generators
ratankaliani Feb 3, 2024
4258f20
fix(audit): get_fixed_subarray
ratankaliani Feb 3, 2024
67997b2
refactor: `get_fixed_subarray` (#352)
ratankaliani Feb 6, 2024
b096848
chore: cargo update
ratankaliani Feb 8, 2024
dd83388
chore: cargo
ratankaliani Feb 8, 2024
29991ea
chore: clippy
ratankaliani Feb 8, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 29 additions & 29 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion plonky2x/core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ ci = []

[dependencies]
plonky2 = { git = "https://github.com/mir-protocol/plonky2.git", default-features = false, rev = "2d36559d" }
curta = { git = "https://github.com/succinctlabs/curta.git" }
curta = { git = "https://github.com/succinctlabs/curta.git", branch = "tamir/audit_fixes" }
plonky2x-derive = { path = "../derive" }

num = { version = "0.4", default-features = false }
Expand Down
4 changes: 0 additions & 4 deletions plonky2x/core/src/backend/circuit/serialization/hints.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ use crate::frontend::eth::beacon::vars::{
BeaconBalancesVariable, BeaconHeaderVariable, BeaconValidatorVariable,
BeaconValidatorsVariable, BeaconWithdrawalVariable, BeaconWithdrawalsVariable,
};
use crate::frontend::eth::mpt::generators::LteGenerator;
use crate::frontend::eth::storage::generators::{
EthBlockGenerator, EthLogGenerator, EthStorageKeyGenerator, EthStorageProofHint,
};
Expand Down Expand Up @@ -368,9 +367,6 @@ where
let comparison_generator_id = ComparisonGenerator::<L::Field, D>::id();
r.register_simple::<ComparisonGenerator<L::Field, D>>(comparison_generator_id);

let le_generator_id = LteGenerator::<L, D>::id();
r.register_simple::<LteGenerator<L, D>>(le_generator_id);

r.register_hint::<BeaconBalanceWitnessHint>();

r.register_async_hint::<BeaconAllWithdrawalsHint>();
Expand Down
2 changes: 1 addition & 1 deletion plonky2x/core/src/frontend/curta/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ mod tests {

const NUM_ARITHMETIC_COLUMNS: usize = 0;
const NUM_FREE_COLUMNS: usize = 18;
const EXTENDED_COLUMNS: usize = 24;
const EXTENDED_COLUMNS: usize = 36;
}

#[derive(Debug, Clone, Serialize, Deserialize)]
Expand Down
2 changes: 1 addition & 1 deletion plonky2x/core/src/frontend/curta/proof.rs
Original file line number Diff line number Diff line change
Expand Up @@ -929,7 +929,7 @@ mod tests {
let hint = ProofReadHint { proof };
let output_stream = builder.hint(input_stream, hint);
let proof_variable = output_stream.read_stark_proof(&mut builder, &stark, &config);
let public_input_variable = output_stream.read_exact_unsafe(&mut builder, 3);
let public_input_variable = output_stream.read_exact(&mut builder, 3);

builder.verify_stark_proof(
&config,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
use super::request::EcOpRequest;
use super::request::{EcOpRequest, EcOpResponse};
use super::Curve;
use crate::frontend::curta::ec::point::AffinePointVariable;

#[derive(Debug, Clone)]
pub struct EcOpAccelerator {
pub ec_op_requests: Vec<EcOpRequest<Curve>>,
pub ec_op_responses: Vec<Option<AffinePointVariable<Curve>>>,
pub ec_op_responses: Vec<EcOpResponse<Curve>>,
}
69 changes: 38 additions & 31 deletions plonky2x/core/src/frontend/ecc/curve25519/curta/builder.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
use curta::chip::ec::EllipticCurveParameters;

use super::accelerator::EcOpAccelerator;
use super::proof_hint::EcOpProofHint;
use super::request::EcOpRequest;
use super::request::{EcOpRequest, EcOpResponse};
use super::result_hint::EcOpResultHint;
use super::stark::{Ed25519OpVariable, Ed25519Stark};
use super::Curve;
use crate::frontend::curta::ec::point::AffinePointVariable;
use crate::frontend::curta::field::variable::FieldVariable;
use crate::frontend::hint::synchronous::Async;
use crate::prelude::{CircuitBuilder, PlonkParameters, VariableStream};

Expand Down Expand Up @@ -39,17 +42,23 @@ impl<L: PlonkParameters<D>, const D: usize> CircuitBuilder<L, D> {

let output_stream = self.hint(input_stream, result_hint);

match &request {
EcOpRequest::Add(_, _)
| EcOpRequest::ScalarMul(_, _)
| EcOpRequest::Decompress(_) => {
let result = output_stream.read::<AffinePointVariable<Curve>>(self);
self.assert_is_equal(
result,
response.clone().expect("response should not be None"),
);
match response {
EcOpResponse::Add(c) => {
let c_hint = output_stream.read_unsafe::<AffinePointVariable<Curve>>(self);
self.assert_is_equal(c_hint, c.clone());
}
EcOpResponse::ScalarMul(c) => {
let c_hint = output_stream.read_unsafe::<AffinePointVariable<Curve>>(self);
self.assert_is_equal(c_hint, c.clone());
}
EcOpRequest::IsValid(_) => {}
EcOpResponse::Decompress(point, root) => {
let point_hint = output_stream.read_unsafe::<AffinePointVariable<Curve>>(self);
let root_hint = output_stream
.read::<FieldVariable<<Curve as EllipticCurveParameters>::BaseField>>(self);
self.assert_is_equal(point_hint, point.clone());
self.assert_is_equal(root_hint, root.clone());
}
EcOpResponse::IsValid => {}
}
}

Expand All @@ -63,42 +72,40 @@ impl<L: PlonkParameters<D>, const D: usize> CircuitBuilder<L, D> {
.zip(accelerator.ec_op_responses.iter())
{
requests.push(request.req_type());
match &request {
EcOpRequest::Add(a, b) => {
let response = response.as_ref().unwrap();
input_stream.write(&**a);
input_stream.write(&**b);
input_stream.write(response);
ec_ops.push(Ed25519OpVariable::Add(
*a.clone(),
*b.clone(),
response.clone(),
))
match (request, response) {
(EcOpRequest::Add(a, b), EcOpResponse::Add(c)) => {
input_stream.write(a.as_ref());
input_stream.write(b.as_ref());
input_stream.write(c);
ec_ops.push(Ed25519OpVariable::Add(*a.clone(), *b.clone(), c.clone()))
}
EcOpRequest::ScalarMul(scalar, point) => {
let response = response.as_ref().unwrap();
input_stream.write(&**scalar);
input_stream.write(&**point);
(EcOpRequest::ScalarMul(scalar, point), EcOpResponse::ScalarMul(response)) => {
input_stream.write(scalar.as_ref());
input_stream.write(point.as_ref());
input_stream.write(response);
ec_ops.push(Ed25519OpVariable::ScalarMul(
*scalar.clone(),
*point.clone(),
response.clone(),
))
}
EcOpRequest::Decompress(compressed_point) => {
let point = response.as_ref().unwrap();
input_stream.write(&**compressed_point);
(
EcOpRequest::Decompress(compressed_point),
EcOpResponse::Decompress(point, root),
) => {
input_stream.write(compressed_point.as_ref());
input_stream.write(point);
ec_ops.push(Ed25519OpVariable::Decompress(
compressed_point.clone(),
point.clone(),
root.clone(),
))
}
EcOpRequest::IsValid(point) => {
input_stream.write(&**point);
(EcOpRequest::IsValid(point), EcOpResponse::IsValid) => {
input_stream.write(point.as_ref());
ec_ops.push(Ed25519OpVariable::IsValid(*point.clone()))
}
_ => panic!("invalid request/response pair"),
}
}

Expand Down
9 changes: 9 additions & 0 deletions plonky2x/core/src/frontend/ecc/curve25519/curta/request.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use curta::chip::ec::EllipticCurve;
use serde::{Deserialize, Serialize};

use crate::frontend::curta::ec::point::{AffinePointVariable, CompressedEdwardsYVariable};
use crate::frontend::curta::field::variable::FieldVariable;
use crate::prelude::U256Variable;

#[derive(Clone, Debug, Copy, Serialize, Deserialize)]
Expand All @@ -25,6 +26,14 @@ pub enum EcOpRequest<E: EllipticCurve> {
IsValid(Box<AffinePointVariable<E>>),
}

#[derive(Debug, Clone)]
pub enum EcOpResponse<E: EllipticCurve> {
Add(AffinePointVariable<E>),
ScalarMul(AffinePointVariable<E>),
Decompress(AffinePointVariable<E>, FieldVariable<E::BaseField>),
IsValid,
}

impl<E: EllipticCurve> EcOpRequest<E> {
/// Returns the type of the request.
pub const fn req_type(&self) -> EcOpRequestType {
Expand Down
Loading
Loading