diff --git a/src/ring.rs b/src/ring.rs index 9cc80ef..a475602 100644 --- a/src/ring.rs +++ b/src/ring.rs @@ -201,6 +201,64 @@ where } } +impl CanonicalSerialize for RingContext +where + BaseField: ark_ff::PrimeField, + CurveConfig: SWCurveConfig + Clone, + AffinePoint: IntoSW>, +{ + fn serialize_with_mode( + &self, + mut writer: W, + compress: ark_serialize::Compress, + ) -> Result<(), ark_serialize::SerializationError> { + self.domain_size.serialize_compressed(&mut writer)?; + self.pcs_params.serialize_with_mode(&mut writer, compress)?; + Ok(()) + } + + fn serialized_size(&self, compress: ark_serialize::Compress) -> usize { + self.domain_size.compressed_size() + self.pcs_params.serialized_size(compress) + } +} + +impl CanonicalDeserialize for RingContext +where + BaseField: ark_ff::PrimeField, + CurveConfig: SWCurveConfig + Clone, + AffinePoint: IntoSW>, +{ + fn deserialize_with_mode( + mut reader: R, + compress: ark_serialize::Compress, + validate: ark_serialize::Validate, + ) -> Result { + let domain_size = ::deserialize_compressed(&mut reader)?; + let piop_params = make_piop_params::(domain_size); + let pcs_params = as CanonicalDeserialize>::deserialize_with_mode( + &mut reader, + compress, + validate, + )?; + Ok(RingContext { + piop_params, + pcs_params, + domain_size, + }) + } +} + +impl ark_serialize::Valid for RingContext +where + BaseField: ark_ff::PrimeField, + CurveConfig: SWCurveConfig + Clone, + AffinePoint: IntoSW>, +{ + fn check(&self) -> Result<(), ark_serialize::SerializationError> { + self.pcs_params.check() + } +} + pub trait IntoSW { fn into_sw(self) -> ark_ec::short_weierstrass::Affine; } @@ -232,3 +290,20 @@ where S::COMPLEMENT_POINT.into_sw(), ) } + +pub fn make_ring_verifier( + verifier_key: VerifierKey, + domain_size: usize, +) -> RingVerifier +where + BaseField: ark_ff::PrimeField, + CurveConfig: SWCurveConfig, + AffinePoint: IntoSW>, +{ + let piop_params = make_piop_params::(domain_size); + RingVerifier::::init( + verifier_key, + piop_params, + merlin::Transcript::new(b"ring-vrf"), + ) +}