sha2 testing infrastructure

This commit is contained in:
Nicholas Ward 2022-09-19 10:32:52 -07:00
parent 0d14ef4e82
commit f4207e75a4
4 changed files with 35 additions and 48 deletions

View File

@ -10,12 +10,15 @@ plonky2_util = { path = "../util" }
eth-trie-utils = { git = "https://github.com/mir-protocol/eth-trie-utils.git", rev = "dd3595b4ba7923f8d465450d210f17a2b4e20f96" }
maybe_rayon = { path = "../maybe_rayon" }
anyhow = "1.0.40"
ascii = "1.0.0"
env_logger = "0.9.0"
ethereum-types = "0.14.0"
hex = { version = "0.4.3", optional = true }
hex-literal = "0.3.4"
itertools = "0.10.3"
keccak-hash = "0.9.0"
log = "0.4.14"
maybe_rayon = { path = "../maybe_rayon" }
once_cell = "1.13.0"
pest = "2.1.3"
pest_derive = "2.1.0"
@ -23,7 +26,7 @@ rand = "0.8.5"
rand_chacha = "0.3.1"
rlp = "0.5.1"
serde = { version = "1.0.144", features = ["derive"] }
keccak-hash = "0.9.0"
sha2 = "0.10.2"
tiny-keccak = "2.0.2"
[dev-dependencies]

View File

@ -607,32 +607,25 @@ sha2_compression_end:
// stack: num_blocks, a[0]+a[64], b[0]+b[64], c[0]+c[64], d[0]+d[64], e[0]+e[64], f[0]+f[64], g[0]+g[64], h[0]+h[64], message_schedule_addr, i, retdest
pop
// stack: a[0]+a[64], b[0]+b[64], c[0]+c[64], d[0]+d[64], e[0]+e[64], f[0]+f[64], g[0]+g[64], h[0]+h[64], message_schedule_addr, i, retdest
swap1
%shl_const(32)
or
swap1
%shl_const(64)
%shl_const(32)
or
swap1
%shl_const(96)
%shl_const(32)
or
swap1
%shl_const(128)
%shl_const(32)
or
swap1
%shl_const(160)
%shl_const(32)
or
swap1
%shl_const(192)
%shl_const(32)
or
swap1
%shl_const(224)
%shl_const(32)
or
// stack: concat(h[0]+h[64], g[0]+g[64], f[0]+f[64], e[0]+e[64], d[0]+d[64], c[0]+c[64], b[0]+b[64], a[0]+a[64]), message_schedule_addr, i, retdest
// stack: concat(a[0]+a[64], b[0]+b[64], c[0]+c[64], d[0]+d[64], e[0]+e[64], f[0]+f[64], g[0]+g[64], h[0]+h[64]), message_schedule_addr, i, retdest
swap2
// stack: i, num_blocks, concat(h[0]+h[64], g[0]+g[64], f[0]+f[64], e[0]+e[64], d[0]+d[64], c[0]+c[64], b[0]+b[64], a[0]+a[64]), retdest
// stack: i, num_blocks, concat(a[0]+a[64], b[0]+b[64], c[0]+c[64], d[0]+d[64], e[0]+e[64], f[0]+f[64], g[0]+g[64], h[0]+h[64]), retdest
%pop2
// stack: sha2_result = concat(h[0]+h[64], g[0]+g[64], f[0]+f[64], e[0]+e[64], d[0]+d[64], c[0]+c[64], b[0]+b[64], a[0]+a[64]), retdest
// stack: sha2_result = concat(a[0]+a[64], b[0]+b[64], c[0]+c[64], d[0]+d[64], e[0]+e[64], f[0]+f[64], g[0]+g[64], h[0]+h[64]), retdest
STOP
global sha2:

View File

@ -579,7 +579,7 @@ mod tests {
);
let kernel = parse_and_assemble(&["%stack (a) -> (a)"]);
assert_eq!(kernel.code, vec![]);
assert_eq!(kernel.code, vec![] as Vec<u8>);
let kernel = parse_and_assemble(&["%stack (a, b, c) -> (c, b, a)"]);
assert_eq!(kernel.code, vec![swap2]);

View File

@ -1,18 +1,19 @@
use std::str::FromStr;
use anyhow::Result;
use ascii::AsciiStr;
use ethereum_types::U256;
use rand::{thread_rng, Rng};
use sha2::{Sha256, Digest};
use crate::cpu::kernel::aggregator::combined_kernel;
use crate::cpu::kernel::interpreter::run;
use crate::memory::segments::Segment;
#[test]
fn test_sha2_store() -> Result<()> {
fn test_sha2() -> Result<()> {
let kernel = combined_kernel();
let sha2 = kernel.global_labels["sha2"];
// let test_sha2_read = kernel.global_labels["test_sha2_read"];
let mut rng = thread_rng();
let num_bytes = rng.gen_range(1..17);
@ -28,14 +29,21 @@ fn test_sha2_store() -> Result<()> {
dbg!(num_bytes);
dbg!(bytes.clone());
let num_bytes = 3;
let bytes: Vec<U256> = vec![97.into(), 98.into(), 99.into()];
let message = "blargh blargh blargh";
let num_bytes = message.len();
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();
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();
dbg!(store_initial_stack.clone());
let after_sha2 = run(
&kernel.code,
@ -45,35 +53,18 @@ fn test_sha2_store() -> Result<()> {
)?;
let stack_after_storing = after_sha2.stack();
dbg!(stack_after_storing.clone());
let result = stack_after_storing.clone()[1];
let actual = format!("{:02X}", result);
let memory_after_storing = after_sha2.memory;
let _mem = memory_after_storing.context_memory[0].segments[Segment::KernelGeneral as usize]
.content
.clone();
dbg!(actual);
// let memory_after_storing = after_sha2.memory;
// let _mem = memory_after_storing.context_memory[0].segments[Segment::KernelGeneral as usize]
// .content
// .clone();
// dbg!(&mem[0..65]);
// dbg!(&mem[100..356]);
Ok(())
}
/*#[test]
fn test_sha2() -> Result<()> {
let kernel = combined_kernel();
let sha2_store = kernel.global_labels["sha2_store"];
let sha2_pad = kernel.global_labels["sha2_pad"];
let mut rng = thread_rng();
let a = U256([0; 4].map(|_| rng.gen()));
let b = U256([0; 4].map(|_| rng.gen()));
let initial_stack = vec![U256::from_str("0xdeadbeef")?, b, a];
let stack_with_kernel = run(&kernel.code, exp, initial_stack)?.stack;
let initial_stack = vec![b, a];
let code = [0xa, 0x63, 0xde, 0xad, 0xbe, 0xef, 0x56]; // EXP, PUSH4 deadbeef, JUMP
let expected_stack = todo!();
assert_eq!(stack_with_kernel, expected_stack);
Ok(())
}*/