mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Use OpenSSL AES when OpenSSL has version 0.9.7 or later.
svn:r5129
This commit is contained in:
parent
06625e779d
commit
96988b45b4
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user