Return optional for Sapling commitments and nullifiers.
Unlike Sprout, they are not always computable in Sapling.
This commit is contained in:
parent
d17f8d1cc7
commit
268e5dfa50
|
@ -45,7 +45,7 @@ TEST(SaplingNote, TestVectors)
|
||||||
|
|
||||||
// Test commitment
|
// Test commitment
|
||||||
SaplingNote note = SaplingNote(diversifier, pk_d, v, r);
|
SaplingNote note = SaplingNote(diversifier, pk_d, v, r);
|
||||||
ASSERT_EQ(note.cm(), cm);
|
ASSERT_EQ(note.cm().get(), cm);
|
||||||
|
|
||||||
// Test nullifier
|
// Test nullifier
|
||||||
SaplingSpendingKey spendingKey(sk);
|
SaplingSpendingKey spendingKey(sk);
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
#include "zcash/util.h"
|
#include "zcash/util.h"
|
||||||
#include "librustzcash.h"
|
#include "librustzcash.h"
|
||||||
|
|
||||||
namespace libzcash {
|
using namespace libzcash;
|
||||||
|
|
||||||
SproutNote::SproutNote() {
|
SproutNote::SproutNote() {
|
||||||
a_pk = random_uint256();
|
a_pk = random_uint256();
|
||||||
|
@ -48,7 +48,7 @@ SaplingNote::SaplingNote(const SaplingPaymentAddress& address, const uint64_t va
|
||||||
}
|
}
|
||||||
|
|
||||||
// Call librustzcash to compute the commitment
|
// Call librustzcash to compute the commitment
|
||||||
uint256 SaplingNote::cm() const {
|
boost::optional<uint256> SaplingNote::cm() const {
|
||||||
uint256 result;
|
uint256 result;
|
||||||
if (!librustzcash_sapling_compute_cm(
|
if (!librustzcash_sapling_compute_cm(
|
||||||
d.data(),
|
d.data(),
|
||||||
|
@ -58,14 +58,14 @@ uint256 SaplingNote::cm() const {
|
||||||
result.begin()
|
result.begin()
|
||||||
))
|
))
|
||||||
{
|
{
|
||||||
throw std::runtime_error("librustzcash_sapling_compute_cm returned false");
|
return boost::none;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Call librustzcash to compute the nullifier
|
// Call librustzcash to compute the nullifier
|
||||||
uint256 SaplingNote::nullifier(const SaplingSpendingKey& sk, const uint64_t position) const
|
boost::optional<uint256> SaplingNote::nullifier(const SaplingSpendingKey& sk, const uint64_t position) const
|
||||||
{
|
{
|
||||||
auto vk = sk.full_viewing_key();
|
auto vk = sk.full_viewing_key();
|
||||||
auto ak = vk.ak;
|
auto ak = vk.ak;
|
||||||
|
@ -83,7 +83,7 @@ uint256 SaplingNote::nullifier(const SaplingSpendingKey& sk, const uint64_t posi
|
||||||
result.begin()
|
result.begin()
|
||||||
))
|
))
|
||||||
{
|
{
|
||||||
throw std::runtime_error("librustzcash_sapling_compute_nf returned false");
|
return boost::none;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
@ -137,5 +137,3 @@ ZCNoteEncryption::Ciphertext SproutNotePlaintext::encrypt(ZCNoteEncryption& encr
|
||||||
|
|
||||||
return encryptor.encrypt(pk_enc, pt);
|
return encryptor.encrypt(pk_enc, pt);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "NoteEncryption.hpp"
|
#include "NoteEncryption.hpp"
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
|
#include <boost/optional.hpp>
|
||||||
|
|
||||||
namespace libzcash {
|
namespace libzcash {
|
||||||
|
|
||||||
|
@ -18,7 +19,6 @@ public:
|
||||||
BaseNote(uint64_t value) : value_(value) {};
|
BaseNote(uint64_t value) : value_(value) {};
|
||||||
virtual ~BaseNote() {};
|
virtual ~BaseNote() {};
|
||||||
|
|
||||||
virtual uint256 cm() const = 0;
|
|
||||||
inline uint64_t value() const { return value_; };
|
inline uint64_t value() const { return value_; };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ public:
|
||||||
|
|
||||||
virtual ~SproutNote() {};
|
virtual ~SproutNote() {};
|
||||||
|
|
||||||
virtual uint256 cm() const override;
|
uint256 cm() const;
|
||||||
|
|
||||||
uint256 nullifier(const SproutSpendingKey& a_sk) const;
|
uint256 nullifier(const SproutSpendingKey& a_sk) const;
|
||||||
};
|
};
|
||||||
|
@ -56,9 +56,8 @@ public:
|
||||||
|
|
||||||
virtual ~SaplingNote() {};
|
virtual ~SaplingNote() {};
|
||||||
|
|
||||||
virtual uint256 cm() const override;
|
boost::optional<uint256> cm() const;
|
||||||
|
boost::optional<uint256> nullifier(const SaplingSpendingKey &sk, const uint64_t position) const;
|
||||||
uint256 nullifier(const SaplingSpendingKey &sk, const uint64_t position) const;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class BaseNotePlaintext {
|
class BaseNotePlaintext {
|
||||||
|
|
Loading…
Reference in New Issue