From d3986e6b50bfeeeacf14aefc57b52d34c920b236 Mon Sep 17 00:00:00 2001 From: Dmitry Vagner Date: Tue, 16 May 2023 15:02:01 +0200 Subject: [PATCH] merge successful --- evm/src/cpu/kernel/tests/bn254.rs | 6 ++-- evm/src/curve_pairings.rs | 17 +++++++--- evm/src/extension_tower.rs | 56 ++++++++++--------------------- 3 files changed, 34 insertions(+), 45 deletions(-) diff --git a/evm/src/cpu/kernel/tests/bn254.rs b/evm/src/cpu/kernel/tests/bn254.rs index d9a798b7..f30af67d 100644 --- a/evm/src/cpu/kernel/tests/bn254.rs +++ b/evm/src/cpu/kernel/tests/bn254.rs @@ -20,7 +20,7 @@ fn extract_stack(interpreter: Interpreter<'static>) -> Vec { .collect::>() } -fn run_bn_mul_fp6(f: Fp6, g: Fp6, label: &str) -> Vec { +fn run_bn_mul_fp6(f: Fp6, g: Fp6, label: &str) -> Fp6 { let mut stack = f.to_stack(); if label == "mul_fp254_6" { stack.extend(g.to_stack().to_vec()); @@ -52,7 +52,7 @@ fn test_bn_mul_fp6() -> Result<()> { Ok(()) } -fn run_bn_mul_fp12(f: Fp12, g: Fp12, label: &str) -> Vec { +fn run_bn_mul_fp12(f: Fp12, g: Fp12, label: &str) -> Fp12 { let in0: usize = 100; let in1: usize = 112; let out: usize = 124; @@ -118,7 +118,7 @@ fn test_bn_frob_fp6() -> Result<()> { Ok(()) } -fn run_bn_frob_fp12(f: Fp12, n: usize) -> Vec { +fn run_bn_frob_fp12(f: Fp12, n: usize) -> Fp12 { let ptr: usize = 100; let setup = InterpreterMemoryInitialization { label: format!("test_frob_fp254_12_{}", n), diff --git a/evm/src/curve_pairings.rs b/evm/src/curve_pairings.rs index 708e7fb2..d789051a 100644 --- a/evm/src/curve_pairings.rs +++ b/evm/src/curve_pairings.rs @@ -25,12 +25,21 @@ impl Curve { } } -impl Curve { - pub fn on_stack(self) -> Vec { - let mut stack = self.x.on_stack(); - stack.extend(self.y.on_stack()); +impl Stack for Curve { + const SIZE: usize = 2 * T::SIZE; + + fn to_stack(&self) -> Vec { + let mut stack = self.x.to_stack(); + stack.extend(self.y.to_stack()); stack } + + fn from_stack(stack: &[U256]) -> Self { + Curve { + x: T::from_stack(&stack[0..T::SIZE]), + y: T::from_stack(&stack[T::SIZE..2 * T::SIZE]), + } + } } impl Curve diff --git a/evm/src/extension_tower.rs b/evm/src/extension_tower.rs index f7c076e2..845d99aa 100644 --- a/evm/src/extension_tower.rs +++ b/evm/src/extension_tower.rs @@ -1225,7 +1225,7 @@ where pub trait Stack { const SIZE: usize; - fn to_stack(&self) -> &[U256]; + fn to_stack(&self) -> Vec; fn from_stack(stack: &[U256]) -> Self; } @@ -1233,9 +1233,8 @@ pub trait Stack { impl Stack for BN254 { const SIZE: usize = 1; - fn to_stack(&self) -> &[U256] { - let boxed: Box<[U256]> = Box::new([self.val]); - Box::leak(boxed) + fn to_stack(&self) -> Vec { + vec![self.val] } fn from_stack(stack: &[U256]) -> BN254 { @@ -1243,18 +1242,11 @@ impl Stack for BN254 { } } -impl Stack for BN254 { - fn on_stack(self) -> Vec { - vec![self.val] - } -} - impl Stack for BLS381 { const SIZE: usize = 2; - fn to_stack(&self) -> &[U256] { - let boxed: Box<[U256]> = Box::new([self.lo(), self.hi()]); - Box::leak(boxed) + fn to_stack(&self) -> Vec { + vec![self.lo(), self.hi()] } fn from_stack(stack: &[U256]) -> BLS381 { @@ -1268,13 +1260,10 @@ impl Stack for BLS381 { impl Stack for Fp2 { const SIZE: usize = 2 * T::SIZE; - fn to_stack(&self) -> &[U256] { - let re = self.re.to_stack(); - let im = self.im.to_stack(); - let mut combined: Vec = Vec::new(); - combined.extend_from_slice(re); - combined.extend_from_slice(im); - Box::leak(combined.into_boxed_slice()) + fn to_stack(&self) -> Vec { + let mut stack = self.re.to_stack(); + stack.extend(self.im.to_stack()); + stack } fn from_stack(stack: &[U256]) -> Fp2 { @@ -1293,16 +1282,11 @@ where { const SIZE: usize = 3 * Fp2::::SIZE; - fn to_stack(&self) -> &[U256] { - let t0 = self.t0.to_stack(); - let t1 = self.t1.to_stack(); - let t2 = self.t2.to_stack(); - - let mut combined: Vec = Vec::new(); - combined.extend_from_slice(t0); - combined.extend_from_slice(t1); - combined.extend_from_slice(t2); - Box::leak(combined.into_boxed_slice()) + fn to_stack(&self) -> Vec { + let mut stack = self.t0.to_stack(); + stack.extend(self.t1.to_stack()); + stack.extend(self.t2.to_stack()); + stack } fn from_stack(stack: &[U256]) -> Self { @@ -1322,14 +1306,10 @@ where { const SIZE: usize = 2 * Fp6::::SIZE; - fn to_stack(&self) -> &[U256] { - let z0 = self.z0.to_stack(); - let z1 = self.z1.to_stack(); - - let mut combined: Vec = Vec::new(); - combined.extend_from_slice(z0); - combined.extend_from_slice(z1); - Box::leak(combined.into_boxed_slice()) + fn to_stack(&self) -> Vec { + let mut stack = self.z0.to_stack(); + stack.extend(self.z1.to_stack()); + stack } fn from_stack(stack: &[U256]) -> Self {