Introduction
************

GNU Crypto is a free, high-quality, versatile, and provably correct implementation of a wide array of cryptographic primitives and tools written in the Java programming language. It provides an application programmer's interface (API) to a number of cryptographic algorithms, a variety of end-user tools, and a full Java cryptography architecture (JCA) provider.

The algorithms implemented by GNU Crypto include symmetric key ciphers for protecting data, message digests and message authentication codes for proving the integrity of data, digital signature schemes for proving the authenticity of data, and algorithms for generating unguessable pseudo-random numbers. The API is deliberately designed to be low-level, with access to the bare innards of the cryptographic algorithms involved, so more complex libraries and programs can be built.

GNU Crypto does not implement any algorithms that are encumbered by patents, and does not rely on any non-free code or documentation. GNU Crypto is designed to run in any Java environment that is compatible with Sun's Java runtime version 1.2 or later. This includes GNU Classpath, a free software implementation of the Java class libraries, and free virtual machines such as Kissme, Japhar, Kaffe, and the Jikes RVM.

This manual covers the basics for using the GNU Crypto API in new Java programs. It describes the public API for all the implemented algorithms, describes which algorithms are implemented, and provides simple examples of each. The reader is assumed to have some knowledge about cryptography and the Java programming language.

This is not a reference about cryptography, the Java programming language, or the Java cryptography architecture API. For an introduction to cryptography, we recommend the following books:

  * Bruce Schneier, Applied Cryptography: Protocols, Algorithms, and Source Code in C, Second Edition [Sch95].

  * Alfred J. Menezes, Paul C. Van Oorschot, and Scott A. Vanstone, Handbook of Applied Cryptography [MOV96].

The JCA API documentation is available on-line from either Sun Microsystems (http://java.sun.com/products/jce/doc/apidoc/) or the Legion of the Bouncy Castle (http://www.bouncycastle.org/docs/index.html). There are copious references about the Java programming language available (although, as far as the author is aware, no free manuals are available at the time of writing).

GNU Crypto is always available on the web from http://www.gnu.org/software/gnu-crypto/, via anonymous FTP from ftp://ftp.gnupg.org/gcrypt/gnu-crypto/. The mailing list for bugs, help, and discussion is gnu-crypto-discuss@gnu.org, and additional information about the project is available on Savannah at http://savannah.gnu.org/projects/gnu-crypto/.

``Java'' is a registered trademark of Sun Microsystems.