/*
 * Copyright (C) 2013 Freie Universität Berlin
 *
 * This file is subject to the terms and conditions of the GNU Lesser
 * General Public License v2.1. See the file LICENSE in the top level
 * directory for more details.
 */

/**
 * @defgroup    sys_crypto Crypto
 * @ingroup     sys
 *
 * @brief       RIOT provides a collection of block cipher ciphers, different
   operation modes and cryptographic hash algorithms.
 *
 * @section ciphers Ciphers
 *
 * RIOT supports the following block ciphers:
 *  * AES-128
 *  * 3DES (deprecated)
 *  * NULL
 *
 * You can use them directly by adding `crypto_aes` or `crypto_3des` to your
 * USEMODULE-List.
 * While you can use the ciphers functions directly, you should resort to
 * the generic API for block ciphers whenever possible.
 *
 * Depending on the selected block ciphers, a sufficient large buffer size of
 * the cipher_context_t is used for en-/de-cryption operations.
 *
 * Example:
 * @code
 *  #include "crypto/ciphers.h"
 *
 *  cipher_t cipher;
 *  uint8_t key[AES_KEY_SIZE] = {0},
 *          plain_text[AES_BLOCK_SIZE] = {0},
 *          cipher_text[AES_BLOCK_SIZE] = {0};
 *
 *  if (cipher_init(&cipher, CIPHER_AES_128, key, AES_KEY_SIZE) < 0)
 *      printf("Cipher init failed!\n");
 *
 *  if (cipher_encrypt(&cipher, plain_text, cipher_text) < 0)
 *      printf("Cipher encryption failed!\n");
 *  else
 *      od_hex_dump(cipher_text, AES_BLOCK_SIZE, 0);
 *
 * @endcode
 *
 * Some aspects of the AES implementation can be fine tuned by pseudo-modules:
 *  * crypto_aes_precalculated: Use pre-calculated T-tables. This improved
 *       speed at the expense of increased program size. The default is to
 *       calculate most tables on the fly.
 *  * crypto_aes_unroll: enable manually-unrolled loops. The default is to not
 *       have them unrolled.
 *
 * If you need to encrypt data of arbitrary size take a look at the different
 * operation modes like: CBC, CTR or CCM.
 *
 * Additional examples can be found in the test suite.
 *
 */
