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
* 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
*/
typedef enum {
*
* SYNOPSIS
*
- * SilcBool silc_cipher_alloc(const unsigned char *name,
+ * SilcBool silc_cipher_alloc(const char *name,
* SilcCipher *new_cipher);
*
* DESCRIPTION
*
- * Allocates a new SILC cipher object. Function returns 1 on succes and 0
- * on error. The allocated cipher is returned in new_cipher argument. The
- * caller must set the key to the cipher after this function has returned
- * by calling the ciphers set_key function.
+ * Allocates a new SILC cipher object. Function returns TRUE on succes
+ * and FALSE on error. The allocated cipher is returned in new_cipher
+ * argument. The caller must set the key to the cipher after this
+ * function has returned by calling the silc_cipher_set_key.
*
* The following ciphers are supported:
*
* Notes about modes:
*
***/
-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_alloc
+ *
+ * SYNOPSIS
+ *
+ * SilcBool silc_cipher_alloc_full(const char *alg_name,
+ * SilcUInt32 key_len,
+ * SilcCipherMode mode,
+ * SilcCipher *new_cipher);
+ * DESCRIPTION
+ *
+ * Same as silc_cipher_alloc but takes the cipher algorithm name,
+ * key length and mode as separate arguments.
+ *
+ ***/
+SilcBool silc_cipher_alloc_full(const char *alg_name, SilcUInt32 key_len,
+ SilcCipherMode mode, 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);
*
* DESCRIPTION
*
- * Returns the name of the cipher.
+ * Returns the full name of the cipher (eg. 'aes-256-ctr').
*
***/
const char *silc_cipher_get_name(SilcCipher cipher);
+/****f* silccrypt/SilcCipherAPI/silc_cipher_get_alg_name
+ *
+ * SYNOPSIS
+ *
+ * const char *silc_cipher_get_alg_name(SilcCipher cipher);
+ *
+ * DESCRIPTION
+ *
+ * Returns the algorithm name of the cipher (eg. 'aes').
+ *
+ ***/
+const char *silc_cipher_get_alg_name(SilcCipher cipher);
+
/****f* silccrypt/SilcCipherAPI/silc_cipher_get_mode
*
* SYNOPSIS