User Guide: Header Files
Crypto++ implements a large number of cryptographic schemes that have similar properties and behavior, but are largely independent from each other.
Consequentially, Crypto++ defines a number of common base classes from which most of the algorithm implementations inherit: you will encounter these classes in all programs that use Crypto++. Often, the headers in which these basic abstractions are declared do not have to be included explicitly, as they are automatically included in the more specific header files.
On the other hand, each separate algorithm that you need to implement is usually declared in its own header file that you need to include explicitly. Exactly which header file you need to include is sometimes obvious, and sometimes not. For the cases when it is not, this section describes the most important header files in Crypto++.
As a matter of convenience, we will divide Crypto++ header files into the following groups:
Crypto++ Infrastructure Header Files:
Provides basic abstractions for the Crypto++ library. These include: Exception, BufferedTransformation, BlockTransformation, StreamCipher, RandomAccessStreamCipher, RandomNumberGenerator, HashTransformation, MessageAuthenticationCode, and public key crypto base classes.
If Crypto++ had a most important header file, then cryptlib.h would be it. Nearly all classes defined by Crypto++ derive from base classes defined in cryptlib.h. When you need to figure out how to use one of the derived classes, your best bet is to find the relevant base class in cryptlib.h.
filters.h may be the second most important header file in Crypto++. A large number of classes in Crypto++ derive from Filter, which is an especially useful type of BufferedTransformation because of its attachment functionality. In order to make elegant and efficient use of Crypto++, you need to be acquainted with the Filter class, as well as derived classes such as StringSource, StringSink, FileSource and FileSink (declared in files.h).
|oids.h||Defines specific object identifiers (OIDs) that are needed by or can be used on various classes throughout the library.|
|files.h||Defines classes FileStore, FileSource and FileSink (derived from Store, Source and Sink).|
|network.h||Defines base classes NonblockingSource, NonblockingSink; base classes NetworkReceiver, NetworkSender; and finally, NetworkSource and NetworkSink.|
|socketft.h||Encapsulates network sockets and provides Crypto++ source and sink classes for them. The following types are defined: Socket, SocketSource, SocketSink. Support for Berkeley-style as well as Windows-style sockets is provided.|
|misc.h||A bunch of bit and byte manipulating functions like BytePrecision(), bitReverse(), etc. Also defines template class SecBlock, a somewhat secure memory management class used for rudimentary protection of sensitive data in Crypto++.|
|smartptr.h||Definitions for various types of smart pointer types used in Crypto++: member_ptr, value_ptr, clonable_ptr, counted_ptr, vector_member_ptrs.|
Data Manipulation Header Files:
|base64.h||Provides classes Base64Encoder and Base64Decoder, both derived from Filter.|
|hex.h||Provides classes HexEncoder and HexDecoder, both derived from Filter.|
|gzip.h||Provides compression and decompression classes Gzip and Gunzip. Both classes inherit indirectly from Filter.|
|zlib.h||Provides compression and decompression classes ZlibCompressor and ZlibDecompressor. Both classes inherit indirectly from Filter.|
All classes provided in the above header files are very much alike, hence only base64.h is discussed as an example.
Random Number Generation
Random Number Generation Header Files:
|randpool.h||Defines RandomPool, a particularly useful type of RandomNumberGenerator. Given a quality random seed, this class uses hashing to provide virtually unlimited amounts of cryptographically strong pseudo random data.|
|osrng.h||Encapsulates platform-specific hooks for obtaining quality random data (classes NonblockingRng and BlockingRng). Provides AutoSeededRandomPool, a derivative of RandomPool that seeds itself automatically using BlockingRng or NonblockingRng, whichever is available.|
Hash Functions and MACs
Hash Function and MAC Header Files:
|sha.h||Defines classes to implement various types of the SHA hash function: class SHA for SHA-1 and classes SHA256, SHA384 and SHA512 for SHA-2.|
|ripemd.h||Provides the RIPEMD160 class, implementing European Union's RIPEMD-160 hash function.|
|hmac.h||Defines HMAC, a one-way hash function MAC.|
|trunhash.h||Defines TruncatedHashTransformation, which, enveloped around a regular hash module, produces a shorter message digest; and class NullHash, a hash module that does nothing - that is, has a zero-length digest.|
See also: HashTransformation.
Block Cipher Header Files:
|default.h||Defines DefaultEncryptor, DefaultDecryptor, DefaultEncryptorWithMAC and DefaultDecryptorWithMAC. These classes currently provide a complete default implentation of Triple-DES encryption, including passphrase mashing, IV generation, block chaining (CBC) and message integrity (...WithMAC variants only).|
|modes.h||Provides interfaces for use of block ciphers in CFB mode (classes CFBEncryption and CFBDecryption), OFB mode (class OFB), Counter mode (class CounterMode), and PGP CFB mode (classes PGP_CFBEncryption and PGP_CFBDecryption).|
|cbc.h||Provides interfaces for use of block ciphers in raw CBC mode (classes CBCRawEncryptor and CBCRawDecryptor), padded CBC mode (classes CBCPaddedEncryptor and CBCPaddedDecryptor) and CBC with ciphertext stealing mode (classes CBC_CTS_Encryptor and CBC_CTS_Decryptor).|
|aes.h||Provides typedefs AESEncryption and AESDecryption mapping to RijndaelEncryption and RijndaelDecryption classes. [#indirectly *]|
|rijndael.h||Defines RijndaelEncryption and RijndaelDecryption classes. [#indirectly *]|
|twofish.h||Defines TwofishEncryption and TwofishDecryption classes. [#indirectly *]|
|blowfish.h||Defines BlowfishEncryption and BlowfishDecryption classes. [#indirectly *]|
|idea.h||Defines IDEAEncryption and IDEADecryption classes. [#indirectly *]|
|cast.h||Defines classes for CAST with a 32..128-bit key (CAST128Encryption, CAST128Decryption) and with a 128...256-bit key (CAST256Encryption, CAST256Decryption). [#indirectly *]|
Provides classes for:
- These classes should not be used directly, but rather indirectly via one of the block-cipher mode classes.
Stream Cipher Header Files:
|arc4.h||Defines class ARC4 - implementation of a stream cipher compatible with RSA Data Security's RC4 algorithm. The name ARC4 is used because the name RC4 is trademarked. The class inherits from StreamCipher and RandomNumberGenerator.|
|seal.h||Defines class SEAL; inherits from RandomAccessStreamCipher and RandomNumberGenerator.|
Public Key Cryptosystems
Public Key Cryptosystem Header Files:
Defines class DH, providing an interface for Diffie-Hellman key agreement.
Defines classes ElGamalEncryptor and ElGamalDecryptor, representing an El-Gamal public and private key, respectively.
Defines class MQV, providing an interface for Menezes-Qu-Vanstone key agreement.
Defines classes RWSigner and RWVerifier, representing a Rabin-Williams private and public key, respectively.
Defines class XTR_DH, providing an interface for XTR Diffie-Hellman key agreement.
To find other topics in the User Guide, visit Category:User Guide.