46class MerkleCommitment {
48 explicit MerkleCommitment(
size_t n) : n_(n), mt_(n), nonce_(n) {}
50 Digest commit(
const std::function<
void(
size_t,
SHA256 &)> &updhash,
52 for (
size_t i = 0; i < n_; ++i) {
54 rng.bytes(nonce_[i].bytes, MerkleNonce::kLength);
55 sha.Update(nonce_[i].bytes, MerkleNonce::kLength);
59 sha.DigestData(dig.data);
63 return mt_.build_tree();
66 void open(
MerkleProof &proof,
const size_t pos[],
size_t np) {
68 for (
size_t i = 0; i < np; ++i) {
69 proof.nonce[i] = nonce_[pos[i]];
72 (void)mt_.generate_compressed_proof(proof.path, pos, np);
78 std::vector<MerkleNonce> nonce_;