A library for 'bitcoin cryptography'
Project description
A Python library for 'bitcoin cryptography'
btclib is a Python3 type annotated library intended for teaching, learning, and using bitcoin, its blockchain, and the associated elliptic curve cryptography.
It is rigorously and extensively tested: the test suite covers 100% of the code base and reproduces results from both informal and major reference sources.
Originally developed for the Bitcoin and Blockchain Technology course at the University of Milano-Bicocca, btclib is not intended for production environments: it is often refactored for improved clarity, without care for backward compatibility; moreover, some of its algorithms could be broken using side-channel attacks.
Included features are:
- modulo algebra functions (gcd, inverse, legendre symbol, square root)
- octets / integer / varint / 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, low/high, and quadratic residue
- elliptic curves: SEC 1 v1 and v2, NIST, Brainpool, and low cardinality test curves
- ECDSA signature with (transaction) DER encoding
- ECDSA signature with (message) compact encoding: standard p2pkh and BIP137/Electrum extensions to p2wpkh and p2wpkh-p2sh
- EC Schnorr signature (according to
BIP340
bitcoin standardization)
- batch validation
- threshold signature (see test-suite)
- MuSig multi-signature (see test-suite)
- Borromean ring signature
- RFC 6979 to make signature schemes deterministic
- Sign-to-contract commitment
- Diffie-Hellman
- Pedersen committment
- Base58 encoding/decoding
- p2pkh/p2sh addresses and WIFs
- Bech32 encoding/decoding
- p2wpkh/p2wsh native SegWit addresses and their legacy p2sh-wrapped versions
- BIP32 hierarchical deterministic key chains
- SLIP132 key versions (xprv, yprv, zprv, Yprv, Zprv, tprv, uprv, vprv, and Uprv) with corresponding mapping to p2pkh/p2sh, p2wpkh-p2sh, p2wpkh, p2wsh-p2sh, and p2wsh addresses
- BIP39 wordlists and mnemonic for generating deterministic keys
- Electrum standard for mnemonic
- Script encoding/decoding
- nulldata, p2pk, p2ms, p2pkh, p2sh, p2wpkh, and p2wsh ScriptPubKeys
- BlockHeader and Block data classes
- OutPoint, TxIn, TxOut, and TX data classes
- legacy and segwit_v0 sighash
- BIP174 partially signed bitcoin transactions (PSBT): PsbtIn, PbstOut, and Psbt data classes
To install (and/or upgrade) btclib:
python -m pip install --upgrade btclib
You might want to install btclib into a python virtual environment; e.g. from the root folder:
Bash shell
python -m venv venv
source ./venv/bin/activate
pip install --upgrade btclib
Windows CMD or PowerShell:
python -m venv venv
.\venv\Scripts\activate
pip install --upgrade btclib
Windows Git bash shell:
python -m venv venv
cd ./venv/Scripts
. activate
cd ../..
pip install --upgrade btclib
Some development tools are required to develop and test btclib; they can be installed with:
python -m pip install --upgrade -r requirements-dev.txt
Developers might also consider to install btclib in editable way:
python -m pip install --upgrade -e ./
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for btclib-2020.11.23-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a0ec3b8f59798910d21e60d4ab1042d0f0cadf8c1dd7b2f14506d3faefca5844 |
|
MD5 | 82da367c91adcf058a5322e1a9de4446 |
|
BLAKE2b-256 | e689d0e4ae648901b12ea194b37ddda25994765e037eba173c0ea843a1553454 |