{"id":50372764,"url":"https://github.com/karpeleslab/tsslib-rs","last_synced_at":"2026-05-30T08:03:14.649Z","repository":{"id":361326954,"uuid":"1254107206","full_name":"KarpelesLab/tsslib-rs","owner":"KarpelesLab","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-30T06:54:46.000Z","size":0,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-30T07:05:39.518Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/KarpelesLab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-30T06:40:28.000Z","updated_at":"2026-05-30T06:54:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/KarpelesLab/tsslib-rs","commit_stats":null,"previous_names":["karpeleslab/tsslib-rs"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/KarpelesLab/tsslib-rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KarpelesLab%2Ftsslib-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KarpelesLab%2Ftsslib-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KarpelesLab%2Ftsslib-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KarpelesLab%2Ftsslib-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KarpelesLab","download_url":"https://codeload.github.com/KarpelesLab/tsslib-rs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KarpelesLab%2Ftsslib-rs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33684419,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-30T08:03:12.873Z","updated_at":"2026-05-30T08:03:14.644Z","avatar_url":"https://github.com/KarpelesLab.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tsslib\n\n[![CI](https://github.com/KarpelesLab/tsslib-rs/actions/workflows/ci.yml/badge.svg)](https://github.com/KarpelesLab/tsslib-rs/actions/workflows/ci.yml)\n[![crates.io](https://img.shields.io/crates/v/tsslib.svg)](https://crates.io/crates/tsslib)\n[![docs.rs](https://img.shields.io/docsrs/tsslib)](https://docs.rs/tsslib)\n\nEasy-to-use threshold signature schemes (TSS) in pure Rust.\n\n`tsslib` is a Rust port of the broker-based protocols in the Go\n[`tss-lib`](https://github.com/KarpelesLab/tss-lib). The goal is to be **wire-\nand save-data-compatible** with the Go implementation: messages serialized by\none side are consumed by the other, and persisted key shares round-trip across\nboth languages. All low-level cryptography is provided by\n[`purecrypto`](https://github.com/KarpelesLab/purecrypto) — this crate adds no\nhand-rolled field arithmetic.\n\n\u003e ⚠️ **Status: early scaffolding.** The core message/identity/error plumbing is\n\u003e in place and tested. The four protocols below are stubs pending the\n\u003e `purecrypto` additions listed at the end of this README.\n\n## Protocols\n\n| Module                   | Scheme                                  | Output                  | Curve / field   |\n|--------------------------|-----------------------------------------|-------------------------|-----------------|\n| `frosttss`               | FROST(Ed25519, SHA-512) — RFC 9591      | Ed25519 signatures      | Edwards25519    |\n| `frostristretto255tss`   | FROST(ristretto255, SHA-512) — RFC 9591 | Ristretto255 signatures | ristretto255    |\n| `mldsatss`               | Threshold ML-DSA-44 — FIPS 204          | ML-DSA signatures       | ML-DSA-44       |\n| `dklstss`                | Threshold ECDSA — DKLs23                | ECDSA signatures        | secp256k1       |\n\nEach protocol provides keygen, signing, and (where applicable) resharing,\nrouted through a caller-supplied [`tss::MessageBroker`]. Each is gated behind a\nlike-named cargo feature, all enabled by default:\n\n```toml\n[dependencies]\ntsslib = { version = \"0.1\", default-features = false, features = [\"frosttss\"] }\n```\n\n## Layout\n\n```\nsrc/\n  tss/        core: PartyId, TssError, JsonMessage, MessageBroker  (implemented)\n  frosttss/                FROST(Ed25519)            (stub)\n  frostristretto255tss/    FROST(ristretto255)       (stub)\n  mldsatss/                Threshold ML-DSA-44       (stub)\n  dklstss/                 Threshold ECDSA (DKLs23)  (stub)\n```\n\n## Security\n\nPeer **authentication** is out of scope: the broker is trusted to authenticate\nmessage origin (pin peer identities, sign transport messages, reject tampered\nbytes). Peer **equivocation** is caught cryptographically where the protocol\nprovides an echo-broadcast phase (DKLs keygen/refresh/reshare). The `mldsatss`\nprotocol is an academic-grade prototype and is **not** production-ready.\n\n## purecrypto requirements\n\nThe protocols here need primitives that `purecrypto` does not yet expose. These\nare the changes to request from the `purecrypto` maintainer, roughly in\ndependency order:\n\n1. **ristretto255 group** (RFC 9496) — entirely missing. Needs group element\n   encode/decode (32-byte canonical), point add/sub, scalar·point and\n   scalar·basepoint, identity/equality checks, and `hash-to-group` /\n   wide-reduce-from-64-bytes. Required by `frostristretto255tss`.\n2. **Exposed Edwards25519 group + scalar arithmetic.** Today `ec::ed25519` only\n   exposes signing; FROST needs public point ops (add, scalar mul, basepoint\n   mul, compressed encode/decode, identity check) and Curve25519 scalar-field\n   ops (add/sub/mul/invert, reduce-from-64-bytes, canonical 32-byte\n   serialization). Required by `frosttss` (and shared with the ristretto work —\n   both groups use the same scalar field).\n3. **Exposed secp256k1 scalar + point arithmetic.** `ec` has the secp256k1\n   curve internally; DKLs needs public scalar field ops and point add/scalar-mul\n   plus compressed SEC1 encode/decode. Required by `dklstss`.\n4. **Oblivious-transfer building blocks** (base-OT + OT-extension) or agreement\n   that these live in `tsslib`. DKLs23 builds its multiplication from OT\n   extension; if `purecrypto` won't host them, they will be implemented here on\n   top of the secp256k1 primitives.\n5. **Low-level ML-DSA-44 primitives** for threshold use: access to the NTT,\n   polynomial/vector types, coefficient sampling, and bit-packing used by FIPS\n   204, so partial signatures can be combined. Required by `mldsatss`.\n\nWhen in doubt, prefer exposing existing internal arithmetic over re-implementing\nit here, to keep a single audited implementation.\n\n## License\n\nMIT — see [LICENSE](LICENSE). Portions © 2019 Binance, © 2024 Karpeles Lab Inc.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkarpeleslab%2Ftsslib-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkarpeleslab%2Ftsslib-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkarpeleslab%2Ftsslib-rs/lists"}