Make serializer work with slices instead of Vec

This commit is contained in:
Robin Salen 2023-06-24 18:25:49 -04:00
parent 3de92d9ed1
commit d960bfe2a3
No known key found for this signature in database
GPG Key ID: FB87BACFB3CB2007
5 changed files with 20 additions and 22 deletions

View File

@ -297,7 +297,7 @@ where
gate_serializer: &dyn GateSerializer<F, D>, gate_serializer: &dyn GateSerializer<F, D>,
generator_serializer: &dyn WitnessGeneratorSerializer<F, D>, generator_serializer: &dyn WitnessGeneratorSerializer<F, D>,
) -> IoResult<Self> { ) -> IoResult<Self> {
let mut buffer = Buffer::new(bytes.to_vec()); let mut buffer = Buffer::new(bytes);
let root = let root =
RootCircuitData::from_buffer(&mut buffer, gate_serializer, generator_serializer)?; RootCircuitData::from_buffer(&mut buffer, gate_serializer, generator_serializer)?;
let aggregation = AggregationCircuitData::from_buffer( let aggregation = AggregationCircuitData::from_buffer(

View File

@ -134,7 +134,7 @@ impl<F: RichField + Extendable<D>, C: GenericConfig<D, F = F>, const D: usize>
gate_serializer: &dyn GateSerializer<F, D>, gate_serializer: &dyn GateSerializer<F, D>,
generator_serializer: &dyn WitnessGeneratorSerializer<F, D>, generator_serializer: &dyn WitnessGeneratorSerializer<F, D>,
) -> IoResult<Self> { ) -> IoResult<Self> {
let mut buffer = Buffer::new(bytes.to_vec()); let mut buffer = Buffer::new(bytes);
buffer.read_circuit_data(gate_serializer, generator_serializer) buffer.read_circuit_data(gate_serializer, generator_serializer)
} }
@ -231,7 +231,7 @@ impl<F: RichField + Extendable<D>, C: GenericConfig<D, F = F>, const D: usize>
gate_serializer: &dyn GateSerializer<F, D>, gate_serializer: &dyn GateSerializer<F, D>,
generator_serializer: &dyn WitnessGeneratorSerializer<F, D>, generator_serializer: &dyn WitnessGeneratorSerializer<F, D>,
) -> IoResult<Self> { ) -> IoResult<Self> {
let mut buffer = Buffer::new(bytes.to_vec()); let mut buffer = Buffer::new(bytes);
buffer.read_prover_circuit_data(gate_serializer, generator_serializer) buffer.read_prover_circuit_data(gate_serializer, generator_serializer)
} }
@ -269,7 +269,7 @@ impl<F: RichField + Extendable<D>, C: GenericConfig<D, F = F>, const D: usize>
bytes: Vec<u8>, bytes: Vec<u8>,
gate_serializer: &dyn GateSerializer<F, D>, gate_serializer: &dyn GateSerializer<F, D>,
) -> IoResult<Self> { ) -> IoResult<Self> {
let mut buffer = Buffer::new(bytes); let mut buffer = Buffer::new(&bytes);
buffer.read_verifier_circuit_data(gate_serializer) buffer.read_verifier_circuit_data(gate_serializer)
} }
@ -332,7 +332,7 @@ impl<C: GenericConfig<D>, const D: usize> VerifierOnlyCircuitData<C, D> {
} }
pub fn from_bytes(bytes: Vec<u8>) -> IoResult<Self> { pub fn from_bytes(bytes: Vec<u8>) -> IoResult<Self> {
let mut buffer = Buffer::new(bytes); let mut buffer = Buffer::new(&bytes);
buffer.read_verifier_only_circuit_data() buffer.read_verifier_only_circuit_data()
} }
} }
@ -379,7 +379,7 @@ impl<F: RichField + Extendable<D>, const D: usize> CommonCircuitData<F, D> {
bytes: Vec<u8>, bytes: Vec<u8>,
gate_serializer: &dyn GateSerializer<F, D>, gate_serializer: &dyn GateSerializer<F, D>,
) -> IoResult<Self> { ) -> IoResult<Self> {
let mut buffer = Buffer::new(bytes); let mut buffer = Buffer::new(&bytes);
buffer.read_common_circuit_data(gate_serializer) buffer.read_common_circuit_data(gate_serializer)
} }

View File

@ -116,7 +116,7 @@ impl<F: RichField + Extendable<D>, C: GenericConfig<D, F = F>, const D: usize>
bytes: Vec<u8>, bytes: Vec<u8>,
common_data: &CommonCircuitData<F, D>, common_data: &CommonCircuitData<F, D>,
) -> anyhow::Result<Self> { ) -> anyhow::Result<Self> {
let mut buffer = Buffer::new(bytes); let mut buffer = Buffer::new(&bytes);
let proof = buffer let proof = buffer
.read_proof_with_public_inputs(common_data) .read_proof_with_public_inputs(common_data)
.map_err(anyhow::Error::msg)?; .map_err(anyhow::Error::msg)?;
@ -246,7 +246,7 @@ impl<F: RichField + Extendable<D>, C: GenericConfig<D, F = F>, const D: usize>
bytes: Vec<u8>, bytes: Vec<u8>,
common_data: &CommonCircuitData<F, D>, common_data: &CommonCircuitData<F, D>,
) -> anyhow::Result<Self> { ) -> anyhow::Result<Self> {
let mut buffer = Buffer::new(bytes); let mut buffer = Buffer::new(&bytes);
let proof = buffer let proof = buffer
.read_compressed_proof_with_public_inputs(common_data) .read_compressed_proof_with_public_inputs(common_data)
.map_err(anyhow::Error::msg)?; .map_err(anyhow::Error::msg)?;

View File

@ -49,7 +49,7 @@ impl VerifierCircuitTarget {
} }
pub fn from_bytes(bytes: Vec<u8>) -> IoResult<Self> { pub fn from_bytes(bytes: Vec<u8>) -> IoResult<Self> {
let mut buffer = Buffer::new(bytes); let mut buffer = Buffer::new(&bytes);
let constants_sigmas_cap = buffer.read_target_merkle_cap()?; let constants_sigmas_cap = buffer.read_target_merkle_cap()?;
let circuit_digest = buffer.read_target_hash()?; let circuit_digest = buffer.read_target_hash()?;
Ok(Self { Ok(Self {

View File

@ -1993,16 +1993,16 @@ impl Write for Vec<u8> {
/// Buffer /// Buffer
#[cfg(feature = "std")] #[cfg(feature = "std")]
#[derive(Debug)] #[derive(Debug)]
pub struct Buffer { pub struct Buffer<'a> {
bytes: Vec<u8>, bytes: &'a [u8],
pos: usize, pos: usize,
} }
#[cfg(feature = "std")] #[cfg(feature = "std")]
impl Buffer { impl<'a> Buffer<'a> {
/// Builds a new [`Buffer`] over `buffer`. /// Builds a new [`Buffer`] over `buffer`.
#[inline] #[inline]
pub fn new(bytes: Vec<u8>) -> Self { pub fn new(bytes: &'a [u8]) -> Self {
Self { bytes, pos: 0 } Self { bytes, pos: 0 }
} }
@ -2014,26 +2014,24 @@ impl Buffer {
/// Returns the inner buffer. /// Returns the inner buffer.
#[inline] #[inline]
pub fn bytes(&self) -> Vec<u8> { pub fn bytes(&self) -> &'a [u8] {
self.bytes.clone() self.bytes
} }
/// Returns the inner unread buffer. /// Returns the inner unread buffer.
#[inline] #[inline]
pub fn unread_bytes(&self) -> Vec<u8> { pub fn unread_bytes(&self) -> &'a [u8] {
self.bytes[self.pos..].to_vec() &self.bytes()[self.pos()..]
} }
} }
#[cfg(feature = "std")] impl<'a> Remaining for Buffer<'a> {
impl Remaining for Buffer {
fn remaining(&self) -> usize { fn remaining(&self) -> usize {
self.bytes.len() - self.pos self.bytes.len() - self.pos()
} }
} }
#[cfg(feature = "std")] impl<'a> Read for Buffer<'a> {
impl Read for Buffer {
#[inline] #[inline]
fn read_exact(&mut self, bytes: &mut [u8]) -> IoResult<()> { fn read_exact(&mut self, bytes: &mut [u8]) -> IoResult<()> {
let n = bytes.len(); let n = bytes.len();