From 86142d044c0670b288c96f9e9fa9183eba74f2b0 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Fri, 23 Aug 2019 23:03:16 +0100 Subject: [PATCH] PaymentAddress::to_bytes --- librustzcash/src/rustzcash.rs | 9 +-------- zcash_client_backend/src/encoding.rs | 5 +---- zcash_primitives/src/primitives.rs | 8 ++++++++ 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/librustzcash/src/rustzcash.rs b/librustzcash/src/rustzcash.rs index 9df4437..e3a85e4 100644 --- a/librustzcash/src/rustzcash.rs +++ b/librustzcash/src/rustzcash.rs @@ -1215,14 +1215,7 @@ pub extern "system" fn librustzcash_zip32_xfvk_address( let addr_ret = unsafe { &mut *addr_ret }; j_ret.copy_from_slice(&(addr.0).0); - addr_ret - .get_mut(..11) - .unwrap() - .copy_from_slice(&addr.1.diversifier.0); - addr.1 - .pk_d - .write(addr_ret.get_mut(11..).unwrap()) - .expect("should be able to serialize a PaymentAddress"); + addr_ret.copy_from_slice(&addr.1.to_bytes()); true } diff --git a/zcash_client_backend/src/encoding.rs b/zcash_client_backend/src/encoding.rs index 9e9f2fc..4d87587 100644 --- a/zcash_client_backend/src/encoding.rs +++ b/zcash_client_backend/src/encoding.rs @@ -121,10 +121,7 @@ pub fn decode_extended_full_viewing_key( /// ); /// ``` pub fn encode_payment_address(hrp: &str, addr: &PaymentAddress) -> String { - bech32_encode(hrp, |w| { - w.write_all(&addr.diversifier.0)?; - addr.pk_d.write(w) - }) + bech32_encode(hrp, |w| w.write_all(&addr.to_bytes())) } /// Decodes a [`PaymentAddress`] from a Bech32-encoded string. diff --git a/zcash_primitives/src/primitives.rs b/zcash_primitives/src/primitives.rs index ac22f15..00ff2bf 100644 --- a/zcash_primitives/src/primitives.rs +++ b/zcash_primitives/src/primitives.rs @@ -155,6 +155,14 @@ impl PaymentAddress { }) } + /// Returns the byte encoding of this `PaymentAddress`. + pub fn to_bytes(&self) -> [u8; 43] { + let mut bytes = [0; 43]; + bytes[0..11].copy_from_slice(&self.diversifier.0); + self.pk_d.write(&mut bytes[11..]).unwrap(); + bytes + } + pub fn g_d(&self, params: &E::Params) -> Option> { self.diversifier.g_d(params) }