diff --git a/Cargo.lock b/Cargo.lock index 507141ef..3b6acbe9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -90,6 +90,15 @@ dependencies = [ "derive_arbitrary", ] +[[package]] +name = "array-init" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23589ecb866b460d3a0f1278834750268c607e8e28a1b982c907219f3178cd72" +dependencies = [ + "nodrop", +] + [[package]] name = "arrayref" version = "0.3.9" @@ -1227,7 +1236,7 @@ checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "masp_note_encryption" -version = "3.0.9" +version = "3.0.10" dependencies = [ "arbitrary", "borsh", @@ -1241,7 +1250,7 @@ dependencies = [ [[package]] name = "masp_primitives" -version = "3.0.9" +version = "3.0.10" dependencies = [ "aes", "arbitrary", @@ -1270,6 +1279,8 @@ dependencies = [ "rand 0.8.5", "rand_core 0.6.4", "rand_xorshift 0.3.0", + "serde", + "serde-hex", "sha2", "subtle", "zcash_encoding", @@ -1277,7 +1288,7 @@ dependencies = [ [[package]] name = "masp_proofs" -version = "3.0.9" +version = "3.0.10" dependencies = [ "blake2b_simd", "byteorder", @@ -1301,6 +1312,12 @@ dependencies = [ "tracing", ] +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" + [[package]] name = "memchr" version = "2.7.5" @@ -1509,6 +1526,12 @@ dependencies = [ "libc", ] +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + [[package]] name = "nonempty" version = "0.7.0" @@ -1649,7 +1672,7 @@ dependencies = [ "cfg-if", "libc", "redox_syscall", - "smallvec", + "smallvec 1.15.1", "windows-link", ] @@ -1761,7 +1784,7 @@ dependencies = [ "log", "nix", "once_cell", - "smallvec", + "smallvec 1.15.1", "spin 0.10.0", "symbolic-demangle", "tempfile", @@ -2161,28 +2184,39 @@ checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "serde" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6c24dee235d0da097043389623fb913daddf92c76e9f5a1db88607a0bcbd1d" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", ] +[[package]] +name = "serde-hex" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca37e3e4d1b39afd7ff11ee4e947efae85adfddf4841787bfa47c470e96dc26d" +dependencies = [ + "array-init", + "serde", + "smallvec 0.6.14", +] + [[package]] name = "serde_core" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "659356f9a0cb1e529b24c01e43ad2bdf520ec4ceaf83047b83ddcc2251f96383" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea936adf78b1f766949a4977b91d2f5595825bd6ec079aa9543ad2685fc4516" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -2229,6 +2263,15 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "smallvec" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0" +dependencies = [ + "maybe-uninit", +] + [[package]] name = "smallvec" version = "1.15.1" diff --git a/Cargo.toml b/Cargo.toml index 8266dce3..70bb7461 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ members = [ [workspace.package] -version = "3.0.9" +version = "3.0.10" [profile.release] lto = true diff --git a/masp_primitives/Cargo.toml b/masp_primitives/Cargo.toml index b6b35488..c7460089 100644 --- a/masp_primitives/Cargo.toml +++ b/masp_primitives/Cargo.toml @@ -73,6 +73,8 @@ blake2s_simd = "1" aes = "0.8" fpe = "0.6" +serde = {version = "1.0.228", features = ["derive"], optional = true} +serde-hex = {version = "0.1.0", optional = true} borsh = {version = "1.2.0", features = ["unstable__schema", "derive"]} arbitrary = {version = "1.3", features = ["derive"], optional = true } @@ -89,6 +91,7 @@ assert_matches = "1.3.0" rand_xorshift = "0.3" [features] +serde = ["dep:serde", "dep:serde-hex"] transparent-inputs = [] test-dependencies = ["proptest"] default = ["transparent-inputs"] diff --git a/masp_primitives/src/sapling.rs b/masp_primitives/src/sapling.rs index c4c4ef90..575931f3 100644 --- a/masp_primitives/src/sapling.rs +++ b/masp_primitives/src/sapling.rs @@ -17,6 +17,10 @@ use group::{Curve, Group, GroupEncoding, cofactor::CofactorGroup}; use incrementalmerkletree::{self, Level}; use lazy_static::lazy_static; use rand_core::{CryptoRng, RngCore}; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; +#[cfg(feature = "serde")] +use serde_hex::{SerHex, Strict}; use std::{ array::TryFromSliceError, cmp::Ordering, @@ -85,9 +89,12 @@ pub fn merkle_hash(depth: usize, lhs: &[u8; 32], rhs: &[u8; 32]) -> [u8; 32] { } /// A node within the Sapling commitment tree. -#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))] #[derive(Clone, Copy, Debug, PartialEq, Eq, BorshSerialize, BorshDeserialize, Default)] +#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] +#[repr(transparent)] pub struct Node { + #[cfg_attr(feature = "serde", serde(with = "SerHex::"))] repr: [u8; 32], }