tsslib 0.2.4

Easy-to-use threshold signature schemes (FROST, ML-DSA, DKLs23) — wire- and save-data-compatible with the Go tss-lib.
Documentation
[package]
name = "tsslib"
version = "0.2.4"
edition = "2024"
rust-version = "1.85"
description = "Easy-to-use threshold signature schemes (FROST, ML-DSA, DKLs23) — wire- and save-data-compatible with the Go tss-lib."
repository = "https://github.com/KarpelesLab/tsslib-rs"
license = "MIT"
keywords = ["tss", "threshold", "frost", "ecdsa", "cryptography"]
categories = ["cryptography"]
readme = "README.md"

[lib]
name = "tsslib"

[features]
# Each protocol is gated so downstream users can compile only what they need;
# each pulls in exactly the purecrypto curve/lattice features it requires.
# `default` pulls in everything.
default = ["frosttss", "frostristretto255tss", "mldsatss", "dklstss", "ecdsatss", "eddsatss"]

# FROST(Ed25519, SHA-512) — RFC 9591. Ed25519-compatible output.
# cipher/kdf back the X25519+HKDF+ChaCha20-Poly1305 encrypted-share envelope.
frosttss = ["purecrypto/hazmat-edwards25519", "purecrypto/cipher", "purecrypto/kdf"]
# FROST(ristretto255, SHA-512) — RFC 9591 §6.2.
frostristretto255tss = ["purecrypto/ristretto255", "purecrypto/cipher", "purecrypto/kdf"]
# Threshold ML-DSA-44 (FIPS 204) — "Threshold Signatures Reloaded".
# hazmat-mldsa exposes the low-level Poly/NTT/sampler/packing API.
mldsatss = ["purecrypto/mldsa", "purecrypto/hazmat-mldsa"]
# Threshold ECDSA on secp256k1 — DKLs23 (ePrint 2023/765).
# cipher backs the AES-CTR PRG in the OT-extension layer.
dklstss = ["purecrypto/hazmat-secp256k1", "purecrypto/cipher"]
# Legacy threshold ECDSA on secp256k1 — GG18/GG20 (Paillier + MtA), for
# migrating keys from the Go tss-lib `ecdsatss`. bignum backs the Paillier /
# ZK-proof big-integer arithmetic. EXPERIMENTAL — see the module docs.
ecdsatss = ["purecrypto/hazmat-secp256k1", "purecrypto/bignum", "purecrypto/hash"]
# Legacy threshold EdDSA on Ed25519 — GG18-style (Feldman VSS + threshold
# Schnorr, no Paillier), for migrating keys from the Go tss-lib `eddsatss`.
eddsatss = ["purecrypto/hazmat-edwards25519", "purecrypto/hash"]

[dependencies]
# purecrypto provides all low-level crypto (curve groups + ML-DSA lattice
# primitives). Pulled from crates.io so tsslib is itself publishable.
purecrypto = { version = "0.6.1", default-features = false, features = ["std"] }
serde = { version = "1", features = ["derive"] }
# arbitrary_precision: emit/parse big.Int-shaped JSON numbers (>2^53) losslessly,
# matching Go's encoding/json for *big.Int save fields.
serde_json = { version = "1", features = ["arbitrary_precision"] }
base64 = "0.22"
hex = "0.4"
zeroize = { version = "1", features = ["derive"] }
subtle = "2"

[dev-dependencies]
serde_json = "1"