18 {
'P',
'I',
'V',
'X',
'_',
'_',
'H',
'D',
'_',
'S',
'e',
'e',
'd',
'_',
'F',
'P'};
21 {
'P',
'x',
'T',
'a',
'd',
'd',
'r',
'T',
'o',
'S',
'a',
'p',
'l',
'i',
'n',
'g'};
42 crypto_generichash_blake2b_state state;
43 assert(crypto_generichash_blake2b_init_salt_personal(
49 crypto_generichash_blake2b_update(&state, rawSeed.data(), rawSeed.size());
50 auto intermediate = std::array<unsigned char, 64>();
51 crypto_generichash_blake2b_final(&state, intermediate.data(), 64);
55 memcpy(intermediate_L.
begin(), intermediate.data(), 32);
71 reinterpret_cast<unsigned char*
>(p_bytes.data()),
73 reinterpret_cast<unsigned char*
>(i_bytes.data())
94 reinterpret_cast<unsigned char*
>(xfvk_bytes.data()),
96 reinterpret_cast<unsigned char*
>(addr_bytes.data()))) {
100 return std::make_pair(j_ret, addr);
112 throw std::runtime_error(
"SaplingExtendedFullViewingKey::DefaultAddress(): No valid diversifiers out of 2^88!");
114 return addr.get().second;
124 reinterpret_cast<unsigned char*
>(m_bytes.data()));
140 reinterpret_cast<unsigned char*
>(p_bytes.data()),
142 reinterpret_cast<unsigned char*
>(i_bytes.data()));
170 return zkey.which() != 0;
174 return vk.which() != 0;
A writer stream (for serialization) that computes a 256-bit BLAKE2b hash.
const_iterator end() const
const_iterator begin() const
uint256 Fingerprint() const
static HDSeed Random(size_t len=32)
SaplingFullViewingKey full_viewing_key() const
void * memcpy(void *a, const void *b, size_t c)
std::vector< unsigned char, secure_allocator< unsigned char > > CPrivKey
CPrivKey is a serialized private key, with all parameters included (PRIVATE_KEY_SIZE bytes)
bool librustzcash_zip32_xfvk_address(const unsigned char *xfvk, const unsigned char *j, unsigned char *j_ret, unsigned char *addr_ret)
Derive a PaymentAddress from an ExtendedFullViewingKey.
void librustzcash_zip32_xsk_master(const unsigned char *seed, size_t seedlen, unsigned char *xsk_master)
Derive the master ExtendedSpendingKey from a seed.
void librustzcash_zip32_xsk_derive(const unsigned char *xsk_parent, uint32_t i, unsigned char *xsk_i)
Derive a child ExtendedSpendingKey from a parent.
bool librustzcash_zip32_xfvk_derive(const unsigned char *xfvk_parent, uint32_t i, unsigned char *xfvk_i)
Derive a child ExtendedFullViewingKey from a parent.
const size_t SerializedSaplingPaymentAddressSize
boost::variant< InvalidEncoding, SaplingExtendedSpendingKey > SpendingKey
boost::variant< InvalidEncoding, SaplingExtendedFullViewingKey > ViewingKey
boost::optional< T > Optional
Substitute for C++17 std::optional.
uint256 PRF_ovk(const uint256 &sk)
void GetRandBytes(unsigned char *buf, int num) noexcept
Overall design of the RNG and entropy sources.
Optional< std::pair< diversifier_index_t, libzcash::SaplingPaymentAddress > > Address(diversifier_index_t j) const
libzcash::SaplingFullViewingKey fvk
Optional< SaplingExtendedFullViewingKey > Derive(uint32_t i) const
libzcash::SaplingPaymentAddress DefaultAddress() const
libzcash::SaplingExpandedSpendingKey expsk
libzcash::SaplingPaymentAddress DefaultAddress() const
SaplingExtendedSpendingKey Derive(uint32_t i) const
static SaplingExtendedSpendingKey Master(const HDSeed &seed)
SaplingExtendedFullViewingKey ToXFVK() const
std::vector< char, zero_after_free_allocator< char > > CSerializeData
const unsigned char PIVX_HD_SEED_FP_PERSONAL[crypto_generichash_blake2b_PERSONALBYTES]
const unsigned char PIVX_TADDR_OVK_PERSONAL[crypto_generichash_blake2b_PERSONALBYTES]
bool IsValidSpendingKey(const libzcash::SpendingKey &zkey)
Check whether a SpendingKey is not an InvalidEncoding.
bool IsValidViewingKey(const libzcash::ViewingKey &vk)
Check whether a ViewingKey is not an InvalidEncoding.
uint256 ovkForShieldingFromTaddr(HDSeed &seed)
const size_t ZIP32_XFVK_SIZE
const size_t ZIP32_XSK_SIZE