62 lines
1.5 KiB
Rust
Raw Normal View History

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;
2022-08-23 14:59:29 -07:00
use rand::distributions::Alphanumeric;
2022-07-26 11:02:12 -07:00
use rand::{thread_rng, Rng};
2022-08-18 16:21:52 -07:00
use sha2::{Digest, Sha256};
2022-07-26 11:02:12 -07:00
use crate::cpu::kernel::aggregator::combined_kernel;
use crate::cpu::kernel::interpreter::run;
2022-08-18 16:22:43 -07:00
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-08-23 14:59:29 -07:00
let num_bytes = rng.gen_range(1..10000);
2022-08-23 15:22:48 -07:00
let message: String = rng
.sample_iter(&Alphanumeric)
.take(num_bytes)
.map(char::from)
.collect();
2022-08-18 16:19:47 -07:00
dbg!(num_bytes);
2022-09-19 10:32:52 -07:00
let mut hasher = Sha256::new();
2022-08-23 14:59:29 -07:00
hasher.update(message.clone());
2022-09-19 10:32:52 -07:00
let expected = format!("{:02X}", hasher.finalize());
2022-08-23 14:59:29 -07:00
let bytes: Vec<U256> = AsciiStr::from_ascii(&message)
2022-08-18 16:21:52 -07:00
.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-08-19 13:50:59 -07:00
dbg!(stack_after_storing.clone());
2022-09-19 10:32:52 -07:00
let result = stack_after_storing.clone()[1];
let actual = format!("{:02X}", result);
2022-08-19 13:50:59 -07:00
dbg!(expected);
dbg!(actual);
2022-08-18 16:21:52 -07:00
2022-07-26 11:02:12 -07:00
Ok(())
}