This crate provides libraries and command line interfaces for producing threshold BLS signatures. The signatures can also be blind in order to preserve the privacy of the user asking for a signature from another set of parties.
Note: The DKG (Distributed Key Generation) crates have been removed from this repository as they were unstable and not necessary for the BLS crates to work. They were removed in commit a911f40f0fd31fabae197016b87640f2fdcf1c9f.
The project includes a justfile that supports building for multiple platforms using Docker. All built libraries are placed in the output directory, organized by platform. Run just to list the available recipes.
Install just with your package manager (brew install just, cargo install just) or with the
install script:
curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to ~/binTo clean the output directory before building:
just cleanjust allThis builds the libraries for all supported platforms.
The tests run natively, including on Apple Silicon:
cargo test --workspace --all-featuresTo run them in the linux/amd64 build image instead, which is what CI builds against:
just testjust wasmThis builds WebAssembly bindings that can be used with Node.js and places them in output/wasm.
just jvmThis builds JVM-compatible libraries and places them in output/jvm.
The mobile builds target:
- Android: API level 24 (Android 7.0) — set via
android_apiin thejustfile - iOS: 15.2 — set via
ios_deployment_targetin the same file
just iosThis builds a universal static library for iOS (combining aarch64 and x86_64 architectures) and places it in output/ios. Note that iOS builds must be run on a macOS host as they cannot be built in Docker.
just androidThis builds dynamic libraries for Android architectures (x86, x86_64, arm64-v8a, and armeabi-v7a) and places them in output/android.
The docker image used for building the libraries can be built separately if needed:
just build-docker-imageRust 1.97.1 is used by default and tested for all builds. If desired, you can build with a different Rust version by setting the RUST_VERSION env var:
just RUST_VERSION=1.97.1 allThis repository contains Rust crates that implement threshold BLS signatures. The high-level structure of the repository is as follows:
threshold-bls: (blind) threshold BLS signatures for BLS12-377. The API documentation, with worked examples for plain, blind and threshold signing, is the crate-level rustdoc insrc/lib.rs;cargo doc --openrenders it.threshold-bls-ffi: FFI and WASM bindings tothreshold-blsfor cross platform interoperability. Its README covers building and consuming each binding surface.
Every value the bindings exchange crosses as bytes, and those layouts are public
API: docs/wire-format.md documents each one, what pins
it, and what changes it.
This software has not been audited. Use at your own risk.