Tidy up network handling for Orchard keys/addresses
This commit is contained in:
parent
ee2c3af937
commit
d7d8986849
|
@ -64,10 +64,11 @@ mod tests {
|
|||
fn derive_keys_and_addresses() {
|
||||
zebra_test::init();
|
||||
|
||||
let spending_key = keys::SpendingKey::new(&mut OsRng);
|
||||
let network = Network::Mainnet;
|
||||
|
||||
let full_viewing_key =
|
||||
keys::FullViewingKey::from_spending_key(spending_key, Network::Mainnet);
|
||||
let spending_key = keys::SpendingKey::new(&mut OsRng, network);
|
||||
|
||||
let full_viewing_key = keys::FullViewingKey::from_spending_key(spending_key);
|
||||
|
||||
// Default diversifier, where index = 0.
|
||||
let diversifier_key = keys::DiversifierKey::from(full_viewing_key);
|
||||
|
@ -78,7 +79,7 @@ mod tests {
|
|||
let transmission_key = keys::TransmissionKey::from((incoming_viewing_key, diversifier));
|
||||
|
||||
let _orchard_shielded_address = Address {
|
||||
network: Network::Mainnet,
|
||||
network,
|
||||
diversifier,
|
||||
transmission_key,
|
||||
};
|
||||
|
|
|
@ -144,16 +144,6 @@ pub struct SpendingKey {
|
|||
bytes: [u8; 32],
|
||||
}
|
||||
|
||||
impl From<[u8; 32]> for SpendingKey {
|
||||
/// Generate a _SpendingKey_ from existing bytes.
|
||||
fn from(bytes: [u8; 32]) -> Self {
|
||||
Self {
|
||||
network: Network::default(),
|
||||
bytes,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<SpendingKey> for [u8; 32] {
|
||||
fn from(sk: SpendingKey) -> Self {
|
||||
sk.bytes
|
||||
|
@ -203,7 +193,7 @@ impl SpendingKey {
|
|||
/// is not zero, else fail.
|
||||
///
|
||||
/// [orchardkeycomponents]: https://zips.z.cash/protocol/nu5.pdf#orchardkeycomponents
|
||||
pub fn new<T>(csprng: &mut T) -> Self
|
||||
pub fn new<T>(csprng: &mut T, network: Network) -> Self
|
||||
where
|
||||
T: RngCore + CryptoRng,
|
||||
{
|
||||
|
@ -211,7 +201,7 @@ impl SpendingKey {
|
|||
let mut bytes = [0u8; 32];
|
||||
csprng.fill_bytes(&mut bytes);
|
||||
|
||||
let sk = Self::from(bytes);
|
||||
let sk = Self::from_bytes(bytes, network);
|
||||
|
||||
// "if ask = 0, discard this key and repeat with a new sk"
|
||||
if SpendAuthorizingKey::from(sk).0 == pallas::Scalar::zero() {
|
||||
|
@ -221,6 +211,11 @@ impl SpendingKey {
|
|||
break sk;
|
||||
}
|
||||
}
|
||||
|
||||
/// Generate a `SpendingKey` from existing bytes.
|
||||
fn from_bytes(bytes: [u8; 32], network: Network) -> Self {
|
||||
Self { network, bytes }
|
||||
}
|
||||
}
|
||||
|
||||
/// A Spend authorizing key (_ask_), as described in [protocol specification
|
||||
|
@ -643,11 +638,11 @@ impl FullViewingKey {
|
|||
///
|
||||
/// 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 {
|
||||
pub fn from_spending_key(sk: SpendingKey) -> FullViewingKey {
|
||||
let spend_authorizing_key = SpendAuthorizingKey::from(sk);
|
||||
|
||||
Self {
|
||||
network,
|
||||
network: sk.network,
|
||||
spend_validating_key: SpendValidatingKey::from(spend_authorizing_key),
|
||||
nullifier_deriving_key: NullifierDerivingKey::from(sk),
|
||||
ivk_commit_randomness: IvkCommitRandomness::from(sk),
|
||||
|
|
|
@ -11,8 +11,7 @@ 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(spending_key, Network::Mainnet);
|
||||
let full_viewing_key = FullViewingKey::from_spending_key(spending_key);
|
||||
|
||||
let diversifier_key = DiversifierKey::from(full_viewing_key);
|
||||
|
||||
|
@ -56,9 +55,7 @@ proptest! {
|
|||
prop_assert_eq![full_viewing_key, full_viewing_key_2];
|
||||
|
||||
let diversifier_key = DiversifierKey::from(full_viewing_key);
|
||||
|
||||
let mut incoming_viewing_key = IncomingViewingKey::from(full_viewing_key);
|
||||
incoming_viewing_key.network = spending_key.network;
|
||||
let incoming_viewing_key = IncomingViewingKey::from(full_viewing_key);
|
||||
|
||||
let ivk_string = incoming_viewing_key.to_string();
|
||||
let incoming_viewing_key_2: IncomingViewingKey = ivk_string.parse().unwrap();
|
||||
|
|
Loading…
Reference in New Issue