All Projects → fametrano → btclib

fametrano / btclib

Licence: MIT license
btclib: a Python3 library for 'bitcoin cryptography'

Projects that are alternatives of or similar to btclib

Number-Theory-Python
Python code to implement various number theory, elliptic curve and finite field computations.
Stars: ✭ 85 (+431.25%)
Mutual labels:  ecdsa, elliptic-curves
cryptotools
No description or website provided.
Stars: ✭ 182 (+1037.5%)
Mutual labels:  ecdsa, elliptic-curves
Swift Crypto
Open-source implementation of a substantial portion of the API of Apple CryptoKit suitable for use on Linux platforms.
Stars: ✭ 1,005 (+6181.25%)
Mutual labels:  ecdsa, elliptic-curves
ECTester
Tests support and behavior of elliptic curve cryptography implementations on JavaCards (TYPE_EC_FP and TYPE_EC_F2M) and in selected software libraries.
Stars: ✭ 51 (+218.75%)
Mutual labels:  ecdsa, elliptic-curves
Fastecdsa
Python library for fast elliptic curve crypto
Stars: ✭ 158 (+887.5%)
Mutual labels:  ecdsa, elliptic-curves
btclib
btclib: a python3 library for 'bitcoin cryptography'
Stars: ✭ 60 (+275%)
Mutual labels:  ecdsa, elliptic-curves
EllipticCurve
An elliptic curve library written in Swift 4
Stars: ✭ 18 (+12.5%)
Mutual labels:  ecdsa, elliptic-curves
Phpseclib
PHP Secure Communications Library
Stars: ✭ 4,627 (+28818.75%)
Mutual labels:  ecdsa
Cryptolib4pascal
Crypto for Modern Object Pascal
Stars: ✭ 127 (+693.75%)
Mutual labels:  ecdsa
Crypt Le
Crypt::LE - Let's Encrypt / Buypass / ACME client and library in Perl for obtaining free SSL certificates (inc. generating RSA/ECC keys and CSRs). HTTP/DNS verification is supported out of the box, easily extended with plugins, easily dockerized.
Stars: ✭ 277 (+1631.25%)
Mutual labels:  ecdsa
Oscrypto
Compiler-free Python crypto library backed by the OS, supporting CPython and PyPy
Stars: ✭ 257 (+1506.25%)
Mutual labels:  ecdsa
Chattervox
📡 An AX.25 packet radio chat protocol with support for digital signatures and binary compression. Like IRC over radio waves.
Stars: ✭ 662 (+4037.5%)
Mutual labels:  ecdsa
Signatures
Cryptographic signature algorithms: ECDSA, Ed25519
Stars: ✭ 135 (+743.75%)
Mutual labels:  ecdsa
Multi Party Ecdsa
Rust implementation of {t,n}-threshold ECDSA (elliptic curve digital signature algorithm).
Stars: ✭ 339 (+2018.75%)
Mutual labels:  ecdsa
Ecdsa Private Key Recovery
A simple library to recover the private key of ECDSA and DSA signatures sharing the same nonce k and therefore having identical signature parameter r
Stars: ✭ 186 (+1062.5%)
Mutual labels:  ecdsa
Tlslite Ng
TLS implementation in pure python, focused on interoperability testing
Stars: ✭ 119 (+643.75%)
Mutual labels:  ecdsa
Jsrsasign
The 'jsrsasign' (RSA-Sign JavaScript Library) is an opensource free cryptography library supporting RSA/RSAPSS/ECDSA/DSA signing/validation, ASN.1, PKCS#1/5/8 private/public key, X.509 certificate, CRL, OCSP, CMS SignedData, TimeStamp, CAdES JSON Web Signature/Token in pure JavaScript.
Stars: ✭ 2,760 (+17150%)
Mutual labels:  ecdsa
Bitcoinecdsa.php
PHP library to generate BTC addresses and signatures from private keys.
Stars: ✭ 169 (+956.25%)
Mutual labels:  ecdsa
Bitp0wn
Algorithms to re-compute a private key, to fake signatures and some other funny things with Bitcoin.
Stars: ✭ 59 (+268.75%)
Mutual labels:  ecdsa
Watchdog
Simple registration framework for OS X apps. DSA/ECDSA support. No OpenSSL required.
Stars: ✭ 46 (+187.5%)
Mutual labels:  ecdsa

A Python library for 'bitcoin cryptography'

Project status license
Package calver: yyy.m.d pypi downloads
Supported platforms python
Formatting standards lint: isort lint: black lint: flake8 lint: yesqa lint: markdownlint-cli2
Coding standards lint: pylint lint: autoflake lint: pyupgrade lint: sourcery security: bandit
Type checking type check: mypy type check: pyright
Documentation docs lint: docformatter lint: pydocstringformatter lint: pydocstyle
CI/CD pre-commit pre-commit.ci status lint test test-py312 coverage
Conversations slack Follow on Twitter

Browse GitHub Code Repository


btclib is a Python3 type annotated library intended for teaching, learning, and using bitcoin; the focus is on elliptic curve cryptography and bitcoin's blockchain.

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.

The library is not limited to the bitcon elliptic curve secp256k1; anyway, FFI bindings to libsecp256k1 (the optimized C library used by Bitcoin Core) are available for this curve and used by default.

Included features are:

  • modulo algebra functions (gcd, inverse, legendre symbol, square root)
  • octets / integer / point / var_int / var_bytes helper 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
  • RFC 6979 for deterministic signature schemes
  • EC Schnorr signature (according to BIP340 bitcoin standardization)
    • batch validation
    • threshold signature (see test-suite)
    • MuSig multi-signature (see test-suite)
  • Borromean ring signature
  • 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, p2wsh and p2tr addresses
  • BIP39 wordlists and mnemonic for generating deterministic keys
  • Electrum standard for mnemonic
  • Script encoding/decoding
  • nulldata, p2pk, p2ms, p2pkh, p2sh, p2wpkh, p2wsh and p2tr ScriptPubKeys
  • BlockHeader and Block data classes
  • OutPoint, TxIn, TxOut, and TX data classes
  • legacy, segwit_v0 and taproot transaction hash signatures
  • 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:

Shell:

python -m venv venv_btclib
source ./venv_btclib/bin/activate
python -m pip install --upgrade btclib

Windows CMD or PowerShell:

python -m venv venv_btclib
.\venv_btclib\Scripts\activate
python -m pip install --upgrade btclib

Windows Git bash shell:

python -m venv venv_btclib
cd ./venv_btclib/Scripts
. activate
cd ../..
python -m pip install --upgrade btclib

See CONTRIBUTING if you are interested in btclib develoment.

See SECURITY if you have found a security vulnerability.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].