Add implementation of Sapling merkle tree
This commit is contained in:
parent
a7cbb8475f
commit
2b002a7e60
|
@ -5,9 +5,36 @@
|
|||
#include "zcash/IncrementalMerkleTree.hpp"
|
||||
#include "crypto/sha256.h"
|
||||
#include "zcash/util.h"
|
||||
#include "librustzcash.h"
|
||||
|
||||
namespace libzcash {
|
||||
|
||||
PedersenHash PedersenHash::combine(
|
||||
const PedersenHash& a,
|
||||
const PedersenHash& b,
|
||||
size_t depth
|
||||
)
|
||||
{
|
||||
PedersenHash res = PedersenHash();
|
||||
|
||||
librustzcash_merkle_hash(
|
||||
depth,
|
||||
a.begin(),
|
||||
b.begin(),
|
||||
res.begin()
|
||||
);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
PedersenHash PedersenHash::uncommitted() {
|
||||
PedersenHash res = PedersenHash();
|
||||
|
||||
librustzcash_tree_uncommitted(res.begin());
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
SHA256Compress SHA256Compress::combine(
|
||||
const SHA256Compress& a,
|
||||
const SHA256Compress& b,
|
||||
|
@ -327,4 +354,10 @@ template class IncrementalMerkleTree<INCREMENTAL_MERKLE_TREE_DEPTH_TESTING, SHA2
|
|||
template class IncrementalWitness<INCREMENTAL_MERKLE_TREE_DEPTH, SHA256Compress>;
|
||||
template class IncrementalWitness<INCREMENTAL_MERKLE_TREE_DEPTH_TESTING, SHA256Compress>;
|
||||
|
||||
template class IncrementalMerkleTree<SAPLING_INCREMENTAL_MERKLE_TREE_DEPTH, PedersenHash>;
|
||||
template class IncrementalMerkleTree<INCREMENTAL_MERKLE_TREE_DEPTH_TESTING, PedersenHash>;
|
||||
|
||||
template class IncrementalWitness<SAPLING_INCREMENTAL_MERKLE_TREE_DEPTH, PedersenHash>;
|
||||
template class IncrementalWitness<INCREMENTAL_MERKLE_TREE_DEPTH_TESTING, PedersenHash>;
|
||||
|
||||
} // end namespace `libzcash`
|
||||
|
|
|
@ -224,6 +224,20 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
class PedersenHash : public uint256 {
|
||||
public:
|
||||
PedersenHash() : uint256() {}
|
||||
PedersenHash(uint256 contents) : uint256(contents) { }
|
||||
|
||||
static PedersenHash combine(
|
||||
const PedersenHash& a,
|
||||
const PedersenHash& b,
|
||||
size_t depth
|
||||
);
|
||||
|
||||
static PedersenHash uncommitted();
|
||||
};
|
||||
|
||||
template<size_t Depth, typename Hash>
|
||||
EmptyMerkleRoots<Depth, Hash> IncrementalMerkleTree<Depth, Hash>::emptyroots;
|
||||
|
||||
|
@ -235,4 +249,10 @@ typedef libzcash::IncrementalMerkleTree<INCREMENTAL_MERKLE_TREE_DEPTH_TESTING, l
|
|||
typedef libzcash::IncrementalWitness<INCREMENTAL_MERKLE_TREE_DEPTH, libzcash::SHA256Compress> ZCIncrementalWitness;
|
||||
typedef libzcash::IncrementalWitness<INCREMENTAL_MERKLE_TREE_DEPTH_TESTING, libzcash::SHA256Compress> ZCTestingIncrementalWitness;
|
||||
|
||||
typedef libzcash::IncrementalMerkleTree<SAPLING_INCREMENTAL_MERKLE_TREE_DEPTH, libzcash::PedersenHash> ZCSaplingIncrementalMerkleTree;
|
||||
typedef libzcash::IncrementalMerkleTree<INCREMENTAL_MERKLE_TREE_DEPTH_TESTING, libzcash::PedersenHash> ZCSaplingTestingIncrementalMerkleTree;
|
||||
|
||||
typedef libzcash::IncrementalWitness<SAPLING_INCREMENTAL_MERKLE_TREE_DEPTH, libzcash::PedersenHash> ZCSaplingIncrementalWitness;
|
||||
typedef libzcash::IncrementalWitness<INCREMENTAL_MERKLE_TREE_DEPTH_TESTING, libzcash::PedersenHash> ZCSaplingTestingIncrementalWitness;
|
||||
|
||||
#endif /* ZC_INCREMENTALMERKLETREE_H_ */
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
#define INCREMENTAL_MERKLE_TREE_DEPTH 29
|
||||
#define INCREMENTAL_MERKLE_TREE_DEPTH_TESTING 4
|
||||
|
||||
#define SAPLING_INCREMENTAL_MERKLE_TREE_DEPTH 32
|
||||
|
||||
#define ZC_NOTEPLAINTEXT_LEADING 1
|
||||
#define ZC_V_SIZE 8
|
||||
#define ZC_RHO_SIZE 32
|
||||
|
|
Loading…
Reference in New Issue