Use centralized hasher names in openssl plugin

This commit is contained in:
Martin Willi
2012-07-17 17:32:00 +02:00
parent 4b96000833
commit 610f90a8b9
2 changed files with 10 additions and 73 deletions
@@ -40,56 +40,6 @@ struct private_openssl_hasher_t {
EVP_MD_CTX *ctx;
};
/**
* Mapping from the algorithms defined in IKEv2 to
* OpenSSL algorithm names
*/
typedef struct {
/**
* Identifier specified in IKEv2
*/
int ikev2_id;
/**
* Name of the algorithm, as used in OpenSSL
*/
char *name;
} openssl_algorithm_t;
#define END_OF_LIST -1
/**
* Algorithms for integrity
*/
static openssl_algorithm_t integrity_algs[] = {
{HASH_MD2, "md2"},
{HASH_MD5, "md5"},
{HASH_SHA1, "sha1"},
{HASH_SHA224, "sha224"},
{HASH_SHA256, "sha256"},
{HASH_SHA384, "sha384"},
{HASH_SHA512, "sha512"},
{HASH_MD4, "md4"},
{END_OF_LIST, NULL},
};
/**
* Look up an OpenSSL algorithm name
*/
static char* lookup_algorithm(openssl_algorithm_t *openssl_algo,
u_int16_t ikev2_algo)
{
while (openssl_algo->ikev2_id != END_OF_LIST)
{
if (ikev2_algo == openssl_algo->ikev2_id)
{
return openssl_algo->name;
}
openssl_algo++;
}
return NULL;
}
METHOD(hasher_t, get_hash_size, size_t,
private_openssl_hasher_t *this)
{
@@ -144,11 +94,11 @@ METHOD(hasher_t, destroy, void,
openssl_hasher_t *openssl_hasher_create(hash_algorithm_t algo)
{
private_openssl_hasher_t *this;
char* name;
char* name = lookup_algorithm(integrity_algs, algo);
name = enum_to_name(hash_algorithm_short_names, algo);
if (!name)
{
/* algo unavailable */
return NULL;
}
@@ -124,6 +124,13 @@ METHOD(mac_t, destroy, void,
static mac_t *hmac_create(hash_algorithm_t algo)
{
private_mac_t *this;
char *name;
name = enum_to_name(hash_algorithm_short_names, algo);
if (!name)
{
return NULL;
}
INIT(this,
.public = {
@@ -132,29 +139,9 @@ static mac_t *hmac_create(hash_algorithm_t algo)
.set_key = _set_key,
.destroy = _destroy,
},
.hasher = EVP_get_digestbyname(name),
);
switch (algo)
{
case HASH_MD5:
this->hasher = EVP_get_digestbyname("md5");
break;
case HASH_SHA1:
this->hasher = EVP_get_digestbyname("sha1");
break;
case HASH_SHA256:
this->hasher = EVP_get_digestbyname("sha256");
break;
case HASH_SHA384:
this->hasher = EVP_get_digestbyname("sha384");
break;
case HASH_SHA512:
this->hasher = EVP_get_digestbyname("sha512");
break;
default:
break;
}
if (!this->hasher)
{
free(this);