diff --git a/CHANGELOG.md b/CHANGELOG.md index 445a7a3e4..66a65dde3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to Rust's notion of ## [Unreleased] +### Added +- `impl subtle::ConstantTimeEq for note::Nullifier` +- `impl Clone for note_encryption::CompactAction` +- `note_encryption::CompactAction::cmx` + ## [0.7.0] - 2024-01-26 ### Licensing - The license for this crate is now "MIT OR Apache-2.0". The license diff --git a/src/note/nullifier.rs b/src/note/nullifier.rs index a18e77fef..bde133995 100644 --- a/src/note/nullifier.rs +++ b/src/note/nullifier.rs @@ -3,7 +3,7 @@ use halo2_proofs::arithmetic::CurveExt; use memuse::DynamicUsage; use pasta_curves::pallas; use rand::RngCore; -use subtle::CtOption; +use subtle::{ConstantTimeEq, CtOption}; use super::NoteCommitment; use crate::{ @@ -62,6 +62,12 @@ impl Nullifier { } } +impl ConstantTimeEq for Nullifier { + fn ct_eq(&self, other: &Self) -> subtle::Choice { + self.0.ct_eq(&other.0) + } +} + /// Generators for property testing. #[cfg(any(test, feature = "test-dependencies"))] #[cfg_attr(docsrs, doc(cfg(feature = "test-dependencies")))] diff --git a/src/note_encryption.rs b/src/note_encryption.rs index dc0766f04..27da4724a 100644 --- a/src/note_encryption.rs +++ b/src/note_encryption.rs @@ -269,6 +269,7 @@ impl ShieldedOutput for Action { } /// A compact Action for light clients. +#[derive(Clone)] pub struct CompactAction { nullifier: Nullifier, cmx: ExtractedNoteCommitment, @@ -325,10 +326,15 @@ impl CompactAction { } } - ///Returns the nullifier of the note being spent. + /// Returns the nullifier of the note being spent. pub fn nullifier(&self) -> Nullifier { self.nullifier } + + /// Returns the commitment to the new note being created. + pub fn cmx(&self) -> ExtractedNoteCommitment { + self.cmx + } } #[cfg(test)]