mirror of
https://github.com/saymrwulf/pasta_curves-source.git
synced 2026-09-04 20:03:39 +00:00
Implement serde for Ep, Eq
This commit is contained in:
parent
f8ba48de4e
commit
5e7d16b811
1 changed files with 124 additions and 1 deletions
|
|
@ -5,8 +5,9 @@ use serde_crate::{
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
curves::{EpAffine, EqAffine},
|
curves::{Ep, EpAffine, Eq, EqAffine},
|
||||||
fields::{Fp, Fq},
|
fields::{Fp, Fq},
|
||||||
|
group::Curve,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Serializes bytes to human readable or compact representation.
|
/// Serializes bytes to human readable or compact representation.
|
||||||
|
|
@ -105,6 +106,30 @@ impl<'de> Deserialize<'de> for EqAffine {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Serialize for Ep {
|
||||||
|
fn serialize<S: Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
|
||||||
|
EpAffine::serialize(&self.to_affine(), s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'de> Deserialize<'de> for Ep {
|
||||||
|
fn deserialize<D: Deserializer<'de>>(d: D) -> Result<Self, D::Error> {
|
||||||
|
Ok(Self::from(EpAffine::deserialize(d)?))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Serialize for Eq {
|
||||||
|
fn serialize<S: Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
|
||||||
|
EqAffine::serialize(&self.to_affine(), s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'de> Deserialize<'de> for Eq {
|
||||||
|
fn deserialize<D: Deserializer<'de>>(d: D) -> Result<Self, D::Error> {
|
||||||
|
Ok(Self::from(EqAffine::deserialize(d)?))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
@ -321,4 +346,102 @@ mod tests {
|
||||||
f
|
f
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn serde_ep() {
|
||||||
|
let mut rng = XorShiftRng::from_seed([
|
||||||
|
0x59, 0x62, 0xbe, 0x5d, 0x76, 0x3d, 0x31, 0x8d, 0x17, 0xdb, 0x37, 0x32, 0x54, 0x06,
|
||||||
|
0xbc, 0xe5,
|
||||||
|
]);
|
||||||
|
|
||||||
|
for _ in 0..100 {
|
||||||
|
let f = Ep::random(&mut rng);
|
||||||
|
test_roundtrip(&f);
|
||||||
|
}
|
||||||
|
|
||||||
|
let f = Ep::identity();
|
||||||
|
test_roundtrip(&f);
|
||||||
|
assert_eq!(
|
||||||
|
serde_json::from_slice::<Ep>(
|
||||||
|
br#""0000000000000000000000000000000000000000000000000000000000000000""#
|
||||||
|
)
|
||||||
|
.unwrap(),
|
||||||
|
f
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
bincode::deserialize::<Ep>(&[
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0
|
||||||
|
])
|
||||||
|
.unwrap(),
|
||||||
|
f
|
||||||
|
);
|
||||||
|
|
||||||
|
let f = Ep::generator();
|
||||||
|
test_roundtrip(&f);
|
||||||
|
assert_eq!(
|
||||||
|
serde_json::from_slice::<Ep>(
|
||||||
|
br#""00000000ed302d991bf94c09fc98462200000000000000000000000000000040""#
|
||||||
|
)
|
||||||
|
.unwrap(),
|
||||||
|
f
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
bincode::deserialize::<Ep>(&[
|
||||||
|
0, 0, 0, 0, 237, 48, 45, 153, 27, 249, 76, 9, 252, 152, 70, 34, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 64
|
||||||
|
])
|
||||||
|
.unwrap(),
|
||||||
|
f
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn serde_eq() {
|
||||||
|
let mut rng = XorShiftRng::from_seed([
|
||||||
|
0x59, 0x62, 0xbe, 0x5d, 0x76, 0x3d, 0x31, 0x8d, 0x17, 0xdb, 0x37, 0x32, 0x54, 0x06,
|
||||||
|
0xbc, 0xe5,
|
||||||
|
]);
|
||||||
|
|
||||||
|
for _ in 0..100 {
|
||||||
|
let f = Eq::random(&mut rng);
|
||||||
|
test_roundtrip(&f);
|
||||||
|
}
|
||||||
|
|
||||||
|
let f = Eq::identity();
|
||||||
|
test_roundtrip(&f);
|
||||||
|
assert_eq!(
|
||||||
|
serde_json::from_slice::<Eq>(
|
||||||
|
br#""0000000000000000000000000000000000000000000000000000000000000000""#
|
||||||
|
)
|
||||||
|
.unwrap(),
|
||||||
|
f
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
bincode::deserialize::<Eq>(&[
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0
|
||||||
|
])
|
||||||
|
.unwrap(),
|
||||||
|
f
|
||||||
|
);
|
||||||
|
|
||||||
|
let f = Eq::generator();
|
||||||
|
test_roundtrip(&f);
|
||||||
|
assert_eq!(
|
||||||
|
serde_json::from_slice::<Eq>(
|
||||||
|
br#""0000000021eb468cdda89409fc98462200000000000000000000000000000040""#
|
||||||
|
)
|
||||||
|
.unwrap(),
|
||||||
|
f
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
bincode::deserialize::<Eq>(&[
|
||||||
|
0, 0, 0, 0, 33, 235, 70, 140, 221, 168, 148, 9, 252, 152, 70, 34, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 64
|
||||||
|
])
|
||||||
|
.unwrap(),
|
||||||
|
f
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue