pidgin/android/libpurple

ciphers cleanup: get key size

2013-05-05, Tomasz Wasilczyk
5749f2724b12
Parents 773899cbd05a
Children a924aacd5a37
ciphers cleanup: get key size
--- a/libpurple/cipher.c Sun May 05 14:59:11 2013 +0200
+++ b/libpurple/cipher.c Sun May 05 15:37:25 2013 +0200
@@ -108,6 +108,8 @@
caps |= PURPLE_CIPHER_CAPS_GET_SALT_SIZE;
if(ops->set_key)
caps |= PURPLE_CIPHER_CAPS_SET_KEY;
+ if (ops->get_key_size)
+ caps |= PURPLE_CIPHER_CAPS_GET_KEY_SIZE;
if(ops->set_batch_mode)
caps |= PURPLE_CIPHER_CAPS_SET_BATCH_MODE;
if(ops->get_batch_mode)
@@ -570,6 +572,25 @@
"set_key operation\n", cipher->name);
}
+size_t
+purple_cipher_context_get_key_size(PurpleCipherContext *context) {
+ PurpleCipher *cipher = NULL;
+
+ g_return_val_if_fail(context, 0);
+
+ cipher = context->cipher;
+ g_return_val_if_fail(cipher, 0);
+
+ if (cipher->ops && cipher->ops->get_key_size)
+ return cipher->ops->get_key_size(context);
+ else {
+ purple_debug_warning("cipher", "the %s cipher does not support "
+ "the get_key_size operation\n", cipher->name);
+
+ return 0;
+ }
+}
+
void
purple_cipher_context_set_batch_mode(PurpleCipherContext *context,
PurpleCipherBatchMode mode)
--- a/libpurple/cipher.h Sun May 05 14:59:11 2013 +0200
+++ b/libpurple/cipher.h Sun May 05 15:37:25 2013 +0200
@@ -50,24 +50,25 @@
* The operation flags for a cipher
*/
typedef enum {
- PURPLE_CIPHER_CAPS_SET_OPT = 1 << 1, /**< Set option flag */
- PURPLE_CIPHER_CAPS_GET_OPT = 1 << 2, /**< Get option flag */
- PURPLE_CIPHER_CAPS_INIT = 1 << 3, /**< Init flag */
- PURPLE_CIPHER_CAPS_RESET = 1 << 4, /**< Reset flag */
- PURPLE_CIPHER_CAPS_UNINIT = 1 << 5, /**< Uninit flag */
- PURPLE_CIPHER_CAPS_SET_IV = 1 << 6, /**< Set IV flag */
- PURPLE_CIPHER_CAPS_APPEND = 1 << 7, /**< Append flag */
- PURPLE_CIPHER_CAPS_DIGEST = 1 << 8, /**< Digest flag */
+ PURPLE_CIPHER_CAPS_SET_OPT = 1 << 1, /**< Set option flag */
+ PURPLE_CIPHER_CAPS_GET_OPT = 1 << 2, /**< Get option flag */
+ PURPLE_CIPHER_CAPS_INIT = 1 << 3, /**< Init flag */
+ PURPLE_CIPHER_CAPS_RESET = 1 << 4, /**< Reset flag */
+ PURPLE_CIPHER_CAPS_UNINIT = 1 << 5, /**< Uninit flag */
+ PURPLE_CIPHER_CAPS_SET_IV = 1 << 6, /**< Set IV flag */
+ PURPLE_CIPHER_CAPS_APPEND = 1 << 7, /**< Append flag */
+ PURPLE_CIPHER_CAPS_DIGEST = 1 << 8, /**< Digest flag */
PURPLE_CIPHER_CAPS_GET_DIGEST_SIZE = 1 << 9, /**< The get digest size flag */
- PURPLE_CIPHER_CAPS_ENCRYPT = 1 << 10, /**< Encrypt flag */
- PURPLE_CIPHER_CAPS_DECRYPT = 1 << 11, /**< Decrypt flag */
- PURPLE_CIPHER_CAPS_SET_SALT = 1 << 12, /**< Set salt flag */
- PURPLE_CIPHER_CAPS_GET_SALT_SIZE = 1 << 13, /**< Get salt size flag */
- PURPLE_CIPHER_CAPS_SET_KEY = 1 << 14, /**< Set key flag */
- PURPLE_CIPHER_CAPS_SET_BATCH_MODE = 1 << 15, /**< Set batch mode flag */
- PURPLE_CIPHER_CAPS_GET_BATCH_MODE = 1 << 16, /**< Get batch mode flag */
- PURPLE_CIPHER_CAPS_GET_BLOCK_SIZE = 1 << 17, /**< The get block size flag */
- PURPLE_CIPHER_CAPS_UNKNOWN = 1 << 18 /**< Unknown */
+ PURPLE_CIPHER_CAPS_ENCRYPT = 1 << 10, /**< Encrypt flag */
+ PURPLE_CIPHER_CAPS_DECRYPT = 1 << 11, /**< Decrypt flag */
+ PURPLE_CIPHER_CAPS_SET_SALT = 1 << 12, /**< Set salt flag */
+ PURPLE_CIPHER_CAPS_GET_SALT_SIZE = 1 << 13, /**< Get salt size flag */
+ PURPLE_CIPHER_CAPS_SET_KEY = 1 << 14, /**< Set key flag */
+ PURPLE_CIPHER_CAPS_GET_KEY_SIZE = 1 << 15, /**< Get key size flag */
+ PURPLE_CIPHER_CAPS_SET_BATCH_MODE = 1 << 16, /**< Set batch mode flag */
+ PURPLE_CIPHER_CAPS_GET_BATCH_MODE = 1 << 17, /**< Get batch mode flag */
+ PURPLE_CIPHER_CAPS_GET_BLOCK_SIZE = 1 << 18, /**< The get block size flag */
+ PURPLE_CIPHER_CAPS_UNKNOWN = 1 << 19 /**< Unknown */
} PurpleCipherCaps;
/**
@@ -116,6 +117,9 @@
/** The set key function */
void (*set_key)(PurpleCipherContext *context, const guchar *key, size_t len);
+ /** The get key size function */
+ size_t (*get_key_size)(PurpleCipherContext *context);
+
/** The set batch mode function */
void (*set_batch_mode)(PurpleCipherContext *context, PurpleCipherBatchMode mode);
@@ -394,6 +398,15 @@
void purple_cipher_context_set_key(PurpleCipherContext *context, const guchar *key, size_t len);
/**
+ * Gets the size of the key if the cipher supports it
+ *
+ * @param context The context whose key size to get
+ *
+ * @return The size of the key
+ */
+size_t purple_cipher_context_get_key_size(PurpleCipherContext *context);
+
+/**
* Sets the batch mode of a context
*
* @param context The context whose batch mode to set
--- a/libpurple/ciphers/des.c Sun May 05 14:59:11 2013 +0200
+++ b/libpurple/ciphers/des.c Sun May 05 15:37:25 2013 +0200
@@ -351,6 +351,11 @@
}
}
+static size_t
+des_get_key_size(PurpleCipherContext *context)
+{
+ return 8;
+}
/*
* Electronic Codebook Mode DES encryption/decryption of data according
@@ -477,7 +482,7 @@
NULL, /* set salt */
NULL, /* get salt size */
des_set_key, /* set key */
- NULL, /* get key size */
+ des_get_key_size, /* get key size */
NULL, /* set batch mode */
NULL, /* get batch mode */
NULL, /* get block size */
@@ -527,6 +532,12 @@
}
}
+static size_t
+des3_get_key_size(PurpleCipherContext *context)
+{
+ return 24;
+}
+
static gint
des3_ecb_encrypt(struct _des3_ctx *ctx, const guchar data[],
size_t len, guchar output[], size_t *outlen)
@@ -830,6 +841,7 @@
NULL, /* set salt */
NULL, /* get salt size */
des3_set_key, /* set key */
+ des3_get_key_size, /* get_key_size */
des3_set_batch, /* set batch mode */
des3_get_batch, /* get batch mode */
NULL, /* get block size */
--- a/libpurple/ciphers/gchecksum.c Sun May 05 14:59:11 2013 +0200
+++ b/libpurple/ciphers/gchecksum.c Sun May 05 15:37:25 2013 +0200
@@ -121,6 +121,7 @@
NULL, /* set salt */ \
NULL, /* get salt size */ \
NULL, /* set key */ \
+ NULL, /* get key size */ \
NULL, /* set batch mode */ \
NULL, /* get batch mode */ \
lower##_get_block_size, /* get block size */ \
--- a/libpurple/ciphers/hmac.c Sun May 05 14:59:11 2013 +0200
+++ b/libpurple/ciphers/hmac.c Sun May 05 15:37:25 2013 +0200
@@ -216,6 +216,7 @@
NULL, /* set salt */
NULL, /* get salt size */
hmac_set_key, /* set key */
+ NULL, /* get key size */
NULL, /* set batch mode */
NULL, /* get batch mode */
hmac_get_block_size, /* get block size */
--- a/libpurple/ciphers/md4.c Sun May 05 14:59:11 2013 +0200
+++ b/libpurple/ciphers/md4.c Sun May 05 15:37:25 2013 +0200
@@ -289,6 +289,7 @@
NULL, /* set salt */
NULL, /* get salt size */
NULL, /* set key */
+ NULL, /* get key size */
NULL, /* set batch mode */
NULL, /* get batch mode */
md4_get_block_size, /* get block size */
--- a/libpurple/ciphers/rc4.c Sun May 05 14:59:11 2013 +0200
+++ b/libpurple/ciphers/rc4.c Sun May 05 15:37:25 2013 +0200
@@ -143,6 +143,7 @@
NULL, /* set salt */
NULL, /* get salt size */
rc4_set_key, /* set key */
+ NULL, /* get key size */
NULL, /* set batch mode */
NULL, /* get batch mode */
NULL, /* get block size */