diff --git a/evm/src/fixed_recursive_verifier.rs b/evm/src/fixed_recursive_verifier.rs index 1f9bf820..79848eca 100644 --- a/evm/src/fixed_recursive_verifier.rs +++ b/evm/src/fixed_recursive_verifier.rs @@ -297,7 +297,7 @@ where gate_serializer: &dyn GateSerializer, generator_serializer: &dyn WitnessGeneratorSerializer, ) -> IoResult { - let mut buffer = Buffer::new(bytes.to_vec()); + let mut buffer = Buffer::new(bytes); let root = RootCircuitData::from_buffer(&mut buffer, gate_serializer, generator_serializer)?; let aggregation = AggregationCircuitData::from_buffer( diff --git a/plonky2/src/plonk/circuit_data.rs b/plonky2/src/plonk/circuit_data.rs index 46bfd40c..7d774008 100644 --- a/plonky2/src/plonk/circuit_data.rs +++ b/plonky2/src/plonk/circuit_data.rs @@ -134,7 +134,7 @@ impl, C: GenericConfig, const D: usize> gate_serializer: &dyn GateSerializer, generator_serializer: &dyn WitnessGeneratorSerializer, ) -> IoResult { - let mut buffer = Buffer::new(bytes.to_vec()); + let mut buffer = Buffer::new(bytes); buffer.read_circuit_data(gate_serializer, generator_serializer) } @@ -231,7 +231,7 @@ impl, C: GenericConfig, const D: usize> gate_serializer: &dyn GateSerializer, generator_serializer: &dyn WitnessGeneratorSerializer, ) -> IoResult { - let mut buffer = Buffer::new(bytes.to_vec()); + let mut buffer = Buffer::new(bytes); buffer.read_prover_circuit_data(gate_serializer, generator_serializer) } @@ -269,7 +269,7 @@ impl, C: GenericConfig, const D: usize> bytes: Vec, gate_serializer: &dyn GateSerializer, ) -> IoResult { - let mut buffer = Buffer::new(bytes); + let mut buffer = Buffer::new(&bytes); buffer.read_verifier_circuit_data(gate_serializer) } @@ -332,7 +332,7 @@ impl, const D: usize> VerifierOnlyCircuitData { } pub fn from_bytes(bytes: Vec) -> IoResult { - let mut buffer = Buffer::new(bytes); + let mut buffer = Buffer::new(&bytes); buffer.read_verifier_only_circuit_data() } } @@ -379,7 +379,7 @@ impl, const D: usize> CommonCircuitData { bytes: Vec, gate_serializer: &dyn GateSerializer, ) -> IoResult { - let mut buffer = Buffer::new(bytes); + let mut buffer = Buffer::new(&bytes); buffer.read_common_circuit_data(gate_serializer) } diff --git a/plonky2/src/plonk/proof.rs b/plonky2/src/plonk/proof.rs index f0009150..0d4def14 100644 --- a/plonky2/src/plonk/proof.rs +++ b/plonky2/src/plonk/proof.rs @@ -116,7 +116,7 @@ impl, C: GenericConfig, const D: usize> bytes: Vec, common_data: &CommonCircuitData, ) -> anyhow::Result { - let mut buffer = Buffer::new(bytes); + let mut buffer = Buffer::new(&bytes); let proof = buffer .read_proof_with_public_inputs(common_data) .map_err(anyhow::Error::msg)?; @@ -246,7 +246,7 @@ impl, C: GenericConfig, const D: usize> bytes: Vec, common_data: &CommonCircuitData, ) -> anyhow::Result { - let mut buffer = Buffer::new(bytes); + let mut buffer = Buffer::new(&bytes); let proof = buffer .read_compressed_proof_with_public_inputs(common_data) .map_err(anyhow::Error::msg)?; diff --git a/plonky2/src/recursion/cyclic_recursion.rs b/plonky2/src/recursion/cyclic_recursion.rs index 4c47787f..4d5fc602 100644 --- a/plonky2/src/recursion/cyclic_recursion.rs +++ b/plonky2/src/recursion/cyclic_recursion.rs @@ -49,7 +49,7 @@ impl VerifierCircuitTarget { } pub fn from_bytes(bytes: Vec) -> IoResult { - let mut buffer = Buffer::new(bytes); + let mut buffer = Buffer::new(&bytes); let constants_sigmas_cap = buffer.read_target_merkle_cap()?; let circuit_digest = buffer.read_target_hash()?; Ok(Self { diff --git a/plonky2/src/util/serialization/mod.rs b/plonky2/src/util/serialization/mod.rs index db86879d..b6fb9966 100644 --- a/plonky2/src/util/serialization/mod.rs +++ b/plonky2/src/util/serialization/mod.rs @@ -1993,16 +1993,16 @@ impl Write for Vec { /// Buffer #[cfg(feature = "std")] #[derive(Debug)] -pub struct Buffer { - bytes: Vec, +pub struct Buffer<'a> { + bytes: &'a [u8], pos: usize, } #[cfg(feature = "std")] -impl Buffer { +impl<'a> Buffer<'a> { /// Builds a new [`Buffer`] over `buffer`. #[inline] - pub fn new(bytes: Vec) -> Self { + pub fn new(bytes: &'a [u8]) -> Self { Self { bytes, pos: 0 } } @@ -2014,26 +2014,24 @@ impl Buffer { /// Returns the inner buffer. #[inline] - pub fn bytes(&self) -> Vec { - self.bytes.clone() + pub fn bytes(&self) -> &'a [u8] { + self.bytes } /// Returns the inner unread buffer. #[inline] - pub fn unread_bytes(&self) -> Vec { - self.bytes[self.pos..].to_vec() + pub fn unread_bytes(&self) -> &'a [u8] { + &self.bytes()[self.pos()..] } } -#[cfg(feature = "std")] -impl Remaining for Buffer { +impl<'a> Remaining for Buffer<'a> { fn remaining(&self) -> usize { - self.bytes.len() - self.pos + self.bytes.len() - self.pos() } } -#[cfg(feature = "std")] -impl Read for Buffer { +impl<'a> Read for Buffer<'a> { #[inline] fn read_exact(&mut self, bytes: &mut [u8]) -> IoResult<()> { let n = bytes.len();