Auto merge of #5251 - nuttycom:manual_incrementalmerkletree_ser, r=str4d
Use manual serialization for Merkle frontiers rather than bincode.
This commit is contained in:
commit
a496afd9c2
|
@ -10,7 +10,19 @@ checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561"
|
|||
dependencies = [
|
||||
"aes-soft",
|
||||
"aesni",
|
||||
"cipher",
|
||||
"cipher 0.2.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "aes"
|
||||
version = "0.7.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "495ee669413bfbe9e8cace80f4d3d78e6d8c8d99579f97fb93bde351b185f2d4"
|
||||
dependencies = [
|
||||
"cfg-if 1.0.0",
|
||||
"cipher 0.3.0",
|
||||
"cpufeatures",
|
||||
"opaque-debug",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -19,7 +31,7 @@ version = "0.6.4"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072"
|
||||
dependencies = [
|
||||
"cipher",
|
||||
"cipher 0.2.5",
|
||||
"opaque-debug",
|
||||
]
|
||||
|
||||
|
@ -29,7 +41,7 @@ version = "0.10.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce"
|
||||
dependencies = [
|
||||
"cipher",
|
||||
"cipher 0.2.5",
|
||||
"opaque-debug",
|
||||
]
|
||||
|
||||
|
@ -137,15 +149,6 @@ dependencies = [
|
|||
"crunchy",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bincode"
|
||||
version = "1.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bip0039"
|
||||
version = "0.8.0"
|
||||
|
@ -216,7 +219,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0"
|
||||
dependencies = [
|
||||
"block-padding",
|
||||
"cipher",
|
||||
"cipher 0.2.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "block-modes"
|
||||
version = "0.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2cb03d1bed155d89dce0f845b7899b18a9a163e148fd004e1c28421a783e2d8e"
|
||||
dependencies = [
|
||||
"block-padding",
|
||||
"cipher 0.3.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -293,6 +306,15 @@ dependencies = [
|
|||
"generic-array",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cipher"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "constant_time_eq"
|
||||
version = "0.1.5"
|
||||
|
@ -546,7 +568,7 @@ checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
|
|||
[[package]]
|
||||
name = "equihash"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/zcash/librustzcash.git?rev=98dc330cdb1c96e980e62b5bc901edbaa128fea2#98dc330cdb1c96e980e62b5bc901edbaa128fea2"
|
||||
source = "git+https://github.com/zcash/librustzcash.git?rev=19a97f16945c68c33aedcc89f2a4f4d398658b05#19a97f16945c68c33aedcc89f2a4f4d398658b05"
|
||||
dependencies = [
|
||||
"blake2b_simd",
|
||||
"byteorder",
|
||||
|
@ -575,9 +597,23 @@ version = "0.4.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a25080721bbcd2cd4d765b7d607ea350425fa087ce53cd3e31afcacdab850352"
|
||||
dependencies = [
|
||||
"aes",
|
||||
"block-modes",
|
||||
"num-bigint",
|
||||
"aes 0.6.0",
|
||||
"block-modes 0.7.0",
|
||||
"num-bigint 0.3.2",
|
||||
"num-integer",
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fpe"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fcf3e40fc9accc7218e082db8a75aeea244b8f5db73e591774ef93b4276365e6"
|
||||
dependencies = [
|
||||
"block-modes 0.8.1",
|
||||
"cipher 0.3.0",
|
||||
"libm",
|
||||
"num-bigint 0.4.0",
|
||||
"num-integer",
|
||||
"num-traits",
|
||||
]
|
||||
|
@ -789,7 +825,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "incrementalmerkletree"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/zcash/incrementalmerkletree?rev=8b59049f1746827ffa3763efa8af948f680491d0#8b59049f1746827ffa3763efa8af948f680491d0"
|
||||
source = "git+https://github.com/zcash/incrementalmerkletree?rev=b7bd6246122a6e9ace8edb51553fbf5228906cbb#b7bd6246122a6e9ace8edb51553fbf5228906cbb"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
@ -850,12 +886,17 @@ version = "0.2.98"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790"
|
||||
|
||||
[[package]]
|
||||
name = "libm"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a"
|
||||
|
||||
[[package]]
|
||||
name = "librustzcash"
|
||||
version = "0.2.0"
|
||||
dependencies = [
|
||||
"bellman",
|
||||
"bincode",
|
||||
"blake2b_simd",
|
||||
"blake2s_simd",
|
||||
"bls12_381",
|
||||
|
@ -1073,6 +1114,17 @@ dependencies = [
|
|||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-bigint"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4e0d047c1062aa51e256408c560894e5251f08925980e53cf1aa5bd00eec6512"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"num-integer",
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-integer"
|
||||
version = "0.1.44"
|
||||
|
@ -1117,15 +1169,15 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
|
|||
[[package]]
|
||||
name = "orchard"
|
||||
version = "0.0.0"
|
||||
source = "git+https://github.com/zcash/orchard.git?rev=8454f86d423edbf0b53a1d5d32df1c691f8b7188#8454f86d423edbf0b53a1d5d32df1c691f8b7188"
|
||||
source = "git+https://github.com/zcash/orchard.git?rev=d0baa18fc6105df4a7847de2b6dc50c5919b3123#d0baa18fc6105df4a7847de2b6dc50c5919b3123"
|
||||
dependencies = [
|
||||
"aes",
|
||||
"aes 0.6.0",
|
||||
"arrayvec 0.7.1",
|
||||
"bigint",
|
||||
"bitvec",
|
||||
"blake2b_simd",
|
||||
"ff",
|
||||
"fpe",
|
||||
"fpe 0.4.0",
|
||||
"group",
|
||||
"halo2",
|
||||
"incrementalmerkletree",
|
||||
|
@ -1802,7 +1854,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "zcash_address"
|
||||
version = "0.0.0"
|
||||
source = "git+https://github.com/zcash/librustzcash.git?rev=98dc330cdb1c96e980e62b5bc901edbaa128fea2#98dc330cdb1c96e980e62b5bc901edbaa128fea2"
|
||||
source = "git+https://github.com/zcash/librustzcash.git?rev=19a97f16945c68c33aedcc89f2a4f4d398658b05#19a97f16945c68c33aedcc89f2a4f4d398658b05"
|
||||
dependencies = [
|
||||
"bech32",
|
||||
"blake2b_simd",
|
||||
|
@ -1812,7 +1864,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "zcash_history"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/zcash/librustzcash.git?rev=98dc330cdb1c96e980e62b5bc901edbaa128fea2#98dc330cdb1c96e980e62b5bc901edbaa128fea2"
|
||||
source = "git+https://github.com/zcash/librustzcash.git?rev=19a97f16945c68c33aedcc89f2a4f4d398658b05#19a97f16945c68c33aedcc89f2a4f4d398658b05"
|
||||
dependencies = [
|
||||
"bigint",
|
||||
"blake2b_simd",
|
||||
|
@ -1822,7 +1874,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "zcash_note_encryption"
|
||||
version = "0.0.0"
|
||||
source = "git+https://github.com/zcash/librustzcash.git?rev=98dc330cdb1c96e980e62b5bc901edbaa128fea2#98dc330cdb1c96e980e62b5bc901edbaa128fea2"
|
||||
source = "git+https://github.com/zcash/librustzcash.git?rev=19a97f16945c68c33aedcc89f2a4f4d398658b05#19a97f16945c68c33aedcc89f2a4f4d398658b05"
|
||||
dependencies = [
|
||||
"blake2b_simd",
|
||||
"byteorder",
|
||||
|
@ -1836,9 +1888,9 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "zcash_primitives"
|
||||
version = "0.5.0"
|
||||
source = "git+https://github.com/zcash/librustzcash.git?rev=98dc330cdb1c96e980e62b5bc901edbaa128fea2#98dc330cdb1c96e980e62b5bc901edbaa128fea2"
|
||||
source = "git+https://github.com/zcash/librustzcash.git?rev=19a97f16945c68c33aedcc89f2a4f4d398658b05#19a97f16945c68c33aedcc89f2a4f4d398658b05"
|
||||
dependencies = [
|
||||
"aes",
|
||||
"aes 0.7.4",
|
||||
"bip0039",
|
||||
"bitvec",
|
||||
"blake2b_simd",
|
||||
|
@ -1848,9 +1900,10 @@ dependencies = [
|
|||
"crypto_api_chachapoly",
|
||||
"equihash",
|
||||
"ff",
|
||||
"fpe",
|
||||
"fpe 0.5.0",
|
||||
"group",
|
||||
"hex",
|
||||
"incrementalmerkletree",
|
||||
"jubjub",
|
||||
"lazy_static",
|
||||
"log",
|
||||
|
@ -1867,7 +1920,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "zcash_proofs"
|
||||
version = "0.5.0"
|
||||
source = "git+https://github.com/zcash/librustzcash.git?rev=98dc330cdb1c96e980e62b5bc901edbaa128fea2#98dc330cdb1c96e980e62b5bc901edbaa128fea2"
|
||||
source = "git+https://github.com/zcash/librustzcash.git?rev=19a97f16945c68c33aedcc89f2a4f4d398658b05#19a97f16945c68c33aedcc89f2a4f4d398658b05"
|
||||
dependencies = [
|
||||
"bellman",
|
||||
"blake2b_simd",
|
||||
|
|
15
Cargo.toml
15
Cargo.toml
|
@ -21,7 +21,6 @@ crate-type = ["staticlib"]
|
|||
|
||||
[dependencies]
|
||||
bellman = "0.10"
|
||||
bincode = "1.3"
|
||||
blake2b_simd = "0.5"
|
||||
blake2s_simd = "0.5"
|
||||
bls12_381 = "0.5"
|
||||
|
@ -65,11 +64,11 @@ codegen-units = 1
|
|||
[patch.crates-io]
|
||||
ed25519-zebra = { git = "https://github.com/ZcashFoundation/ed25519-zebra.git", rev = "d3512400227a362d08367088ffaa9bd4142a69c7" }
|
||||
halo2 = { git = "https://github.com/zcash/halo2.git", rev = "27c4187673a9c6ade13fbdbd4f20955530c22d7f" }
|
||||
incrementalmerkletree = { git = "https://github.com/zcash/incrementalmerkletree", rev = "8b59049f1746827ffa3763efa8af948f680491d0" }
|
||||
incrementalmerkletree = { git = "https://github.com/zcash/incrementalmerkletree", rev = "b7bd6246122a6e9ace8edb51553fbf5228906cbb" }
|
||||
jubjub = { git = "https://github.com/zkcrypto/jubjub.git", rev = "96ab4162b83303378eae32a326b54d88b75bffc2" }
|
||||
orchard = { git = "https://github.com/zcash/orchard.git", rev = "8454f86d423edbf0b53a1d5d32df1c691f8b7188" }
|
||||
zcash_address = { git = "https://github.com/zcash/librustzcash.git", rev = "98dc330cdb1c96e980e62b5bc901edbaa128fea2" }
|
||||
zcash_history = { git = "https://github.com/zcash/librustzcash.git", rev = "98dc330cdb1c96e980e62b5bc901edbaa128fea2" }
|
||||
zcash_note_encryption = { git = "https://github.com/zcash/librustzcash.git", rev = "98dc330cdb1c96e980e62b5bc901edbaa128fea2" }
|
||||
zcash_primitives = { git = "https://github.com/zcash/librustzcash.git", rev = "98dc330cdb1c96e980e62b5bc901edbaa128fea2" }
|
||||
zcash_proofs = { git = "https://github.com/zcash/librustzcash.git", rev = "98dc330cdb1c96e980e62b5bc901edbaa128fea2" }
|
||||
orchard = { git = "https://github.com/zcash/orchard.git", rev = "d0baa18fc6105df4a7847de2b6dc50c5919b3123" }
|
||||
zcash_address = { git = "https://github.com/zcash/librustzcash.git", rev = "19a97f16945c68c33aedcc89f2a4f4d398658b05" }
|
||||
zcash_history = { git = "https://github.com/zcash/librustzcash.git", rev = "19a97f16945c68c33aedcc89f2a4f4d398658b05" }
|
||||
zcash_note_encryption = { git = "https://github.com/zcash/librustzcash.git", rev = "19a97f16945c68c33aedcc89f2a4f4d398658b05" }
|
||||
zcash_primitives = { git = "https://github.com/zcash/librustzcash.git", rev = "19a97f16945c68c33aedcc89f2a4f4d398658b05" }
|
||||
zcash_proofs = { git = "https://github.com/zcash/librustzcash.git", rev = "19a97f16945c68c33aedcc89f2a4f4d398658b05" }
|
||||
|
|
|
@ -50,7 +50,7 @@ impl FromAddress for UnifiedAddressHelper {
|
|||
}
|
||||
|
||||
impl UnifiedAddressHelper {
|
||||
fn to_cpp(
|
||||
fn into_cpp(
|
||||
self,
|
||||
network: Network,
|
||||
ua_obj: Option<UnifiedAddressObj>,
|
||||
|
@ -145,7 +145,7 @@ pub extern "C" fn zcash_address_parse_unified(
|
|||
}
|
||||
};
|
||||
|
||||
ua.to_cpp(network, ua_obj, sapling_cb, p2sh_cb, p2pkh_cb, unknown_cb)
|
||||
ua.into_cpp(network, ua_obj, sapling_cb, p2sh_cb, p2pkh_cb, unknown_cb)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
|
|
|
@ -88,6 +88,7 @@ pub extern "system" fn librustzcash_mmr_append(
|
|||
)
|
||||
}
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
fn librustzcash_mmr_append_inner<V: Version>(
|
||||
// Consensus branch id
|
||||
cbranch: u32,
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
use bincode;
|
||||
use incrementalmerkletree::{
|
||||
bridgetree::{self, BridgeTree},
|
||||
Altitude, Frontier, Hashable, Tree,
|
||||
|
@ -8,7 +7,10 @@ use std::ptr;
|
|||
|
||||
use orchard::{bundle::Authorized, tree::MerkleCrhOrchardOutput};
|
||||
|
||||
use zcash_primitives::transaction::components::Amount;
|
||||
use zcash_primitives::{
|
||||
merkle_tree::incremental::{read_frontier_v1, read_tree, write_frontier_v1, write_tree},
|
||||
transaction::components::Amount,
|
||||
};
|
||||
|
||||
use crate::orchard_ffi::{error, CppStreamReader, CppStreamWriter, ReadCb, StreamObj, WriteCb};
|
||||
|
||||
|
@ -22,7 +24,7 @@ pub const MAX_CHECKPOINTS: usize = 100;
|
|||
#[no_mangle]
|
||||
pub extern "C" fn orchard_merkle_frontier_empty(
|
||||
) -> *mut bridgetree::Frontier<MerkleCrhOrchardOutput, MERKLE_DEPTH> {
|
||||
let empty_tree = bridgetree::Frontier::<MerkleCrhOrchardOutput, MERKLE_DEPTH>::new();
|
||||
let empty_tree = bridgetree::Frontier::<MerkleCrhOrchardOutput, MERKLE_DEPTH>::empty();
|
||||
Box::into_raw(Box::new(empty_tree))
|
||||
}
|
||||
|
||||
|
@ -51,7 +53,7 @@ pub extern "C" fn orchard_merkle_frontier_parse(
|
|||
) -> *mut bridgetree::Frontier<MerkleCrhOrchardOutput, MERKLE_DEPTH> {
|
||||
let reader = CppStreamReader::from_raw_parts(stream, read_cb.unwrap());
|
||||
|
||||
match bincode::deserialize_from(reader) {
|
||||
match read_frontier_v1(reader) {
|
||||
Ok(parsed) => Box::into_raw(Box::new(parsed)),
|
||||
Err(e) => {
|
||||
error!("Failed to parse Orchard bundle: {}", e);
|
||||
|
@ -62,17 +64,18 @@ pub extern "C" fn orchard_merkle_frontier_parse(
|
|||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn orchard_merkle_frontier_serialize(
|
||||
tree: *const bridgetree::Frontier<MerkleCrhOrchardOutput, MERKLE_DEPTH>,
|
||||
frontier: *const bridgetree::Frontier<MerkleCrhOrchardOutput, MERKLE_DEPTH>,
|
||||
stream: Option<StreamObj>,
|
||||
write_cb: Option<WriteCb>,
|
||||
) -> bool {
|
||||
let tree = unsafe {
|
||||
tree.as_ref()
|
||||
let frontier = unsafe {
|
||||
frontier
|
||||
.as_ref()
|
||||
.expect("Orchard note commitment tree pointer may not be null.")
|
||||
};
|
||||
|
||||
let writer = CppStreamWriter::from_raw_parts(stream, write_cb.unwrap());
|
||||
match bincode::serialize_into(writer, tree) {
|
||||
match write_frontier_v1(writer, frontier) {
|
||||
Ok(()) => true,
|
||||
Err(e) => {
|
||||
error!("{}", e);
|
||||
|
@ -130,7 +133,7 @@ pub extern "C" fn orchard_merkle_frontier_num_leaves(
|
|||
.expect("Orchard note commitment tree pointer may not be null.")
|
||||
};
|
||||
|
||||
tree.position().map_or(0, |p| <usize>::from(p) + 1)
|
||||
tree.position().map_or(0, |p| (<u64>::from(p) + 1) as usize)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
|
@ -182,7 +185,7 @@ pub extern "C" fn incremental_sinsemilla_tree_parse(
|
|||
) -> *mut BridgeTree<MerkleCrhOrchardOutput, MERKLE_DEPTH> {
|
||||
let reader = CppStreamReader::from_raw_parts(stream, read_cb.unwrap());
|
||||
|
||||
match bincode::deserialize_from(reader) {
|
||||
match read_tree(reader) {
|
||||
Ok(parsed) => Box::into_raw(Box::new(parsed)),
|
||||
Err(e) => {
|
||||
error!("Failed to parse Orchard bundle: {}", e);
|
||||
|
@ -203,7 +206,7 @@ pub extern "C" fn incremental_sinsemilla_tree_serialize(
|
|||
};
|
||||
|
||||
let writer = CppStreamWriter::from_raw_parts(stream, write_cb.unwrap());
|
||||
match bincode::serialize_into(writer, tree) {
|
||||
match write_tree(writer, tree) {
|
||||
Ok(()) => true,
|
||||
Err(e) => {
|
||||
error!("{}", e);
|
||||
|
|
|
@ -946,10 +946,7 @@ pub extern "C" fn librustzcash_sapling_spend_proof(
|
|||
};
|
||||
|
||||
// Construct the proof generation key
|
||||
let proof_generation_key = ProofGenerationKey {
|
||||
ak: ak.clone(),
|
||||
nsk,
|
||||
};
|
||||
let proof_generation_key = ProofGenerationKey { ak, nsk };
|
||||
|
||||
// Grab the diversifier from the caller
|
||||
let diversifier = Diversifier(unsafe { *diversifier });
|
||||
|
|
|
@ -21,9 +21,8 @@ fn test_key_agreement() {
|
|||
let addr = loop {
|
||||
let mut d = [0; 11];
|
||||
rng.fill_bytes(&mut d);
|
||||
match vk.to_payment_address(Diversifier(d)) {
|
||||
Some(a) => break a,
|
||||
None => {}
|
||||
if let Some(a) = vk.to_payment_address(Diversifier(d)) {
|
||||
break a;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -491,7 +491,7 @@ fn redjubjub_signatures() {
|
|||
|
||||
{
|
||||
let mut vec = Vec::new();
|
||||
sk.randomize(alpha.clone()).write(&mut vec).unwrap();
|
||||
sk.randomize(alpha).write(&mut vec).unwrap();
|
||||
assert_eq!(&vec, &tv.rsk);
|
||||
}
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue