From 57533f7d8c199d6424e4586a17ce5daac6a35103 Mon Sep 17 00:00:00 2001 From: Chance Date: Fri, 20 Dec 2024 14:19:32 -0600 Subject: [PATCH] Serialization (#75) * chore: make structures serializable * chore: more serialization --- src/commitments.rs | 3 ++- src/dense_mlpoly.rs | 3 ++- src/lib.rs | 5 ++++- src/nizk/mod.rs | 1 + src/r1csinstance.rs | 2 ++ src/r1csproof.rs | 2 ++ src/sparse_mlpoly.rs | 3 +++ 7 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/commitments.rs b/src/commitments.rs index 4fad4155..44e7784d 100644 --- a/src/commitments.rs +++ b/src/commitments.rs @@ -1,9 +1,10 @@ use super::group::{GroupElement, VartimeMultiscalarMul, GROUP_BASEPOINT_COMPRESSED}; use super::scalar::Scalar; use digest::{ExtendableOutput, Input, XofReader}; +use serde::{Deserialize, Serialize}; use sha3::Shake256; -#[derive(Debug)] +#[derive(Debug, Serialize, Deserialize)] pub struct MultiCommitGens { pub n: usize, pub G: Vec, diff --git a/src/dense_mlpoly.rs b/src/dense_mlpoly.rs index 4400b42f..f0aabbba 100644 --- a/src/dense_mlpoly.rs +++ b/src/dense_mlpoly.rs @@ -14,13 +14,14 @@ use serde::{Deserialize, Serialize}; #[cfg(feature = "multicore")] use rayon::prelude::*; -#[derive(Debug)] +#[derive(Debug, Serialize, Deserialize)] pub struct DensePolynomial { num_vars: usize, // the number of variables in the multilinear polynomial len: usize, Z: Vec, // evaluations of the polynomial in all the 2^num_vars Boolean inputs } +#[derive(Serialize, Deserialize)] pub struct PolyCommitmentGens { pub gens: DotProductProofGens, } diff --git a/src/lib.rs b/src/lib.rs index ab051d95..7341fc8a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -45,17 +45,19 @@ use timer::Timer; use transcript::{AppendToTranscript, ProofTranscript}; /// `ComputationCommitment` holds a public preprocessed NP statement (e.g., R1CS) +#[derive(Serialize, Deserialize)] pub struct ComputationCommitment { comm: R1CSCommitment, } /// `ComputationDecommitment` holds information to decommit `ComputationCommitment` +#[derive(Serialize, Deserialize)] pub struct ComputationDecommitment { decomm: R1CSDecommitment, } /// `Assignment` holds an assignment of values to either the inputs or variables in an `Instance` -#[derive(Clone)] +#[derive(Clone, Serialize, Deserialize)] pub struct Assignment { assignment: Vec, } @@ -276,6 +278,7 @@ impl Instance { } /// `SNARKGens` holds public parameters for producing and verifying proofs with the Spartan SNARK +#[derive(Serialize, Deserialize)] pub struct SNARKGens { gens_r1cs_sat: R1CSGens, gens_r1cs_eval: R1CSCommitmentGens, diff --git a/src/nizk/mod.rs b/src/nizk/mod.rs index ba7da5a7..78661b15 100644 --- a/src/nizk/mod.rs +++ b/src/nizk/mod.rs @@ -404,6 +404,7 @@ impl DotProductProof { } } +#[derive(Serialize, Deserialize)] pub struct DotProductProofGens { n: usize, pub gens_n: MultiCommitGens, diff --git a/src/r1csinstance.rs b/src/r1csinstance.rs index 80499c4e..58706d93 100644 --- a/src/r1csinstance.rs +++ b/src/r1csinstance.rs @@ -25,6 +25,7 @@ pub struct R1CSInstance { C: SparseMatPolynomial, } +#[derive(Serialize, Deserialize)] pub struct R1CSCommitmentGens { gens: SparseMatPolyCommitmentGens, } @@ -63,6 +64,7 @@ impl AppendToTranscript for R1CSCommitment { } } +#[derive(Serialize, Deserialize)] pub struct R1CSDecommitment { dense: MultiSparseMatPolynomialAsDense, } diff --git a/src/r1csproof.rs b/src/r1csproof.rs index 209dcafc..1b3fe2e4 100644 --- a/src/r1csproof.rs +++ b/src/r1csproof.rs @@ -36,6 +36,7 @@ pub struct R1CSProof { proof_eq_sc_phase2: EqualityProof, } +#[derive(Serialize, Deserialize)] pub struct R1CSSumcheckGens { gens_1: MultiCommitGens, gens_3: MultiCommitGens, @@ -57,6 +58,7 @@ impl R1CSSumcheckGens { } } +#[derive(Serialize, Deserialize)] pub struct R1CSGens { gens_sc: R1CSSumcheckGens, gens_pc: PolyCommitmentGens, diff --git a/src/sparse_mlpoly.rs b/src/sparse_mlpoly.rs index 83a51f5b..d7bdc9cb 100644 --- a/src/sparse_mlpoly.rs +++ b/src/sparse_mlpoly.rs @@ -209,6 +209,7 @@ impl AppendToTranscript for DerefsCommitment { } } +#[derive(Serialize, Deserialize)] struct AddrTimestamps { ops_addr_usize: Vec>, ops_addr: Vec, @@ -270,6 +271,7 @@ impl AddrTimestamps { } } +#[derive(Serialize, Deserialize)] pub struct MultiSparseMatPolynomialAsDense { batch_size: usize, val: Vec, @@ -279,6 +281,7 @@ pub struct MultiSparseMatPolynomialAsDense { comb_mem: DensePolynomial, } +#[derive(Serialize, Deserialize)] pub struct SparseMatPolyCommitmentGens { gens_ops: PolyCommitmentGens, gens_mem: PolyCommitmentGens,