diff --git a/src/lib.rs b/src/lib.rs index 08bd0bb7c..4a93fdf99 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -58,14 +58,14 @@ impl OutgoingViewingKey { /// A Sapling expanded spending key #[derive(Clone)] -struct ExpandedSpendingKey { +pub struct ExpandedSpendingKey { ask: E::Fs, nsk: E::Fs, ovk: OutgoingViewingKey, } /// A Sapling full viewing key -struct FullViewingKey { +pub struct FullViewingKey { vk: ViewingKey, ovk: OutgoingViewingKey, } @@ -110,17 +110,18 @@ impl ExpandedSpendingKey { }) } + pub fn write(&self, mut writer: W) -> io::Result<()> { + self.ask.into_repr().write_le(&mut writer)?; + self.nsk.into_repr().write_le(&mut writer)?; + writer.write_all(&self.ovk.0)?; + + Ok(()) + } + fn to_bytes(&self) -> [u8; 96] { let mut result = [0u8; 96]; - self.ask - .into_repr() - .write_le(&mut result[..32]) - .expect("length is 32 bytes"); - self.nsk - .into_repr() - .write_le(&mut result[32..64]) - .expect("length is 32 bytes"); - (&mut result[64..]).copy_from_slice(&self.ovk.0); + self.write(&mut result[..]) + .expect("should be able to serialize an ExpandedSpendingKey"); result } } @@ -190,17 +191,18 @@ impl FullViewingKey { }) } + pub fn write(&self, mut writer: W) -> io::Result<()> { + self.vk.ak.write(&mut writer)?; + self.vk.nk.write(&mut writer)?; + writer.write_all(&self.ovk.0)?; + + Ok(()) + } + fn to_bytes(&self) -> [u8; 96] { let mut result = [0u8; 96]; - self.vk - .ak - .write(&mut result[..32]) - .expect("length is 32 bytes"); - self.vk - .nk - .write(&mut result[32..64]) - .expect("length is 32 bytes"); - (&mut result[64..]).copy_from_slice(&self.ovk.0); + self.write(&mut result[..]) + .expect("should be able to serialize a FullViewingKey"); result } } @@ -348,7 +350,7 @@ pub struct ExtendedSpendingKey { parent_fvk_tag: FVKTag, child_index: ChildIndex, chain_code: ChainCode, - expsk: ExpandedSpendingKey, + pub expsk: ExpandedSpendingKey, dk: DiversifierKey, } @@ -358,7 +360,7 @@ pub struct ExtendedFullViewingKey { parent_fvk_tag: FVKTag, child_index: ChildIndex, chain_code: ChainCode, - fvk: FullViewingKey, + pub fvk: FullViewingKey, dk: DiversifierKey, }