diff --git a/coins/monero/src/block.rs b/coins/monero/src/block.rs index ac433801..c1ba1d33 100644 --- a/coins/monero/src/block.rs +++ b/coins/monero/src/block.rs @@ -3,7 +3,7 @@ use crate::{ transaction::Transaction }; -#[derive(Clone, Debug)] +#[derive(Clone, PartialEq, Debug)] pub struct BlockHeader { pub major_version: u64, pub minor_version: u64, @@ -34,7 +34,7 @@ impl BlockHeader { } } -#[derive(Clone, Debug)] +#[derive(Clone, PartialEq, Debug)] pub struct Block { pub header: BlockHeader, pub miner_tx: Transaction, diff --git a/coins/monero/src/ringct/bulletproofs.rs b/coins/monero/src/ringct/bulletproofs.rs index 300f91fc..7d63758a 100644 --- a/coins/monero/src/ringct/bulletproofs.rs +++ b/coins/monero/src/ringct/bulletproofs.rs @@ -6,7 +6,7 @@ use curve25519_dalek::{scalar::Scalar, edwards::EdwardsPoint}; use crate::{Commitment, wallet::TransactionError, serialize::*}; -#[derive(Clone, Debug)] +#[derive(Clone, PartialEq, Debug)] pub struct Bulletproofs { pub A: EdwardsPoint, pub S: EdwardsPoint, diff --git a/coins/monero/src/ringct/clsag/mod.rs b/coins/monero/src/ringct/clsag/mod.rs index 427133da..31d4d3dd 100644 --- a/coins/monero/src/ringct/clsag/mod.rs +++ b/coins/monero/src/ringct/clsag/mod.rs @@ -43,7 +43,7 @@ pub enum ClsagError { InvalidC1 } -#[derive(Clone, Debug)] +#[derive(Clone, PartialEq, Debug)] pub struct ClsagInput { // The actual commitment for the true spend pub commitment: Commitment, @@ -182,7 +182,7 @@ fn core( ((D, c * mu_P, c * mu_C), c1.unwrap_or(c)) } -#[derive(Clone, Debug)] +#[derive(Clone, PartialEq, Debug)] pub struct Clsag { pub D: EdwardsPoint, pub s: Vec, diff --git a/coins/monero/src/ringct/clsag/multisig.rs b/coins/monero/src/ringct/clsag/multisig.rs index 204d45a2..f4b01779 100644 --- a/coins/monero/src/ringct/clsag/multisig.rs +++ b/coins/monero/src/ringct/clsag/multisig.rs @@ -47,10 +47,7 @@ impl ClsagInput { } } -// pub to enable testing -// While we could move the CLSAG test inside this crate, that'd require duplicating the FROST test -// helper, and isn't worth doing right now when this is harmless enough (semver? TODO) -#[derive(Clone, Debug)] +#[derive(Clone, PartialEq, Debug)] pub struct ClsagDetails { input: ClsagInput, mask: Scalar @@ -63,7 +60,7 @@ impl ClsagDetails { } #[allow(non_snake_case)] -#[derive(Clone, Debug)] +#[derive(Clone, PartialEq, Debug)] struct Interim { p: Scalar, c: Scalar, @@ -73,7 +70,7 @@ struct Interim { } #[allow(non_snake_case)] -#[derive(Clone, Debug)] +#[derive(Clone, PartialEq, Debug)] pub struct ClsagMultisig { transcript: Transcript, diff --git a/coins/monero/src/ringct/mod.rs b/coins/monero/src/ringct/mod.rs index e013e415..91b565b6 100644 --- a/coins/monero/src/ringct/mod.rs +++ b/coins/monero/src/ringct/mod.rs @@ -8,7 +8,7 @@ use crate::{ ringct::{clsag::Clsag, bulletproofs::Bulletproofs} }; -#[derive(Clone, Debug)] +#[derive(Clone, PartialEq, Debug)] pub struct RctBase { pub fee: u64, pub ecdh_info: Vec<[u8; 8]>, @@ -51,7 +51,7 @@ impl RctBase { } } -#[derive(Clone, Debug)] +#[derive(Clone, PartialEq, Debug)] pub enum RctPrunable { Null, Clsag { @@ -107,7 +107,7 @@ impl RctPrunable { } } -#[derive(Clone, Debug)] +#[derive(Clone, PartialEq, Debug)] pub struct RctSignatures { pub base: RctBase, pub prunable: RctPrunable diff --git a/coins/monero/src/transaction.rs b/coins/monero/src/transaction.rs index 5c90ae34..da18773d 100644 --- a/coins/monero/src/transaction.rs +++ b/coins/monero/src/transaction.rs @@ -2,7 +2,7 @@ use curve25519_dalek::edwards::EdwardsPoint; use crate::{hash, serialize::*, ringct::{RctPrunable, RctSignatures}}; -#[derive(Clone, Debug)] +#[derive(Clone, PartialEq, Debug)] pub enum Input { Gen(u64), @@ -48,7 +48,7 @@ impl Input { } // Doesn't bother moving to an enum for the unused Script classes -#[derive(Clone, Debug)] +#[derive(Clone, PartialEq, Debug)] pub struct Output { pub amount: u64, pub key: EdwardsPoint, @@ -84,7 +84,7 @@ impl Output { } } -#[derive(Clone, Debug)] +#[derive(Clone, PartialEq, Debug)] pub struct TransactionPrefix { pub version: u64, pub unlock_time: u64, @@ -120,7 +120,7 @@ impl TransactionPrefix { } } -#[derive(Clone, Debug)] +#[derive(Clone, PartialEq, Debug)] pub struct Transaction { pub prefix: TransactionPrefix, pub rct_signatures: RctSignatures diff --git a/coins/monero/src/wallet/decoys.rs b/coins/monero/src/wallet/decoys.rs index 696f2c35..8ae7b11d 100644 --- a/coins/monero/src/wallet/decoys.rs +++ b/coins/monero/src/wallet/decoys.rs @@ -88,7 +88,7 @@ fn offset(decoys: &[u64]) -> Vec { res } -#[derive(Clone, Debug)] +#[derive(Clone, PartialEq, Debug)] pub struct Decoys { pub i: u8, pub offsets: Vec, diff --git a/coins/monero/src/wallet/scan.rs b/coins/monero/src/wallet/scan.rs index a4e36748..625dc34b 100644 --- a/coins/monero/src/wallet/scan.rs +++ b/coins/monero/src/wallet/scan.rs @@ -15,7 +15,7 @@ use crate::{ wallet::{uniqueness, shared_key, amount_decryption, commitment_mask} }; -#[derive(Clone, Debug)] +#[derive(Clone, PartialEq, Debug)] pub struct SpendableOutput { pub tx: [u8; 32], pub o: usize, diff --git a/coins/monero/src/wallet/send/mod.rs b/coins/monero/src/wallet/send/mod.rs index 9d3a31c3..cb1bebb5 100644 --- a/coins/monero/src/wallet/send/mod.rs +++ b/coins/monero/src/wallet/send/mod.rs @@ -38,7 +38,7 @@ use crate::frost::MultisigError; mod multisig; #[allow(non_snake_case)] -#[derive(Clone, Debug)] +#[derive(Clone, PartialEq, Debug)] struct SendOutput { R: EdwardsPoint, dest: EdwardsPoint, @@ -149,7 +149,7 @@ async fn prepare_inputs( Ok(signable) } -#[derive(Clone, Debug)] +#[derive(Clone, PartialEq, Debug)] pub struct SignableTransaction { inputs: Vec, payments: Vec<(Address, u64)>, diff --git a/crypto/frost/src/algorithm.rs b/crypto/frost/src/algorithm.rs index 59b32378..992687bf 100644 --- a/crypto/frost/src/algorithm.rs +++ b/crypto/frost/src/algorithm.rs @@ -12,7 +12,7 @@ use crate::{Curve, FrostError, MultisigView}; pub trait Algorithm: Clone { type Transcript: Transcript + Clone + Debug; /// The resulting type of the signatures this algorithm will produce - type Signature: Clone + Debug; + type Signature: Clone + PartialEq + Debug; fn transcript(&mut self) -> &mut Self::Transcript; diff --git a/crypto/frost/src/sign.rs b/crypto/frost/src/sign.rs index 08701a50..05c12181 100644 --- a/crypto/frost/src/sign.rs +++ b/crypto/frost/src/sign.rs @@ -255,7 +255,7 @@ impl fmt::Display for State { } pub trait StateMachine { - type Signature; + type Signature: Clone + PartialEq + fmt::Debug; /// Perform the preprocessing round required in order to sign /// Returns a byte vector which must be transmitted to all parties selected for this signing diff --git a/crypto/transcript/src/lib.rs b/crypto/transcript/src/lib.rs index be534aae..483267a2 100644 --- a/crypto/transcript/src/lib.rs +++ b/crypto/transcript/src/lib.rs @@ -17,6 +17,12 @@ pub trait Transcript { #[derive(Clone, Debug)] pub struct DigestTranscript(Vec, PhantomData); +impl PartialEq for DigestTranscript { + fn eq(&self, other: &DigestTranscript) -> bool { + self.0 == other.0 + } +} + impl DigestTranscript { pub fn new(label: Vec) -> Self { DigestTranscript(label, PhantomData) diff --git a/crypto/transcript/src/merlin.rs b/crypto/transcript/src/merlin.rs index cba838fe..88dfa9c3 100644 --- a/crypto/transcript/src/merlin.rs +++ b/crypto/transcript/src/merlin.rs @@ -2,7 +2,7 @@ use core::{marker::PhantomData, fmt::{Debug, Formatter}}; use digest::Digest; -#[derive(Clone)] +#[derive(Clone, PartialEq)] pub struct MerlinTranscript(pub merlin::Transcript); // Merlin doesn't implement Debug so provide a stub which won't panic impl Debug for MerlinTranscript {