From ffa1a42bd6219745c14297eda0082363eb45731e Mon Sep 17 00:00:00 2001 From: parazyd Date: Sat, 16 Apr 2022 19:09:15 +0200 Subject: [PATCH] crypto/merkle: Port to incrementalmerkle 0.3 needed API --- src/crypto/merkle_node.rs | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/crypto/merkle_node.rs b/src/crypto/merkle_node.rs index efbec27b8..0c89e3163 100644 --- a/src/crypto/merkle_node.rs +++ b/src/crypto/merkle_node.rs @@ -12,7 +12,7 @@ use serde::{ ser::Serializer, Deserialize, Serialize, }; -use subtle::CtOption; +use subtle::{Choice, ConditionallySelectable, CtOption}; use crate::{ crypto::{ @@ -40,7 +40,7 @@ lazy_static! { }; } -#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] +#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] pub struct MerkleNode(pub pallas::Base); impl MerkleNode { @@ -76,9 +76,9 @@ impl<'de> Deserialize<'de> for MerkleNode { } } -impl std::hash::Hash for MerkleNode { - fn hash(&self, state: &mut H) { - >::from(self.0).map(|b| b.to_repr()).hash(state) +impl ConditionallySelectable for MerkleNode { + fn conditional_select(a: &Self, b: &Self, choice: Choice) -> Self { + MerkleNode(pallas::Base::conditional_select(&a.0, &b.0, choice)) } } @@ -129,3 +129,16 @@ impl Decodable for MerkleNode { Ok(Self(Decodable::decode(&mut d)?)) } } + +impl Encodable for incrementalmerkletree::Position { + fn encode(&self, mut s: S) -> Result { + u64::from(*self).encode(&mut s) + } +} + +impl Decodable for incrementalmerkletree::Position { + fn decode(mut d: D) -> Result { + let dec: u64 = Decodable::decode(&mut d)?; + Ok(Self::try_from(dec).unwrap()) + } +}