Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 1997 - 2007 Pekka Riikonen
+ Copyright (C) 1997 - 2008 Pekka Riikonen
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
*
* DESCRIPTION
*
- * Cipher modes.
+ * Cipher modes. Notes about cipher modes and implementation:
+ *
+ * SILC_CIPHER_MODE_CBC
+ *
+ * The Cipher-block Chaining mode. The CBC is mode is a standard CBC
+ * mode. The plaintext length must be multiple by the cipher block size.
+ * If it isn't the plaintext must be padded.
+ *
+ * SILC_CIPHER_MODE_CTR
+ *
+ * The Counter mode. The CTR is normal counter mode. The CTR mode does
+ * not require the plaintext length to be multiple by the cipher block
+ * size. If the last plaintext block is shorter the remaining bits of
+ * the key stream are used next time silc_cipher_encrypt is called. If
+ * silc_cipher_set_iv is called it will reset the counter for a new block
+ * (discarding any remaining bits from previous key stream). The counter
+ * mode expects MSB first ordered counter. Note also, the counter is
+ * incremented when silc_cipher_encrypt is called for the first time,
+ * before encrypting.
+ *
+ * SILC_CIPHER_MODE_CFB
+ *
+ * The Cipher Feedback mode. The CFB mode is normal cipher feedback mode.
+ * The CFB mode does not require the plaintext length to be multiple by
+ * the cipher block size. If the last plaintext block is shorter the
+ * remaining bits of the stream are used next time silc_cipher_encrypt is
+ * called. If silc_cipher_set_iv is called it will reset the feedback
+ * for a new block (discarding any remaining bits from previous stream).
+ *
+ * SILC_CIPHER_MODE_OFB
+ *
+ * The Output Feedback mode.
+ *
+ * SILC_CIPHER_MODE_ECB
+ *
+ * The Electronic Codebook mode. This mode does not provide sufficient
+ * security and should not be used.
+ *
+ * Each mode modifies the IV (initialization vector) of the cipher when
+ * silc_cipher_encrypt or silc_cipher_decrypt is called. The IV may be
+ * set/reset by calling silc_cipher_set_iv and the current IV can be
+ * retrieved by calling silc_cipher_get_iv.
*
* SOURCE
*/
*
* SYNOPSIS
*
- * SilcBool silc_cipher_alloc(const unsigned char *name,
+ * SilcBool silc_cipher_alloc(const char *name,
* SilcCipher *new_cipher);
*
* DESCRIPTION
*
* Notes about modes:
*
- * The CTR is normal counter mode. The CTR mode does not require the
- * plaintext length to be multiple by the cipher block size. If the last
- * plaintext block is shorter the remaining bits of the key stream are
- * used next time silc_cipher_encrypt is called. If silc_cipher_set_iv
- * is called it will reset the counter for a new block (discarding any
- * remaining bits from previous key stream). The counter mode expects
- * MSB first ordered counter. Note also, the counter is incremented when
- * silc_cipher_encrypt is called for the first time, before encrypting.
- *
- * The CBC is mode is a standard CBC mode. The plaintext length must be
- * multiple by the cipher block size. If it isn't the plaintext must be
- * padded.
- *
***/
-SilcBool silc_cipher_alloc(const unsigned char *name, SilcCipher *new_cipher);
+SilcBool silc_cipher_alloc(const char *name, SilcCipher *new_cipher);
/****f* silccrypt/SilcCipherAPI/silc_cipher_free
*
*
* SYNOPSIS
*
- * SilcBool silc_cipher_is_supported(const unsigned char *name);
+ * SilcBool silc_cipher_is_supported(const char *name);
*
* DESCRIPTION
*
* Returns TRUE if cipher `name' is supported.
*
***/
-SilcBool silc_cipher_is_supported(const unsigned char *name);
+SilcBool silc_cipher_is_supported(const char *name);
/****f* silccrypt/SilcCipherAPI/silc_cipher_get_supported
*
* SYNOPSIS
*
* SilcBool silc_cipher_set_key(SilcCipher cipher, const unsigned char *key,
- * SilcUInt32 keylen, SilcBool encryption);
+ * SilcUInt32 bit_keylen, SilcBool encryption);
*
* DESCRIPTION
*
*
***/
SilcBool silc_cipher_set_key(SilcCipher cipher, const unsigned char *key,
- SilcUInt32 keylen, SilcBool encryption);
+ SilcUInt32 bit_keylen, SilcBool encryption);
/****f* silccrypt/SilcCipherAPI/silc_cipher_set_iv
*
*
* DESCRIPTION
*
- * Sets the IV (initial vector) for the cipher. The `iv' must be
+ * Sets the IV (initialization vector) for the cipher. The `iv' must be
* the size of the block size of the cipher. If `iv' is NULL this
* does not do anything.
*
* If the encryption mode is CTR (Counter mode) this also resets the
* the counter for a new block. This is done also if `iv' is NULL.
*
+ * If the encryption mode is CFB (cipher feedback) this also resets the
+ * the feedback stream for a new block. This is done also if `iv' is NULL.
+ *
***/
void silc_cipher_set_iv(SilcCipher cipher, const unsigned char *iv);