diff --git a/plonky2/src/curve/curve_types.rs b/plonky2/src/curve/curve_types.rs index 0a9e8711..15f80bc6 100644 --- a/plonky2/src/curve/curve_types.rs +++ b/plonky2/src/curve/curve_types.rs @@ -3,6 +3,7 @@ use std::ops::Neg; use plonky2_field::field_types::{Field, PrimeField}; use plonky2_field::ops::Square; +use serde::{Deserialize, Serialize}; // To avoid implementation conflicts from associated types, // see https://github.com/rust-lang/rust/issues/20400 @@ -36,7 +37,7 @@ pub trait Curve: 'static + Sync + Sized + Copy + Debug { } /// A point on a short Weierstrass curve, represented in affine coordinates. -#[derive(Copy, Clone, Debug)] +#[derive(Copy, Clone, Debug, Deserialize, Serialize)] pub struct AffinePoint { pub x: C::BaseField, pub y: C::BaseField, diff --git a/plonky2/src/curve/ecdsa.rs b/plonky2/src/curve/ecdsa.rs index 3a5d3c7a..11e05535 100644 --- a/plonky2/src/curve/ecdsa.rs +++ b/plonky2/src/curve/ecdsa.rs @@ -1,17 +1,19 @@ +use serde::{Deserialize, Serialize}; + use crate::curve::curve_msm::msm_parallel; use crate::curve::curve_types::{base_to_scalar, AffinePoint, Curve, CurveScalar}; use crate::field::field_types::Field; -#[derive(Copy, Clone, Debug)] +#[derive(Copy, Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)] pub struct ECDSASignature { pub r: C::ScalarField, pub s: C::ScalarField, } -#[derive(Copy, Clone, Debug)] +#[derive(Copy, Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)] pub struct ECDSASecretKey(pub C::ScalarField); -#[derive(Copy, Clone, Debug)] +#[derive(Copy, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] pub struct ECDSAPublicKey(pub AffinePoint); pub fn sign_message(msg: C::ScalarField, sk: ECDSASecretKey) -> ECDSASignature { diff --git a/plonky2/src/curve/secp256k1.rs b/plonky2/src/curve/secp256k1.rs index 6a460735..18040dae 100644 --- a/plonky2/src/curve/secp256k1.rs +++ b/plonky2/src/curve/secp256k1.rs @@ -1,10 +1,11 @@ use plonky2_field::field_types::Field; use plonky2_field::secp256k1_base::Secp256K1Base; use plonky2_field::secp256k1_scalar::Secp256K1Scalar; +use serde::{Deserialize, Serialize}; use crate::curve::curve_types::{AffinePoint, Curve}; -#[derive(Debug, Copy, Clone)] +#[derive(Debug, Copy, Clone, Deserialize, Eq, Hash, PartialEq, Serialize)] pub struct Secp256K1; impl Curve for Secp256K1 {