osst
one-step schnorr threshold identification with proactive resharing.
implementation of the OSST protocol from "One-Step Schnorr Threshold Identification" by Foteinos Mergoupis-Anagnou (GRNET).
security warning
this crate has not been audited. use at your own risk.
features
- non-interactive: provers generate proofs independently, no coordination needed
- threshold: requires t-of-n provers to verify
- proactive resharing: rotate custodian sets without changing the group public key
- multi-curve: ristretto255, pallas, secp256k1, decaf377
- no_std: works in constrained environments (wasm, polkavm)
curves
| feature | curve | compatibility |
|---|---|---|
ristretto255 |
curve25519 | polkadot, sr25519 |
pallas |
pallas | zcash orchard |
secp256k1 |
secp256k1 | bitcoin, ethereum |
decaf377 |
decaf377 | penumbra |
usage
use ;
// after DKG, each custodian has a share
let share = new;
// generate contribution (schnorr proof)
let contribution = share.contribute;
// verifier collects t contributions and verifies
let valid = verify?;
resharing
rotate custodian sets while preserving the group public key:
use ;
// old custodians become dealers
let dealer = new;
let commitment = dealer.commitment;
let subshare = dealer.generate_subshare;
// new custodians aggregate subshares
let mut aggregator = new;
aggregator.add_subshare?;
let new_share = aggregator.finalize?;
modules
osst- core OSST identification protocolosst::reshare- proactive secret sharingosst::liveness- checkpoint proofs for custodian participationosst::curve- curve backend traits
license
MIT OR Apache-2.0