Merge pull request #1104 from topos-protocol/serializer

Make serializer work with slices
This commit is contained in:
Nicholas Ward 2023-07-11 10:34:23 -07:00 committed by GitHub
commit 94f880b67b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 21 additions and 29 deletions

View File

@ -297,7 +297,7 @@ where
gate_serializer: &dyn GateSerializer<F, D>,
generator_serializer: &dyn WitnessGeneratorSerializer<F, D>,
) -> IoResult<Self> {
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(

View File

@ -137,7 +137,7 @@ impl<F: RichField + Extendable<D>, C: GenericConfig<D, F = F>, const D: usize>
gate_serializer: &dyn GateSerializer<F, D>,
generator_serializer: &dyn WitnessGeneratorSerializer<F, D>,
) -> IoResult<Self> {
let mut buffer = Buffer::new(bytes.to_vec());
let mut buffer = Buffer::new(bytes);
buffer.read_circuit_data(gate_serializer, generator_serializer)
}
@ -234,7 +234,7 @@ impl<F: RichField + Extendable<D>, C: GenericConfig<D, F = F>, const D: usize>
gate_serializer: &dyn GateSerializer<F, D>,
generator_serializer: &dyn WitnessGeneratorSerializer<F, D>,
) -> 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)
}
@ -272,7 +272,7 @@ impl<F: RichField + Extendable<D>, C: GenericConfig<D, F = F>, const D: usize>
bytes: Vec<u8>,
gate_serializer: &dyn GateSerializer<F, D>,
) -> IoResult<Self> {
let mut buffer = Buffer::new(bytes);
let mut buffer = Buffer::new(&bytes);
buffer.read_verifier_circuit_data(gate_serializer)
}
@ -339,7 +339,7 @@ impl<C: GenericConfig<D>, const D: usize> VerifierOnlyCircuitData<C, D> {
}
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()
}
}
@ -395,7 +395,7 @@ impl<F: RichField + Extendable<D>, const D: usize> CommonCircuitData<F, D> {
bytes: Vec<u8>,
gate_serializer: &dyn GateSerializer<F, D>,
) -> IoResult<Self> {
let mut buffer = Buffer::new(bytes);
let mut buffer = Buffer::new(&bytes);
buffer.read_common_circuit_data(gate_serializer)
}

View File

@ -21,9 +21,7 @@ use crate::iop::target::Target;
use crate::plonk::circuit_data::{CommonCircuitData, VerifierOnlyCircuitData};
use crate::plonk::config::{GenericConfig, Hasher};
use crate::plonk::verifier::verify_with_challenges;
use crate::util::serialization::Write;
#[cfg(feature = "std")]
use crate::util::serialization::{Buffer, Read};
use crate::util::serialization::{Buffer, Read, Write};
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq)]
#[serde(bound = "")]
@ -111,12 +109,11 @@ impl<F: RichField + Extendable<D>, C: GenericConfig<D, F = F>, const D: usize>
buffer
}
#[cfg(feature = "std")]
pub fn from_bytes(
bytes: Vec<u8>,
common_data: &CommonCircuitData<F, D>,
) -> anyhow::Result<Self> {
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)?;
@ -241,12 +238,11 @@ impl<F: RichField + Extendable<D>, C: GenericConfig<D, F = F>, const D: usize>
buffer
}
#[cfg(feature = "std")]
pub fn from_bytes(
bytes: Vec<u8>,
common_data: &CommonCircuitData<F, D>,
) -> anyhow::Result<Self> {
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)?;

View File

@ -49,7 +49,7 @@ impl VerifierCircuitTarget {
}
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 circuit_digest = buffer.read_target_hash()?;
Ok(Self {

View File

@ -2124,18 +2124,16 @@ impl Write for Vec<u8> {
}
/// Buffer
#[cfg(feature = "std")]
#[derive(Debug)]
pub struct Buffer {
bytes: Vec<u8>,
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<u8>) -> Self {
pub fn new(bytes: &'a [u8]) -> Self {
Self { bytes, pos: 0 }
}
@ -2147,26 +2145,24 @@ impl Buffer {
/// Returns the inner buffer.
#[inline]
pub fn bytes(&self) -> Vec<u8> {
self.bytes.clone()
pub fn bytes(&self) -> &'a [u8] {
self.bytes
}
/// Returns the inner unread buffer.
#[inline]
pub fn unread_bytes(&self) -> Vec<u8> {
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();