A Python framework for rapidly prototyping advanced cryptosystems like ABE, IBE, threshold ECDSA, and zero-knowledge proofs.
Charm is a Python-based framework for rapidly prototyping and implementing advanced cryptosystems. It provides a comprehensive library of cryptographic schemes, including attribute-based encryption, identity-based encryption, threshold signatures, and zero-knowledge proofs, all designed to reduce development complexity. The framework uses a hybrid architecture where performance-critical operations are in C, while schemes are written in high-level Python for readability and rapid iteration.
Cryptography researchers, security engineers, and developers who need to implement, test, or prototype advanced cryptographic protocols such as ABE, threshold ECDSA, or ZKPs without building everything from scratch.
Developers choose Charm for its extensive, production-ready implementations of cutting-edge cryptosystems, its hybrid design that balances performance and prototyping speed, and its focus on minimizing code complexity to accelerate cryptographic research and development.
Charm: A Framework for Rapidly Prototyping Cryptosystems
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Charm includes production-ready implementations of advanced cryptographic schemes such as ABE, IBE, threshold ECDSA, and BLS signatures, drastically reducing development time for complex protocols.
It uses native C modules for performance-critical mathematical operations while keeping schemes in readable Python, balancing speed and prototyping efficiency, as highlighted in the hybrid design philosophy.
Offers multiple threshold ECDSA protocols (GG18, CGGMP21, DKLS23) with support for secp256k1, enabling secure multi-party computation signing for applications like Bitcoin and XRPL.
Includes a compiler for generating interactive and non-interactive ZKPs, supporting Schnorr proofs and range proofs, which simplifies proof system development without building from scratch.
Installing Charm requires managing multiple system dependencies like GMP, PBC, and OpenSSL, which can be error-prone and time-consuming, especially on non-Linux platforms, as detailed in the prerequisites section.
While it includes production-ready schemes, the framework originates from academia, with documentation and support primarily via GitHub issues, lacking the polish and SLAs of commercial cryptographic libraries.
Default use of the BN254 curve provides only ~128-bit security, which may not meet higher security requirements for some production applications, and switching curves might require additional configuration or code changes.