aboutsummaryrefslogtreecommitdiff
path: root/src/common/aes.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2012-03-20 15:35:43 -0400
committerNick Mathewson <nickm@torproject.org>2012-03-27 22:37:56 -0400
commitde0dca0de76d9d50aeb5955fe3f435c6c190f8d7 (patch)
tree8d7005e768bc04ac1695b72cf3970d552570016f /src/common/aes.c
parent00b4784575c88d5de15886b440096c1e2b9fb080 (diff)
downloadtor-de0dca0de76d9d50aeb5955fe3f435c6c190f8d7.tar.gz
tor-de0dca0de76d9d50aeb5955fe3f435c6c190f8d7.zip
Refactor the API for setting up a block cipher.
It allows us more flexibility on the backend if the user needs to specify the key and IV at setup time.
Diffstat (limited to 'src/common/aes.c')
-rw-r--r--src/common/aes.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/common/aes.c b/src/common/aes.c
index cfd931fab1..3121891068 100644
--- a/src/common/aes.c
+++ b/src/common/aes.c
@@ -209,14 +209,22 @@ _aes_fill_buf(aes_cnt_cipher_t *cipher)
}
}
+static void aes_set_key(aes_cnt_cipher_t *cipher, const char *key,
+ int key_bits);
+static void aes_set_iv(aes_cnt_cipher_t *cipher, const char *iv);
+
/**
- * Return a newly allocated counter-mode AES128 cipher implementation.
+ * Return a newly allocated counter-mode AES128 cipher implementation,
+ * using the 128-bit key <b>key</b> and the 128-bit IV <b>iv</b>.
*/
aes_cnt_cipher_t*
-aes_new_cipher(void)
+aes_new_cipher(const char *key, const char *iv)
{
aes_cnt_cipher_t* result = tor_malloc_zero(sizeof(aes_cnt_cipher_t));
+ aes_set_key(result, key, 128);
+ aes_set_iv(result, iv);
+
return result;
}
@@ -224,7 +232,7 @@ aes_new_cipher(void)
* <b>key_bits</b> bits long (must be 128, 192, or 256). Also resets
* the counter to 0.
*/
-void
+static void
aes_set_key(aes_cnt_cipher_t *cipher, const char *key, int key_bits)
{
if (should_use_EVP) {
@@ -398,7 +406,7 @@ aes_crypt_inplace(aes_cnt_cipher_t *cipher, char *data, size_t len)
/** Reset the 128-bit counter of <b>cipher</b> to the 16-bit big-endian value
* in <b>iv</b>. */
-void
+static void
aes_set_iv(aes_cnt_cipher_t *cipher, const char *iv)
{
#ifdef USING_COUNTER_VARS