btclib: a bitcoin cryptography library
Clone or download
#31 Compare This branch is 5 commits ahead, 3 commits behind fametrano:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

btclib: a 'bitcoin cryptography' library

Build Status Coverage Status PyPI status PyPI pyversions PyPI version GitHub License

btclib is a python3 type annotated library intended for teaching and demonstration of the elliptic curve cryptography used in bitcoin.

It does not have external requirements or dependencies; to install (and upgrade) it:

python3 -m pip install --upgrade btclib

Originally developed for the Bitcoin and Blockchain Technology Course at Milano Bicocca and Politecnico di Milano, its algorithms are not intended for production environments: they could be broken using side-channel attacks; moreover, they might be subjected to major refactoring without care for backward compatibility.

The library includes:

  • modulo algebra functions (gcd, inverse, legendre symbol, square root)
  • octet / integer / point conversion functions
  • elliptic curve class
    • fast algebra implemented using Jacobian coordinates
    • double scalar multiplication (Straus's algorithm, also known as Shamir's trick)
    • multi scalar multiplication (Bos-coster's algorithm)
    • point simmetry solution: odd/even, high/low, and quadratic residue
    • available curves: SEC 1 v1 and v2, NIST, Brainpool, and low cardinality test curves
  • DSA signature and DER encoding
  • Schnorr signature (according to bip-schnorr bitcoin standardization)
    • batch validation
    • threshold signature
    • MuSig multi-signature
  • Borromean ring signature
  • RFC-6979 to make signature schemes deterministic
  • sign-to-contract notarization
  • Diffie-Hellman
  • Pedersen Committment
  • base58 encoding, addresses, WIFs
  • BIP32 hierarchical deterministic wallets
  • BIP39 mnemonic code for generating deterministic keys
  • Electrum standard for mnemonic code

A very extensive test suite reproduces results from major official sources and covers basically 100% of the library code base.