From 38ae76500decf34889aafd8a2aac7af8a8992f8e Mon Sep 17 00:00:00 2001 From: Nadav Ivgi Date: Sat, 9 Oct 2021 09:47:03 +0300 Subject: [PATCH 1/3] Add failing unit test for bincode deserialization of `Value` --- Cargo.toml | 1 + src/confidential.rs | 26 ++++++++++++++++++++++++++ src/lib.rs | 1 + 3 files changed, 28 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index e0b60ad2..5b71576f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,6 +39,7 @@ rand = "0.6.5" serde_test = "1.0" serde_json = "<=1.0.44" ryu = "<1.0.5" +bincode = "1.3" [[example]] diff --git a/src/confidential.rs b/src/confidential.rs index 67eb5d2e..2d4db7bb 100644 --- a/src/confidential.rs +++ b/src/confidential.rs @@ -1135,6 +1135,9 @@ mod tests { use super::*; use bitcoin::hashes::sha256; + #[cfg(feature = "serde")] + use bincode; + #[test] fn encode_length() { let vals = [ @@ -1449,4 +1452,27 @@ mod tests { assert_eq!(vbf_str_quoted, serde_json::to_string(&vbf_from_serde).unwrap()); } + #[cfg(feature = "serde")] + fn test_value_bincode_be() { + let value = Value::Explicit(500); + let bytes = bincode::serialize(&value).unwrap(); + let decoded: Value = bincode::deserialize(&bytes).unwrap(); + assert_eq!(value, decoded); + } + + #[cfg(feature = "serde")] + #[test] + fn test_value_bincode_le() { + use bincode::Options; + let value = Value::Explicit(500); + let bytes = bincode::DefaultOptions::default() + .with_little_endian() + .serialize(&value) + .unwrap(); + let decoded: Value = bincode::DefaultOptions::default() + .with_little_endian() + .deserialize(&bytes) + .unwrap(); + assert_eq!(value, decoded); + } } diff --git a/src/lib.rs b/src/lib.rs index 95d665ff..9e6dffaa 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -34,6 +34,7 @@ pub extern crate secp256k1_zkp; #[cfg(all(test, feature = "serde"))] extern crate serde_test; #[cfg(test)] extern crate rand; +#[cfg(test)] extern crate bincode; #[cfg(any(test, feature = "serde_json"))] extern crate serde_json; #[macro_use] mod internal_macros; From 10e938309a9b6a6dfd1e3c5e7ebf0539eec62073 Mon Sep 17 00:00:00 2001 From: sanket1729 Date: Mon, 11 Oct 2021 09:14:14 -0700 Subject: [PATCH 2/3] fix warnings --- examples/coinjoin.rs | 4 ++-- examples/pset.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/coinjoin.rs b/examples/coinjoin.rs index f77649a7..eb4d16cd 100644 --- a/examples/coinjoin.rs +++ b/examples/coinjoin.rs @@ -34,7 +34,7 @@ use rand::SeedableRng; // confidential txouts #[derive(Debug, Clone)] struct Secrets { - sk: bitcoin::PrivateKey, + _sk: bitcoin::PrivateKey, sec: TxOutSecrets, } @@ -60,7 +60,7 @@ fn parse_txout(txout_info: &str) -> (TxOut, Secrets, pset::Input) { }; let txoutsecrets = Secrets { - sk: bitcoin::PrivateKey::from_wif(&v["skwif"].as_str().unwrap()).unwrap(), + _sk: bitcoin::PrivateKey::from_wif(&v["skwif"].as_str().unwrap()).unwrap(), sec: TxOutSecrets { asset_bf: AssetBlindingFactor::from_str(&v["assetblinder"].as_str().unwrap()).unwrap(), value_bf: ValueBlindingFactor::from_str(&v["amountblinder"].as_str().unwrap()).unwrap(), diff --git a/examples/pset.rs b/examples/pset.rs index d0781ff1..933e1ca0 100644 --- a/examples/pset.rs +++ b/examples/pset.rs @@ -26,7 +26,7 @@ static PARAMS: AddressParams = AddressParams::ELEMENTS; // confidential txouts #[derive(Debug, Clone)] struct Secrets { - sk: bitcoin::PrivateKey, + _sk: bitcoin::PrivateKey, sec: TxOutSecrets, } @@ -52,7 +52,7 @@ fn parse_txout(txout_info: &str) -> (TxOut, Secrets, pset::Input) { }; let txoutsecrets = Secrets { - sk: bitcoin::PrivateKey::from_wif(&v["skwif"].as_str().unwrap()).unwrap(), + _sk: bitcoin::PrivateKey::from_wif(&v["skwif"].as_str().unwrap()).unwrap(), sec: TxOutSecrets { asset_bf: AssetBlindingFactor::from_str(&v["assetblinder"].as_str().unwrap()).unwrap(), value_bf: ValueBlindingFactor::from_str(&v["amountblinder"].as_str().unwrap()).unwrap(), From e42c7cf3dfebfcf53c9a6c0549b861a92fba6739 Mon Sep 17 00:00:00 2001 From: sanket1729 Date: Mon, 11 Oct 2021 09:14:44 -0700 Subject: [PATCH 3/3] Fix serialization --- src/confidential.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/confidential.rs b/src/confidential.rs index 2d4db7bb..307f7c71 100644 --- a/src/confidential.rs +++ b/src/confidential.rs @@ -247,7 +247,7 @@ impl<'de> Deserialize<'de> for Value { } fn visit_seq>(self, mut access: A) -> Result { - let prefix = access.next_element()?; + let prefix = access.next_element::()?; match prefix { Some(0) => Ok(Value::Null), Some(1) => { @@ -496,7 +496,7 @@ impl<'de> Deserialize<'de> for Asset { } fn visit_seq>(self, mut access: A) -> Result { - let prefix = access.next_element()?; + let prefix = access.next_element::()?; match prefix { Some(0) => Ok(Asset::Null), Some(1) => { @@ -764,7 +764,7 @@ impl<'de> Deserialize<'de> for Nonce { } fn visit_seq>(self, mut access: A) -> Result { - let prefix = access.next_element()?; + let prefix = access.next_element::()?; match prefix { Some(0) => Ok(Nonce::Null), Some(1) => {