Skip to content

TypeScript implementation of FROST (RFC 9591) threshold signatures. Supporting Ed25519, secp256k1, P-256, Ristretto255, Ed448, and Taproot.

License

Notifications You must be signed in to change notification settings

leonardocustodio/frosts

Repository files navigation

frosTS - FROST for TypeScript

Version TypeScript Monorepo Package Manager RFC 9591 Status

🧊 Community Implementation: This is a TypeScript port of the ZcashFoundation/frost library. It implements RFC 9591: Two-Round Threshold Schnorr Signatures with FROST.

⚠️ Disclaimer: This is an independent project created for personal learning. It has not been audited and is not ready for production use. For production applications, please use the audited Rust implementation by the Zcash Foundation.

Overview

FROST (Flexible Round-Optimized Schnorr Threshold) is a threshold signature scheme that allows a group of participants to collaboratively generate Schnorr signatures without any single party holding the complete private key. Key features include:

  • Threshold Security: t-of-n signing where any t participants can sign, but fewer than t learn nothing
  • Two-Round Protocol: Efficient signing with only two communication rounds
  • Distributed Key Generation: Built-in DKG protocol for decentralized key setup
  • Multiple Curves: Support for Ed25519, Ed448, P-256, secp256k1, Ristretto255, and Taproot

📚 Resources

📦 Packages

Package Description
@frosts/core Core types, traits, and generic FROST protocol implementation. Provides the foundation for all ciphersuite packages. 🦀 Rust | 📖 Docs
@frosts/ed25519 FROST with Ed25519-SHA512. The most widely used curve for signatures, compatible with SSH keys and many blockchain protocols. 🦀 Rust | 📖 Docs
@frosts/ed448 FROST with Ed448-SHAKE256. Higher security margin (224-bit) for applications requiring stronger guarantees. 🦀 Rust | 📖 Docs
@frosts/p256 FROST with P-256-SHA256. NIST standard curve, widely supported in hardware security modules and enterprise systems. 🦀 Rust | 📖 Docs
@frosts/ristretto255 FROST with Ristretto255-SHA512. Prime-order group built on Curve25519, eliminates cofactor issues. 🦀 Rust | 📖 Docs
@frosts/secp256k1 FROST with secp256k1-SHA256. Bitcoin and Ethereum compatible curve for blockchain applications. 🦀 Rust | 📖 Docs
@frosts/secp256k1-tr FROST with secp256k1 + Taproot (BIP-340). Bitcoin Taproot compatible with x-only public keys. 🦀 Rust | 📖 Docs
@frosts/rerandomized Re-randomized FROST variant with unlinkable signatures. Signatures cannot be correlated across signing sessions. 🦀 Rust | 📖 Docs

👥 Credits

This TypeScript implementation is a port of the excellent work by the Zcash Foundation FROST team. The original FROST paper was authored by Chelsea Komlo and Ian Goldberg.

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

See SECURITY-REVIEW.md for how to contribute a security audit.

🔐 Security Disclosure

Found a vulnerability? We'd really appreciate you letting us know privately at security@snowpine.io - please avoid opening public issues for security concerns.

Contact Fingerprint
security@snowpine.io C018 7736 F305 EF8C 425C 25DB F859 D6F9 A6DE B25A

📄 License

This project is licensed under the MIT License – see the LICENSE file for details.

About

TypeScript implementation of FROST (RFC 9591) threshold signatures. Supporting Ed25519, secp256k1, P-256, Ristretto255, Ed448, and Taproot.

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Languages