/**

@defgroup CryptoKernel Cryptographic Kernel

All of the cryptographic functions are contained in a kernel.

*/

/**

@defgroup CipherImplementations Ciphers
@ingroup  CryptoKernel

@brief A generic cipher type enables cipher agility, that is, the
ability to write code that runs with multiple cipher types.
Ciphers can be used through the crypto kernel, or can be accessed
directly, if need be.

@{

*/

/**
 * @brief Allocates a cipher of a particular type.
 * @warning May be implemented as a macro.
 */
err_status_t
cipher_type_alloc(cipher_type_t *ctype, cipher_t **cipher, 
                        unsigned key_len);

/**
 * @brief Initialized a cipher to use a particular key.  May
 *       be invoked more than once on the same cipher.
 * @warning May be implemented as a macro.
 */

err_status_t
cipher_init(cipher_t *cipher, const uint8_t *key);

/**
 * @brief Sets the initialization vector of a given cipher.
 * @warning May be implemented as a macro.
 */

err_status_t
cipher_set_iv(cipher_t *cipher, void *iv);

/**
 * @brief Encrypts a buffer with a given cipher.
 * @warning May be implemented as a macro.
 */                           

err_status_t
cipher_encrypt(cipher_t *cipher, void *buf, unsigned int *len);

/**
 * @brief Sets a buffer to the keystream generated by the cipher.
 * @warning May be implemented as a macro.
 */
err_status_t 
cipher_output(cipher_t *c, uint8_t *buffer, int num_octets_to_output);

/**
 * @brief Deallocates a cipher.
 * @warning May be implemented as a macro.
 */
err_status_t
cipher_dealloc(cipher_t *cipher);



/**
 * @} 
 */

 */