MPT-Crypto is a specialized C library implementing the cryptographic building blocks for
Confidential Multi-Purpose Tokens (MPT) on the XRP Ledger. It provides implementations of homomorphic encryption, aggregated range proofs, and specialized zero-knowledge proofs.
The library is built on top of libsecp256k1 for elliptic curve arithmetic and OpenSSL for hashing and randomness.
- Additive Homomorphic Encryption: Enables the ledger to aggregate encrypted balances (e.g.,
Enc(A) + Enc(B) = Enc(A+B)) without decryption. - Canonical Zero: Deterministic encryption of zero balances to prevent ledger state bloat and ensure consistency.
-
Aggregated Proofs: Supports proving that
$m$ values are within the range$[0, 2^{64})$ in a single proof with logarithmic size$\mathcal{O}(\log n)$ . - Inner Product Argument (IPA): Implements the standard Bulletproofs IPA for succinct verification.
- Fiat-Shamir: Secure non-interactive challenge generation with strict domain separation.
- Plaintext Equality: Proves two or more ciphertexts encrypt the same amount under different keys.
- Linkage Proof: Proves consistency between an ElGamal ciphertext (used for transfer) and a Pedersen Commitment (used for the range proof).
- Proof of Knowledge (PoK): Proves ownership of the secret key during account registration to prevent rogue key attacks.
Before building, ensure you have the following installed:
- CMake (version 3.10 or higher)
- C Compiler (GCC, Clang, or AppleClang)
On macOS with Homebrew:
brew install cmakeOn Ubuntu/Debian:
sudo apt-get install cmake build-essentialSet up Conan using xrpld's BUILD.md
Run following commands to build the library
-
Create build directory:
mkdir build && cd build
-
Buld dependencies:
conan install .. --build=missing -o "&:tests=True" -
Run CMake:
cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -G Ninja \ -DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake
-
Build the library and tests:
ninja
After building, run the test suite using CTest from the build directory:
ctest --output-on-failureOr run individual tests directly:
./tests/test_elgamal
./tests/test_bulletproof_agg
./tests/test_commitmentsThe following tests should pass:
test_bulletproof_agg- Aggregated Bulletproof range proofstest_commitments- Pedersen commitmentstest_elgamal- ElGamal encryption/decryptiontest_elgamal_verify- ElGamal verificationtest_equality_proof- Equality proofstest_ipa- Inner Product Argument (IPA) Core Logictest_link_proof- Linkage proofstest_pok_sk- Proof of knowledge of secret keytest_same_plaintext- Same plaintext proofstest_same_plaintext_multi- Multi-recipient same plaintext proofstest_same_plaintext_multi_shared_r- Shared randomness variant
Note: test_bulletproof.c is excluded from the build because the aggregated implementation (bulletproof_aggregated.c) is fully general; verifying the m=1 case is now covered by test_bulletproof_agg.c.