Skip to content

Cryptographic library enabling confidential MPT transactions on the XRP Ledger. Features ElGamal encryption, Schnorr-based ZKPs, and Bulletproofs on secp256k1.

Notifications You must be signed in to change notification settings

mrtcnk/mpt-crypto-tmp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

MPT-Crypto: Cryptographic Primitives for Confidential Assets

Overview

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.

Features

1. Confidential Balances (EC-ElGamal)

  • 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.

2. Range Proofs (Bulletproofs)

  • 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.

3. Zero-Knowledge Proofs (Sigma Protocols)

  • 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.

Building and Testing

Prerequisites

Before building, ensure you have the following installed:

  • CMake (version 3.10 or higher)
  • C Compiler (GCC, Clang, or AppleClang)
  • OpenSSL 3.x (development headers and libraries)

On macOS with Homebrew:

brew install cmake openssl@3

On Ubuntu/Debian:

sudo apt-get install cmake libssl-dev build-essential

Dependency Setup

This library requires libsecp256k1 as a sibling directory. Clone it from the bitcoin-core repository:

# From the parent directory of mpt-crypto
cd ..
git clone https://github.com/bitcoin-core/secp256k1.git

Your directory structure should look like:

Projects/
├── mpt-crypto/
└── secp256k1/

Build Instructions

  1. Create the build directory and configure:

    cd mpt-crypto
    mkdir -p build && cd build
    cmake ..
  2. Build the library and tests:

    make -j4

Platform-Specific Notes

macOS (Apple Silicon): If you encounter architecture mismatch errors with OpenSSL, explicitly set the architecture:

cmake -DCMAKE_OSX_ARCHITECTURES=arm64 ..

macOS (Intel): Use x86_64 instead:

cmake -DCMAKE_OSX_ARCHITECTURES=x86_64 ..

Running Tests

After building, run the test suite using CTest:

cd build
ctest --output-on-failure

Or run individual tests directly:

./tests/test_elgamal
./tests/test_bulletproof_agg
./tests/test_commitments

Expected Results

The following tests should pass:

  • test_bulletproof_agg - Aggregated Bulletproof range proofs
  • test_commitments - Pedersen commitments
  • test_elgamal - ElGamal encryption/decryption
  • test_elgamal_verify - ElGamal verification
  • test_equality_proof - Equality proofs
  • test_ipa - Inner Product Argument (IPA) Core Logic
  • test_link_proof - Linkage proofs
  • test_pok_sk - Proof of knowledge of secret key
  • test_same_plaintext - Same plaintext proofs
  • test_same_plaintext_multi - Multi-recipient same plaintext proofs
  • test_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.

About

Cryptographic library enabling confidential MPT transactions on the XRP Ledger. Features ElGamal encryption, Schnorr-based ZKPs, and Bulletproofs on secp256k1.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published