Impl FullViewingKey::from_spending_key(SpendingKey, Network)

Remove From impl
This commit is contained in:
Deirdre Connolly 2021-04-20 12:54:23 -04:00
parent 4fd98f6eb1
commit d33947b331
3 changed files with 19 additions and 18 deletions

View File

@ -66,7 +66,8 @@ mod tests {
let spending_key = keys::SpendingKey::new(&mut OsRng);
let full_viewing_key = keys::FullViewingKey::from(spending_key);
let full_viewing_key =
keys::FullViewingKey::from_spending_key(spending_key, Network::Mainnet);
// Default diversifier, where index = 0.
let diversifier_key = keys::DiversifierKey::from(full_viewing_key);

View File

@ -568,8 +568,6 @@ pub struct FullViewingKey {
ivk_commit_randomness: IvkCommitRandomness,
}
// TODO: impl a From that accepts a Network?
impl fmt::Debug for FullViewingKey {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_struct("FullViewingKey")
@ -598,20 +596,6 @@ impl fmt::Display for FullViewingKey {
}
}
impl From<SpendingKey> for FullViewingKey {
fn from(sk: SpendingKey) -> FullViewingKey {
let spend_authorizing_key = SpendAuthorizingKey::from(sk);
Self {
// TODO: handle setting the Network better.
network: Network::default(),
spend_validating_key: SpendValidatingKey::from(spend_authorizing_key),
nullifier_deriving_key: NullifierDerivingKey::from(sk),
ivk_commit_randomness: IvkCommitRandomness::from(sk),
}
}
}
impl FromStr for FullViewingKey {
type Err = SerializationError;
@ -657,6 +641,21 @@ impl FullViewingKey {
// let R = PRF^expand_K( [0x82] || I2LEOSP256(ak) || I2LEOSP256(nk) )
prf_expand(K, t)
}
/// Derive a full viewing key from a existing spending key and its network.
///
/// https://zips.z.cash/protocol/nu5.pdf#addressesandkeys
/// https://zips.z.cash/protocol/nu5.pdf#orchardfullviewingkeyencoding
pub fn from_spending_key(sk: SpendingKey, network: Network) -> FullViewingKey {
let spend_authorizing_key = SpendAuthorizingKey::from(sk);
Self {
network,
spend_validating_key: SpendValidatingKey::from(spend_authorizing_key),
nullifier_deriving_key: NullifierDerivingKey::from(sk),
ivk_commit_randomness: IvkCommitRandomness::from(sk),
}
}
}
/// An outgoing viewing key, as described in [protocol specification

View File

@ -11,7 +11,8 @@ impl Arbitrary for TransmissionKey {
fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy {
(any::<SpendingKey>())
.prop_map(|spending_key| {
let full_viewing_key = FullViewingKey::from(spending_key);
let full_viewing_key =
FullViewingKey::from_spending_key(spending_key, Network::Mainnet);
let diversifier_key = DiversifierKey::from(full_viewing_key);