libtss is a Rust library that unifies FROST (RFC 9591) threshold Schnorr and DKLs23 threshold ECDSA behind a single API, exposed via C ABI for multi-language consumption.
- Unified session API — protocol-agnostic
new()→next()loop for DKG, signing, and refresh - Protocol selection by ciphersuite — FROST for Schnorr/BIP-340/Taproot; DKLs23 for ECDSA
- C ABI + language bindings — Go (cgo), React Native, WASM, .NET, Python
- Transport-agnostic — pure computation, bytes in/bytes out, no network or async runtime
- Secret safety — all key material in Rust memory with
zeroize-on-drop; consumers get opaque handles
| Protocol | Curves | Use Cases |
|---|---|---|
| FROST (RFC 9591) | secp256k1-TR, secp256k1, Ed25519, P-256, ristretto255, Ed448 | Bitcoin Taproot, Solana, TLS/WebAuthn |
| DKLs23 | secp256k1, secp256r1 | Ethereum, Bitcoin, Cosmos, TRON, NEO3, Sui |
- Install Rust using
rustup
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh- Clone the repository:
git clone https://github.com/0xCarbon/libtss
cd libtss- Build:
cargo build --workspace- Run tests:
cargo test --workspaceApplications (Go, Rust, React Native, WASM, .NET, Python)
│
▼
Thin Language Bindings (libtss-go, libtss-rn, libtss-wasm, ...)
│
▼
C ABI (libtss.h — stable header, generated by cbindgen)
│
▼
libtss (Rust crate — unified API, handle registry, error mapping)
│
├── frost-* (ZCash Foundation FROST, 7 ciphersuites)
└── dkls23-* (0xCarbon DKLs23, secp256k1 + secp256r1)
See spec/ for the full design specification.
| Binding | Language | Description |
|---|---|---|
| libtss-ffi | C ABI | FFI layer (cbindgen) |
| libtss-go | Go | cgo binding |
| libtss-wasm | JavaScript / TypeScript | WebAssembly (wasm-bindgen) |
| libtss-rn | React Native | iOS & Android |
| libtss-python | Python | ctypes binding |
| libtss-node | TypeScript (Node.js / Bun) | koffi FFI binding |
| libtss-dotnet | C# / .NET | P/Invoke binding |
We welcome contributions! Please see CONTRIBUTING.md for details on how to get started.
For information on how to report security vulnerabilities, please see our SECURITY.md.
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
This project is licensed under either of
at your option.
See the list of contributors who participated in this project.