diff --git a/zebra-chain/src/lib.rs b/zebra-chain/src/lib.rs index a68a1127..87eec1b4 100644 --- a/zebra-chain/src/lib.rs +++ b/zebra-chain/src/lib.rs @@ -7,6 +7,7 @@ mod sha256d_writer; pub mod block; pub mod equihash_solution; pub mod note_commitment_tree; +pub mod note_encryption; pub mod proofs; pub mod serialization; pub mod transaction; diff --git a/zebra-chain/src/note_encryption.rs b/zebra-chain/src/note_encryption.rs new file mode 100644 index 00000000..66d4cc93 --- /dev/null +++ b/zebra-chain/src/note_encryption.rs @@ -0,0 +1,47 @@ +//! Note encryption types. + +use std::fmt; + +/// A 512-byte _Memo_ field associated with a note, as described in +/// [protocol specification ยง5.5][ps]. +/// +/// The usage of the memo field is by agreement between the sender and +/// recipient of the note. +/// +/// [ps]: https://zips.z.cash/protocol/protocol.pdf#spendencoding +#[derive(Clone, Copy)] +pub struct Memo([u8; 512]); + +impl Memo {} + +impl fmt::Debug for Memo { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let output: String; + + match String::from_utf8(self.0.to_vec()) { + Ok(memo) => output = memo, + _ => output = hex::encode(&self.0[..]), + } + + f.debug_tuple("Memo").field(&output).finish() + } +} + +#[test] +fn memo_fmt() { + let memo = Memo([0u8; 512]); + + println!("{:?}", memo); + + let memo2 = Memo( + *b"thiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis \ + iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis \ + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ + veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeryyyyyyyyyyyyyyyyyyyyyyyyyy \ + looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong \ + meeeeeeeeeeeeeeeeeeemooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo \ + but it's just short enough", + ); + + println!("{:?}", memo2); +} diff --git a/zebra-chain/src/note_encryption/test_vectors.rs b/zebra-chain/src/note_encryption/test_vectors.rs new file mode 100644 index 00000000..e69de29b diff --git a/zebra-chain/src/note_encryption/tests.rs b/zebra-chain/src/note_encryption/tests.rs new file mode 100644 index 00000000..e69de29b