From db9f669c15fdb661c5c99aa0f93af7aacb62daf8 Mon Sep 17 00:00:00 2001 From: Jay Graber Date: Tue, 10 Jul 2018 16:58:34 -0700 Subject: [PATCH] Discard sk if ivk == 0 --- src/zcash/Address.cpp | 14 ++++++++++++-- src/zcash/Address.hpp | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/zcash/Address.cpp b/src/zcash/Address.cpp index a3db85a20..d12e82cdc 100644 --- a/src/zcash/Address.cpp +++ b/src/zcash/Address.cpp @@ -67,8 +67,19 @@ SaplingIncomingViewingKey SaplingFullViewingKey::in_viewing_key() const { return SaplingIncomingViewingKey(ivk); } +bool SaplingFullViewingKey::is_valid() const { + uint256 ivk; + librustzcash_crh_ivk(ak.begin(), nk.begin(), ivk.begin()); + return !ivk.IsNull(); +} + SaplingSpendingKey SaplingSpendingKey::random() { - return SaplingSpendingKey(random_uint256()); + while (true) { + auto sk = SaplingSpendingKey(random_uint256()); + if (sk.full_viewing_key().is_valid()) { + return sk; + } + } } boost::optional SaplingIncomingViewingKey::address(diversifier_t d) const { @@ -90,7 +101,6 @@ SaplingPaymentAddress SaplingSpendingKey::default_address() const { } - bool IsValidPaymentAddress(const libzcash::PaymentAddress& zaddr) { return zaddr.which() != 0; } diff --git a/src/zcash/Address.hpp b/src/zcash/Address.hpp index 01eb14f54..ca9905657 100644 --- a/src/zcash/Address.hpp +++ b/src/zcash/Address.hpp @@ -152,6 +152,7 @@ public: } SaplingIncomingViewingKey in_viewing_key() const; + bool is_valid() const; friend inline bool operator==(const SaplingFullViewingKey& a, const SaplingFullViewingKey& b) { return a.ak == b.ak && a.nk == b.nk && a.ovk == b.ovk;