This repository contains Solidity and Python implementations of several cryptographic primitives, they are designed to work together and make it easier to build novel cryptosystems using composable primitives. These implementations can be easily switched to either the secp256k1 or alt_bn128 curves.
- Schnorr proof of knowledge: Schnorr.sol, schnorr.py
- AOS ring signatures: AOSRing.sol, aosring.py
- Linkable AOS ring signatures: UAOSRing.sol, uaosring.py
- Packed ECDSA signatures (2x 256bit words, no
v
): ECDSA.sol, ecdsa.py - Merkle tree: MerkleProof.sol, merkle.py
- Fast AOS ring signatures, using
ecrecover
: HackyAOSRing.sol, hackyaosring.py, see this post on ethresear.ch
- Pedersen commitments
- Security hardening
- Documentation
- How to Leak a Secret
- Linkable Spontaneous Anonymous Group Signature for Ad Hoc Groups
- Borromean Ring Signatures: Gregory Maxwell, Andrew Poelstra
- One-Time, Zero-Sum Ring Signature: Conner Fromknech
- 1-out-of-n Signatures from a Variety of Keys: Masayuki Abe, Miyako Ohkubo and Koutarou Suzuki
- One-out-of-Many Proofs: Jens Groth and Markulf Kohlweiss
- Non-interactive and Information-Theoretic Secure Verifiable Secret Sharing