Skip to content

Commit

Permalink
fix rust tests
Browse files Browse the repository at this point in the history
  • Loading branch information
lonerapier committed Jan 30, 2025
1 parent 717ac4d commit 89f72e7
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 31 deletions.
16 changes: 8 additions & 8 deletions circuits/http/verification.circom
Original file line number Diff line number Diff line change
Expand Up @@ -101,15 +101,15 @@ template HTTPVerification(DATA_BYTES, MAX_NUMBER_OF_HEADERS, PUBLIC_IO_LENGTH) {
signal monomial_is_zero[DATA_BYTES];
signal accum_prev[DATA_BYTES];
var num_matched = 0;
signal inner_main_digest[DATA_BYTES + 1];
signal line_digest[DATA_BYTES + 1];
// Set this to what the previous digest was
inner_main_digest[0] <== machine_state[6];
line_digest[0] <== machine_state[6];
for(var i = 0 ; i < DATA_BYTES ; i++) {
monomial_is_zero[i] <== IsZero()(main_monomials[i]);
accum_prev[i] <== (1 - monomial_is_zero[i]) * inner_main_digest[i];
inner_main_digest[i+1] <== accum_prev[i] + data[i] * main_monomials[i];
is_zero[i] <== IsZero()(inner_main_digest[i+1]);
contains[i] <== Contains(MAX_NUMBER_OF_HEADERS + 1)(inner_main_digest[i+1], main_digests);
accum_prev[i] <== (1 - monomial_is_zero[i]) * line_digest[i];
line_digest[i+1] <== accum_prev[i] + data[i] * main_monomials[i];
is_zero[i] <== IsZero()(line_digest[i+1]);
contains[i] <== Contains(MAX_NUMBER_OF_HEADERS + 1)(line_digest[i+1], main_digests);
is_match[i] <== (1 - is_zero[i]) * contains[i];
num_matched += is_match[i];
}
Expand Down Expand Up @@ -154,7 +154,7 @@ template HTTPVerification(DATA_BYTES, MAX_NUMBER_OF_HEADERS, PUBLIC_IO_LENGTH) {
State[DATA_BYTES - 1].next_parsing_field_value,
State[DATA_BYTES - 1].next_parsing_body,
State[DATA_BYTES - 1].next_line_status,
inner_main_digest[DATA_BYTES]
line_digest[DATA_BYTES]
],
ciphertext_digest
);
Expand All @@ -172,7 +172,7 @@ template HTTPVerification(DATA_BYTES, MAX_NUMBER_OF_HEADERS, PUBLIC_IO_LENGTH) {
log("next_parsing_field_value: ", State[DATA_BYTES - 1].next_parsing_field_value);
log("next_parsing_body: ", State[DATA_BYTES - 1].next_parsing_body);
log("next_line_status: ", State[DATA_BYTES - 1].next_line_status);
log("inner_main_digest: ", inner_main_digest[DATA_BYTES]);
log("line_digest: ", line_digest[DATA_BYTES]);
log("body_digest: ", body_digest[DATA_BYTES - 1]);

for (var i = 0 ; i < PUBLIC_IO_LENGTH ; i++) {
Expand Down
10 changes: 5 additions & 5 deletions lib/src/http/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ pub mod parser;

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct HttpMachine {
pub header_num: usize,
pub status: HttpStatus,
pub line_accum: F,
pub header_num: usize,
pub status: HttpStatus,
pub line_digest: F,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
Expand All @@ -17,13 +17,13 @@ pub struct RawHttpMachine {
pub parsing_field_value: F,
pub parsing_body: F,
pub line_status: F,
pub inner_main_digest: F,
pub line_digest: F,
}

impl From<HttpMachine> for RawHttpMachine {
fn from(value: HttpMachine) -> Self {
let mut raw_http_machine = RawHttpMachine::default();
raw_http_machine.inner_main_digest = value.line_accum;
raw_http_machine.line_digest = value.line_digest;
raw_http_machine.parsing_header = F::from(value.header_num as u64);
match value.status {
HttpStatus::ParsingStart(start_line_location) => match start_line_location {
Expand Down
45 changes: 32 additions & 13 deletions lib/src/http/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ const COLON: u8 = 58;

pub fn parse(bytes: &[u8], polynomial_input: F) -> Result<Vec<HttpMachine>, WitnessGeneratorError> {
let mut machine = HttpMachine {
header_num: 0,
status: HttpStatus::ParsingStart(StartLineLocation::Beginning),
line_accum: F::ZERO,
header_num: 0,
status: HttpStatus::ParsingStart(StartLineLocation::Beginning),
line_digest: F::ZERO,
};

let mut output = vec![];
Expand All @@ -28,7 +28,7 @@ pub fn parse(bytes: &[u8], polynomial_input: F) -> Result<Vec<HttpMachine>, Witn
machine.status = HttpStatus::ParsingStart(StartLineLocation::End),
StartLineLocation::End => {},
};
machine.line_accum += polynomial_input.pow([line_ctr]) * F::from(*char as u64);
machine.line_digest += polynomial_input.pow([line_ctr]) * F::from(*char as u64);
line_ctr += 1;
},
(
Expand All @@ -38,38 +38,38 @@ pub fn parse(bytes: &[u8], polynomial_input: F) -> Result<Vec<HttpMachine>, Witn
) => {
machine.status = HttpStatus::LineStatus(LineStatus::CR);
line_ctr = 0;
machine.line_accum = F::ZERO;
machine.line_digest = F::ZERO;
},
(CR, HttpStatus::LineStatus(LineStatus::CRLF)) => {
machine.status = HttpStatus::LineStatus(LineStatus::CRLFCR);
line_ctr = 0;
machine.line_accum = F::ZERO;
machine.line_digest = F::ZERO;
},
(LF, HttpStatus::LineStatus(LineStatus::CR)) => {
machine.status = HttpStatus::LineStatus(LineStatus::CRLF);
line_ctr = 0;
machine.line_accum = F::ZERO;
machine.line_digest = F::ZERO;
},
(LF, HttpStatus::LineStatus(LineStatus::CRLFCR)) => {
machine.status = HttpStatus::ParsingBody;
machine.header_num = 0;
line_ctr = 0;
machine.line_accum = F::ZERO;
machine.line_digest = F::ZERO;
},
(_, HttpStatus::LineStatus(LineStatus::CRLF)) => {
machine.status = HttpStatus::ParsingHeader(NameOrValue::Name);
machine.header_num += 1;
machine.line_accum += polynomial_input.pow([line_ctr]) * F::from(*char as u64);
machine.line_digest += polynomial_input.pow([line_ctr]) * F::from(*char as u64);
line_ctr += 1;
},
(COLON, HttpStatus::ParsingHeader(NameOrValue::Name)) => {
machine.status = HttpStatus::ParsingHeader(NameOrValue::Value);
machine.line_accum += polynomial_input.pow([line_ctr]) * F::from(*char as u64);
machine.line_digest += polynomial_input.pow([line_ctr]) * F::from(*char as u64);
line_ctr += 1;
},
(_, HttpStatus::ParsingBody) => {},
_ => {
machine.line_accum += polynomial_input.pow([line_ctr]) * F::from(*char as u64);
machine.line_digest += polynomial_input.pow([line_ctr]) * F::from(*char as u64);
line_ctr += 1;
},
}
Expand Down Expand Up @@ -102,7 +102,7 @@ pub fn parse(bytes: &[u8], polynomial_input: F) -> Result<Vec<HttpMachine>, Witn
);
println!(
"state[ {ctr:?} ].inner_main_digest = {:?}",
BigUint::from_bytes_le(&raw_state.inner_main_digest.to_bytes())
BigUint::from_bytes_le(&raw_state.line_digest.to_bytes())
);
println!("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
ctr += 1;
Expand All @@ -118,7 +118,17 @@ mod tests {
pub fn test_parse_http() {
// It's funny to me every time
let polynomial_input = poseidon::<2>(&[F::from(69), F::from(420)]);
let states = parse(&mock::RESPONSE_PLAINTEXT.as_bytes(), polynomial_input);
let states = parse(&mock::RESPONSE_PLAINTEXT.as_bytes(), polynomial_input).unwrap();
assert_eq!(states.len(), mock::RESPONSE_PLAINTEXT.len());

let machine_state = RawHttpMachine::from(states.last().unwrap().clone());
assert_eq!(machine_state.parsing_start, F::ZERO);
assert_eq!(machine_state.parsing_header, F::ZERO);
assert_eq!(machine_state.parsing_field_name, F::ZERO);
assert_eq!(machine_state.parsing_field_value, F::ZERO);
assert_eq!(machine_state.parsing_body, F::ONE);
assert_eq!(machine_state.line_status, F::from(0));
assert_eq!(machine_state.line_digest, F::from(0));
}

const HTTP_BYTES: [u8; 915] = [
Expand Down Expand Up @@ -172,5 +182,14 @@ mod tests {
// It's funny to me every time
let polynomial_input = poseidon::<2>(&[F::from(69), F::from(420)]);
let states = parse(&HTTP_BYTES, polynomial_input).unwrap();

let machine_state = RawHttpMachine::from(states.last().unwrap().clone());
assert_eq!(machine_state.parsing_start, F::ZERO);
assert_eq!(machine_state.parsing_header, F::ZERO);
assert_eq!(machine_state.parsing_field_name, F::ZERO);
assert_eq!(machine_state.parsing_field_value, F::ZERO);
assert_eq!(machine_state.parsing_body, F::ONE);
assert_eq!(machine_state.line_status, F::from(0));
assert_eq!(machine_state.line_digest, F::from(0));
}
}
2 changes: 0 additions & 2 deletions lib/src/json/mod.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
use std::char::MAX;

use super::*;

pub mod parser;
Expand Down
14 changes: 11 additions & 3 deletions lib/src/json/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ impl<const MAX_STACK_HEIGHT: usize> From<JsonMachine<MAX_STACK_HEIGHT>>
Status::ParsingNumber(_) | Status::ParsingString(_),
) =>
if value.label_stack[value.pointer() - 1].1.is_empty() {
dbg!(value.pointer());
println!("in here because empty.");
// dbg!(value.pointer());
// println!("in here because empty.");
F::ZERO
} else {
println!("in here because not empty.");
// println!("in here because not empty.");
value.polynomial_input.pow([(value.label_stack[value.pointer() - 1].1.len() - 1) as u64])
},

Expand Down Expand Up @@ -352,6 +352,14 @@ mod tests {

let raw_states =
states.into_iter().map(RawJsonMachine::from).collect::<Vec<RawJsonMachine<5>>>();
assert_eq!(raw_states.len(), input.len());

let last_state = raw_states.last().unwrap();
assert_eq!(last_state.stack, [(F::ZERO, F::ZERO); 5]);
assert_eq!(last_state.tree_hash, [(F::ZERO, F::ZERO); 5]);
assert_eq!(last_state.parsing_number, F::ZERO);
assert_eq!(last_state.parsing_string, F::ZERO);
assert_eq!(last_state.monomial, F::ZERO);
// dbg!(raw_states);
}
}

0 comments on commit 89f72e7

Please sign in to comment.