Next: , Previous: , Up: Architecture   [Contents][Index]


17.2 Symmetric Encryption Subsystem Architecture

The interface to work with symmetric encryption algorithms is made up of functions from the gcry_cipher_ name space. The implementation follows the open-use-close paradigm and uses registered algorithm modules for the actual work. Unless a module implements optimized cipher mode implementations, the high level code (cipher/cipher.c) implements the modes and calls the core algorithm functions to process each block.

The most important functions are:

gcry_cipher_open

Create a new instance to encrypt or decrypt using a specified algorithm and mode.

gcry_cipher_close

Release an instance.

gcry_cipher_setkey

Set a key to be used for encryption or decryption.

gcry_cipher_setiv

Set an initialization vector to be used for encryption or decryption.

gcry_cipher_encrypt
gcry_cipher_decrypt

Encrypt or decrypt data. These functions may be called with arbitrary amounts of data and as often as needed to encrypt or decrypt all data.

There is no strict alignment requirements for data, but the best performance can be archived if data is aligned to cacheline boundary.

There are also functions to query properties of algorithms or context, like block length, key length, map names or to enable features like padding methods.