2022-07-26 11:02:12 -07:00
|
|
|
use std::str::FromStr;
|
|
|
|
|
|
|
|
|
|
use anyhow::Result;
|
2022-09-19 10:32:52 -07:00
|
|
|
use ascii::AsciiStr;
|
2022-07-26 11:02:12 -07:00
|
|
|
use ethereum_types::U256;
|
|
|
|
|
use rand::{thread_rng, Rng};
|
2022-09-19 10:32:52 -07:00
|
|
|
use sha2::{Sha256, Digest};
|
2022-07-26 11:02:12 -07:00
|
|
|
|
|
|
|
|
use crate::cpu::kernel::aggregator::combined_kernel;
|
|
|
|
|
use crate::cpu::kernel::interpreter::run;
|
2022-08-08 15:30:54 -07:00
|
|
|
use crate::memory::segments::Segment;
|
2022-07-26 11:02:12 -07:00
|
|
|
|
|
|
|
|
#[test]
|
2022-09-19 10:32:52 -07:00
|
|
|
fn test_sha2() -> Result<()> {
|
2022-07-26 11:02:12 -07:00
|
|
|
let kernel = combined_kernel();
|
2022-08-16 18:37:36 -07:00
|
|
|
let sha2 = kernel.global_labels["sha2"];
|
2022-09-25 20:13:04 -07:00
|
|
|
|
2022-07-26 11:02:12 -07:00
|
|
|
let mut rng = thread_rng();
|
2022-07-28 10:25:20 -07:00
|
|
|
let num_bytes = rng.gen_range(1..17);
|
2022-07-26 11:02:12 -07:00
|
|
|
let mut bytes: Vec<U256> = Vec::with_capacity(num_bytes);
|
|
|
|
|
for _ in 0..num_bytes {
|
|
|
|
|
let byte: u8 = rng.gen();
|
|
|
|
|
let mut v = vec![0; 31];
|
|
|
|
|
v.push(byte);
|
|
|
|
|
let v2: [u8; 32] = v.try_into().unwrap();
|
|
|
|
|
bytes.push(U256::from(v2));
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-28 07:11:58 -07:00
|
|
|
dbg!(num_bytes);
|
|
|
|
|
dbg!(bytes.clone());
|
|
|
|
|
|
2022-08-18 16:19:47 -07:00
|
|
|
let message = "blargh blargh blargh blargh blargh blargh blargh blargh blargh";
|
2022-09-19 10:32:52 -07:00
|
|
|
let num_bytes = message.len();
|
2022-08-18 16:19:47 -07:00
|
|
|
dbg!(num_bytes);
|
2022-09-19 10:32:52 -07:00
|
|
|
|
|
|
|
|
let mut hasher = Sha256::new();
|
|
|
|
|
hasher.update(message);
|
|
|
|
|
let expected = format!("{:02X}", hasher.finalize());
|
|
|
|
|
|
|
|
|
|
dbg!(expected);
|
|
|
|
|
|
|
|
|
|
let bytes: Vec<U256> = AsciiStr::from_ascii(message).unwrap().as_bytes().iter().map(|&x| U256::from(x as u32)).collect();
|
2022-08-11 17:50:23 -07:00
|
|
|
|
2022-09-25 20:13:04 -07:00
|
|
|
let mut store_initial_stack = vec![U256::from(num_bytes)];
|
|
|
|
|
store_initial_stack.extend(bytes);
|
|
|
|
|
store_initial_stack.push(U256::from_str("0xdeadbeef").unwrap());
|
|
|
|
|
store_initial_stack.reverse();
|
2022-08-08 11:37:35 -07:00
|
|
|
|
2022-08-16 18:37:36 -07:00
|
|
|
let after_sha2 = run(
|
2022-08-08 11:37:35 -07:00
|
|
|
&kernel.code,
|
2022-08-16 18:37:36 -07:00
|
|
|
sha2,
|
2022-08-08 11:37:35 -07:00
|
|
|
store_initial_stack,
|
|
|
|
|
&kernel.prover_inputs,
|
|
|
|
|
)?;
|
2022-08-08 15:31:14 -07:00
|
|
|
|
2022-08-16 18:37:36 -07:00
|
|
|
let stack_after_storing = after_sha2.stack();
|
2022-09-19 10:32:52 -07:00
|
|
|
let result = stack_after_storing.clone()[1];
|
|
|
|
|
let actual = format!("{:02X}", result);
|
|
|
|
|
|
|
|
|
|
dbg!(actual);
|
|
|
|
|
|
|
|
|
|
// let memory_after_storing = after_sha2.memory;
|
|
|
|
|
// let _mem = memory_after_storing.context_memory[0].segments[Segment::KernelGeneral as usize]
|
|
|
|
|
// .content
|
|
|
|
|
// .clone();
|
2022-08-16 18:37:36 -07:00
|
|
|
// dbg!(&mem[0..65]);
|
2022-07-26 11:02:12 -07:00
|
|
|
|
2022-08-16 18:37:36 -07:00
|
|
|
// dbg!(&mem[100..356]);
|
2022-07-26 11:02:12 -07:00
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|