# Building blocks

The cryptographic algorithms and protocols that are used by the Provably system to construct the three kinds of proofs mentioned before are implemented in the Rust programming language using well-known, open-source cryptographic libraries. Provably itself will be open sourced after its release.

**Pedersen commitment:** an unconditionally hiding and computationally binding (under the discrete log assumption in large prime order groups) commitment scheme.

**Bulletproofs:** a Zero Knowledge protocol providing an inner-product argument (IPA) that has logarithmic proof size (in the length of the vectors of the IPA), linear proving time, and logarithmic verification time. Such protocol is particularly well-suited for providing a ZK range proof: proving that a hidden value lies in a given interval without disclosing any information about the value.

**Merkle/Verkle Trees:** the Merkle Tree is a tree data structure where each node stores the hash values of its children. As such, the root hash value is a compact digital fingerprint of a possibly large collection of items suitable for proving membership/non-membership. Proving membership has logarithmic size (in the collection's size).The Verkle tree is a Merkle tree variant that uses Pedersen vector commitments instead of hash values . This results in shorter proofs.

**Chaum-Pedersen equality proof:** the equality proof Provably relies upon is the Chaum-Pedersen Zero Knowledge proof that allows to check the equality of two Pedersen committed values.