Add Serialize, Deserialize to PublicKey.
This commit is contained in:
parent
e58376fc47
commit
2ca445ad23
|
@ -36,6 +36,10 @@ impl<T: SigType> From<PublicKeyBytes<T>> for [u8; 32] {
|
||||||
/// public key may not be used immediately, it is probably better to use
|
/// public key may not be used immediately, it is probably better to use
|
||||||
/// [`PublicKeyBytes`], which is a refinement type for `[u8; 32]`.
|
/// [`PublicKeyBytes`], which is a refinement type for `[u8; 32]`.
|
||||||
#[derive(Copy, Clone, Debug)]
|
#[derive(Copy, Clone, Debug)]
|
||||||
|
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||||
|
#[cfg_attr(feature = "serde", serde(try_from = "PublicKeyBytes<T>"))]
|
||||||
|
#[cfg_attr(feature = "serde", serde(into = "PublicKeyBytes<T>"))]
|
||||||
|
#[cfg_attr(feature = "serde", serde(bound = "T: SigType"))]
|
||||||
pub struct PublicKey<T: SigType> {
|
pub struct PublicKey<T: SigType> {
|
||||||
// XXX-jubjub: this should just be Point
|
// XXX-jubjub: this should just be Point
|
||||||
pub(crate) point: jubjub::ExtendedPoint,
|
pub(crate) point: jubjub::ExtendedPoint,
|
||||||
|
|
|
@ -25,6 +25,31 @@ proptest! {
|
||||||
assert_eq!(&bytes[..], &bytes_from[..]);
|
assert_eq!(&bytes[..], &bytes_from[..]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn publickey_serialization(
|
||||||
|
bytes in prop::array::uniform32(any::<u8>()),
|
||||||
|
) {
|
||||||
|
let pk_result_try_from = PublicKey::<SpendAuth>::try_from(bytes);
|
||||||
|
let pk_result_bincode: Result<PublicKey::<SpendAuth>, _>
|
||||||
|
= bincode::deserialize(&bytes[..]);
|
||||||
|
|
||||||
|
// Check 1: both decoding methods should have the same result
|
||||||
|
match (pk_result_try_from, pk_result_bincode) {
|
||||||
|
// Both agree on success
|
||||||
|
(Ok(pk_try_from), Ok(pk_bincode)) => {
|
||||||
|
// Check 2: bincode encoding should match original bytes
|
||||||
|
let bytes_bincode = bincode::serialize(&pk_try_from).unwrap();
|
||||||
|
assert_eq!(&bytes[..], &bytes_bincode[..]);
|
||||||
|
// Check 3: From encoding should match original bytes
|
||||||
|
let bytes_from: [u8; 32] = pk_bincode.into();
|
||||||
|
assert_eq!(&bytes[..], &bytes_from[..]);
|
||||||
|
},
|
||||||
|
// Both agree on failure
|
||||||
|
(Err(_), Err(_)) => {},
|
||||||
|
_ => panic!("bincode and try_from do not agree"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn signature_serialization(
|
fn signature_serialization(
|
||||||
lo in prop::array::uniform32(any::<u8>()),
|
lo in prop::array::uniform32(any::<u8>()),
|
||||||
|
|
Loading…
Reference in New Issue