Q: What is Charm?
Charm is a framework for rapidly prototyping new cryptographic schemes and protocols. The design philosophy of Charm is to remove the barriers that make it difficult for researchers and developers to implement their work. Charm accomplishes this by providing a framework based around a high-level language (Python) and a set of tools that handle many of the difficult aspects of cryptographic development.
Q: Who should use Charm?
This first release of Charm is targeted at cryptographers and computer security researchers. However we hope that someday in the not-too-distant future Charm will also be useful to open source and commercial software developers.
Q: What’s wrong with existing development approaches?
Many cryptographic libraries are written in C or C++ because these languages are relatively ‘low-level’ and are perceived to offer performance benefits. This is accurate in some cases. However, these languages tend to impose barriers that complicate the development of cryptosystems. Charm is designed from the ground up to facilitate cryptographic development using re-usable components.
Q: Why Python?
Charm is based on the Python programming language, with some performance-critical modules written in C. Python provides a number of useful features that simplify the development of cryptographic schemes, including loose typing, flexible data structures and operator overloading. Moreover Python programs are relatively free of clutter. The language is well supported and can be used in a variety of environments.
Q: Is Charm just a crypto library?
Charm is a framework for developing cryptosystems. It ships with a library (“toolbox”) of re-usable code, but it also includes infrastructure to assist cryptographic implementers. These include tools for combining primitives, an interactive protocol engine and a zero-knowledge proof compiler.
Q: Can Charm code be used in applications?
Yes. Charm schemes can be incorporated into C and C++ programs. We are currently working to incorporate Charm code into Java programs via the Jython compiler.