diff options
author | Nick Mathewson <nickm@torproject.org> | 2005-09-23 18:50:50 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2005-09-23 18:50:50 +0000 |
commit | 96988b45b415b255a8c978f072c083eb3a669119 (patch) | |
tree | b610de20004be7dc2e76a091977e5b2c48572397 /src/common | |
parent | 06625e779db05bd22b7f78474d143c576aebf950 (diff) | |
download | tor-96988b45b415b255a8c978f072c083eb3a669119.tar tor-96988b45b415b255a8c978f072c083eb3a669119.tar.gz |
Use OpenSSL AES when OpenSSL has version 0.9.7 or later.
svn:r5129
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/aes.c | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/src/common/aes.c b/src/common/aes.c index 507900639..176e94a8a 100644 --- a/src/common/aes.c +++ b/src/common/aes.c @@ -14,32 +14,44 @@ const char aes_c_id[] = "$Id$"; **/ #include "orconfig.h" +#include <openssl/opensslv.h> #include <assert.h> #include <stdlib.h> #include <string.h> #include "aes.h" #include "util.h" +#if OPENSSL_VERSION_NUMBER >= 0x0090700fl +#define USE_OPENSSL_AES +#include <openssl/aes.h> +#endif + +#ifndef USE_OPENSSL_AES /*======================================================================*/ /* From rijndael-alg-fst.h */ -typedef uint64_t u64; -typedef uint32_t u32; -typedef uint8_t u8; - #define MAXKC (256/32) #define MAXKB (256/8) #define MAXNR 14 static int rijndaelKeySetupEnc(u32 rk[/*4*(Nr + 1)*/], const u8 cipherKey[], int keyBits); static void rijndaelEncrypt(const u32 rk[/*4*(Nr + 1)*/], int Nr, const u8 pt[16], u8 ct[16]); +#endif + +typedef uint64_t u64; +typedef uint32_t u32; +typedef uint8_t u8; /*======================================================================*/ /* Interface to AES code, and counter implementation */ struct aes_cnt_cipher { +#ifdef USE_OPENSSL_AES + AES_KEY key; +#else u32 rk[4*(MAXNR+1)]; int nr; +#endif u32 counter1; u32 counter0; u8 buf[16]; @@ -66,7 +78,11 @@ _aes_fill_buf(aes_cnt_cipher_t *cipher) buf[ 9] = (counter1 >> 16) & 0xff; buf[ 8] = (counter1 >> 24) & 0xff; +#ifdef USE_OPENSSL_AES + AES_encrypt(buf, cipher->buf, &(cipher->key)); +#else rijndaelEncrypt(cipher->rk, cipher->nr, buf, cipher->buf); +#endif } /** @@ -75,9 +91,7 @@ _aes_fill_buf(aes_cnt_cipher_t *cipher) aes_cnt_cipher_t* aes_new_cipher() { - aes_cnt_cipher_t* result = tor_malloc(sizeof(aes_cnt_cipher_t)); - memset(result->rk, 0, 4*(MAXNR+1)); - memset(result->buf, 0, 16); + aes_cnt_cipher_t* result = tor_malloc_zero(sizeof(aes_cnt_cipher_t)); return result; } @@ -89,8 +103,12 @@ aes_new_cipher() void aes_set_key(aes_cnt_cipher_t *cipher, const char *key, int key_bits) { +#ifdef USE_OPENSSL_AES + AES_set_encrypt_key((const unsigned char *)key, key_bits, &(cipher->key)); +#else cipher->nr = rijndaelKeySetupEnc(cipher->rk, (const unsigned char*)key, key_bits); +#endif cipher->counter0 = 0; cipher->counter1 = 0; cipher->pos = 0; @@ -158,6 +176,7 @@ aes_adjust_counter(aes_cnt_cipher_t *cipher, long delta) aes_set_counter(cipher, counter); } +#ifndef USE_OPENSSL_AES /*======================================================================*/ /* From rijndael-alg-fst.c */ @@ -815,4 +834,5 @@ void rijndaelEncrypt(const u32 rk[/*4*(Nr + 1)*/], int Nr, const u8 pt[16], u8 c rk[3]; PUTU32(ct + 12, s3); } +#endif |