mirror of https://github.com/zcash/orchard.git
Add serde support for OrchardIncrementalTreeDigest
This commit is contained in:
parent
7e79fd4b1c
commit
e3abbf9a42
|
@ -32,6 +32,7 @@ pasta_curves = "0.1"
|
|||
proptest = { version = "1.0.0", optional = true }
|
||||
rand = "0.8"
|
||||
nonempty = "0.6"
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
subtle = "2.3"
|
||||
zcash_note_encryption = "0.0"
|
||||
incrementalmerkletree = { git = "https://github.com/nuttycom/incrementalmerkletree.git", branch = "merkle_bridge" }
|
||||
|
|
22
src/tree.rs
22
src/tree.rs
|
@ -10,6 +10,9 @@ use crate::{
|
|||
use incrementalmerkletree::{Hashable, Level};
|
||||
use pasta_curves::{arithmetic::FieldExt, pallas};
|
||||
|
||||
use serde::{Serialize, Deserialize};
|
||||
use serde::ser::Serializer;
|
||||
use serde::de::Deserializer;
|
||||
use ff::{Field, PrimeField, PrimeFieldBits};
|
||||
use rand::RngCore;
|
||||
use std::iter;
|
||||
|
@ -152,6 +155,12 @@ impl OrchardIncrementalTreeDigest {
|
|||
pub fn to_bytes(&self) -> Option<[u8; 32]> {
|
||||
<Option<pallas::Base>>::from(self.0).map(|b| b.to_bytes())
|
||||
}
|
||||
|
||||
/// Parses a incremental tree leaf digest from the bytes of
|
||||
/// a note commitment.
|
||||
pub fn from_bytes(bytes: &[u8; 32]) -> Self {
|
||||
OrchardIncrementalTreeDigest(pallas::Base::from_bytes(bytes))
|
||||
}
|
||||
}
|
||||
|
||||
/// This instance is should only be used for hashtable key comparisons.
|
||||
|
@ -188,6 +197,19 @@ impl Hashable for OrchardIncrementalTreeDigest {
|
|||
}
|
||||
}
|
||||
|
||||
impl Serialize for OrchardIncrementalTreeDigest {
|
||||
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
|
||||
self.to_bytes().serialize(serializer)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'de> Deserialize<'de> for OrchardIncrementalTreeDigest {
|
||||
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
|
||||
let parsed = <[u8; 32]>::deserialize(deserializer)?;
|
||||
Ok(Self::from_bytes(&parsed))
|
||||
}
|
||||
}
|
||||
|
||||
/// Generators for property testing.
|
||||
#[cfg(any(test, feature = "test-dependencies"))]
|
||||
pub mod testing {
|
||||
|
|
Loading…
Reference in New Issue