Crypto++ is a free C++ class library of cryptographic schemes. Currently the library consists of the following, some of which are other people's code, repackaged into classes. a class hierarchy with an API defined by abstract base classes Proposed AES (Rijndael) and other AES candidates: RC6, MARS, Twofish, Serpent, CAST-256 other symmetric block ciphers: IDEA, DES, Triple DES (DES-EDE2 and DES-EDE3), DESX (DES-XEX3), RC2, RC5, Blowfish, Diamond2, TEA, SAFER, 3-WAY, GOST, SHARK, CAST-128, Square, Skipjack generic cipher modes: CBC padded, CBC ciphertext stealing (CTS), CFB, OFB, counter mode stream ciphers: Panama, ARC4, SEAL, WAKE, Sapphire II, BlumBlumShub public key cryptography: RSA, DSA, ElGamal, Nyberg-Rueppel (NR), BlumGoldwasser, Rabin, Rabin-Williams (RW), LUC, LUCELG padding schemes for public-key systems: PKCS#1 v2.0, OAEP, PSSR, IEEE P1363 EMSA2 key agreement schemes: Diffie-Hellman (DH), Unified Diffie-Hellman (DH2), Menezes-Qu-Vanstone (MQV), LUCDIF, XTR-DH elliptic curve cryptography: ECDSA, ECNR, ECIES, ECDHC, ECMQVC one-way hash functions: SHA-1, MD2, MD4, MD5, HAVAL, RIPEMD-160, Tiger, SHA-2 (SHA-256, SHA-384, and SHA-512), Panama message authentication codes: MD5-MAC, HMAC, XOR-MAC, CBC-MAC, DMAC cipher constructions based on hash functions: Luby-Rackoff, MDC pseudo random number generators (PRNG): ANSI X9.17 appendix C, PGP's RandPool Shamir's secret sharing scheme and Rabin's information dispersal algorithm (IDA) DEFLATE (RFC 1951) compression/decompression with gzip (RFC 1952) and zlib (RFC 1950) format support fast multi-precision integer (bignum) and polynomial operations finite field arithmetics, including GF(p) and GF(2^n) prime number generation and verification various miscellaneous modules such as base 64 coding and 32-bit CRC class wrappers for these operating system features (optional): high resolution timers on Windows, Unix, and MacOS Berkeley and Windows style sockets Windows named pipes /dev/random and /dev/urandom on Linux and FreeBSD Microsoft's CryptGenRandom on Windows A high level interface for most of the above, using a filter/pipeline metaphor benchmarks and validation testing One purpose of Crypto++ is to act as a repository of public domain (not copyrighted) source code. Although the library is copyrighted as a compilation, the individual files in it (except for a few exceptions listed in the license) are in the public domain. |