Add implementation of Sapling merkle tree
This commit is contained in:
parent
a7cbb8475f
commit
2b002a7e60
|
@ -5,9 +5,36 @@
|
||||||
#include "zcash/IncrementalMerkleTree.hpp"
|
#include "zcash/IncrementalMerkleTree.hpp"
|
||||||
#include "crypto/sha256.h"
|
#include "crypto/sha256.h"
|
||||||
#include "zcash/util.h"
|
#include "zcash/util.h"
|
||||||
|
#include "librustzcash.h"
|
||||||
|
|
||||||
namespace libzcash {
|
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(
|
SHA256Compress SHA256Compress::combine(
|
||||||
const SHA256Compress& a,
|
const SHA256Compress& a,
|
||||||
const SHA256Compress& b,
|
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, SHA256Compress>;
|
||||||
template class IncrementalWitness<INCREMENTAL_MERKLE_TREE_DEPTH_TESTING, 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`
|
} // 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>
|
template<size_t Depth, typename Hash>
|
||||||
EmptyMerkleRoots<Depth, Hash> IncrementalMerkleTree<Depth, Hash>::emptyroots;
|
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, libzcash::SHA256Compress> ZCIncrementalWitness;
|
||||||
typedef libzcash::IncrementalWitness<INCREMENTAL_MERKLE_TREE_DEPTH_TESTING, libzcash::SHA256Compress> ZCTestingIncrementalWitness;
|
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_ */
|
#endif /* ZC_INCREMENTALMERKLETREE_H_ */
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
#define INCREMENTAL_MERKLE_TREE_DEPTH 29
|
#define INCREMENTAL_MERKLE_TREE_DEPTH 29
|
||||||
#define INCREMENTAL_MERKLE_TREE_DEPTH_TESTING 4
|
#define INCREMENTAL_MERKLE_TREE_DEPTH_TESTING 4
|
||||||
|
|
||||||
|
#define SAPLING_INCREMENTAL_MERKLE_TREE_DEPTH 32
|
||||||
|
|
||||||
#define ZC_NOTEPLAINTEXT_LEADING 1
|
#define ZC_NOTEPLAINTEXT_LEADING 1
|
||||||
#define ZC_V_SIZE 8
|
#define ZC_V_SIZE 8
|
||||||
#define ZC_RHO_SIZE 32
|
#define ZC_RHO_SIZE 32
|
||||||
|
|
Loading…
Reference in New Issue