From 7dbbbef1bd2b41e776c6a9c8aa180a69dcca4e54 Mon Sep 17 00:00:00 2001 From: GunaDD Date: Fri, 5 Dec 2025 19:54:12 +0000 Subject: [PATCH 1/2] perf: make xorin and keccak call a function that matches the new keccak opcode spec exactly --- src/lib.rs | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 9329fd3..fbefc7b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -333,20 +333,19 @@ impl Buffer { self.execute(offset, len, |buffer| dst[..len].copy_from_slice(buffer)); } + fn xorin_openvm_opcode(&mut self, mut buffer_ptr: *mut u8, input_ptr: *const u8, len: usize) { + let buf_u8: &mut [u8; 200] = unsafe { &mut *(buffer_ptr as *mut [u8; 200]) }; + let input_u8: &[u8] = unsafe { core::slice::from_raw_parts(input_ptr as *const u8, len) }; + + for i in 0..len { + buf_u8[i] ^= input_u8[i]; + } + } + fn xorin(&mut self, src: &[u8], offset: usize, len: usize) { - self.execute(offset, len, |dst| { - assert!(dst.len() <= src.len()); - let len = dst.len(); - let mut dst_ptr = dst.as_mut_ptr(); - let mut src_ptr = src.as_ptr(); - for _ in 0..len { - unsafe { - *dst_ptr ^= *src_ptr; - src_ptr = src_ptr.offset(1); - dst_ptr = dst_ptr.offset(1); - } - } - }); + let buffer_ptr = unsafe { (self.0.as_mut_ptr() as *mut u8).add(offset) }; + let input_ptr = src.as_ptr(); + self.xorin_openvm_opcode(buffer_ptr, input_ptr, len); } fn pad(&mut self, offset: usize, delim: u8, rate: usize) { @@ -400,8 +399,14 @@ impl KeccakState

{ } } + fn keccak_openvm_opcode(&mut self, mut buffer_ptr: *mut u8) { + let buffer: &mut Buffer = unsafe { &mut *(buffer_ptr as *mut Buffer) }; + keccakf(buffer.words()); + } + fn keccak(&mut self) { - P::execute(&mut self.buffer); + let buffer_ptr = unsafe { self.buffer.0.as_mut_ptr() as *mut u8 }; + self.keccak_openvm_opcode(buffer_ptr); } fn update(&mut self, input: &[u8]) { From c852320f87daebff16f4e69c8d3e0552c01fe749 Mon Sep 17 00:00:00 2001 From: GunaDD Date: Fri, 5 Dec 2025 22:30:16 +0000 Subject: [PATCH 2/2] feat: import openvm-keccak256-guest --- Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.toml b/Cargo.toml index 1e080fe..e2dd784 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,6 +13,7 @@ categories = ["cryptography", "no-std"] [dependencies] crunchy = "0.2.2" +openvm-keccak256-guest = { git = "https://github.com/openvm-org/openvm", branch = "feat/new-keccak", package = "openvm-keccak256-guest" } [profile.dev] opt-level = 3 # Controls the --opt-level the compiler builds with