diff options
author | Martin Willi <martin@strongswan.org> | 2005-11-22 09:43:32 +0000 |
---|---|---|
committer | Martin Willi <martin@strongswan.org> | 2005-11-22 09:43:32 +0000 |
commit | 61b748c80faddc4501ede29d0dfb613df420e96d (patch) | |
tree | 1cabe8a1d13c7c58b52a6aa610e0a90aeacadd2e /Source/charon/transforms | |
parent | a217b51d6d4d036c3488fec0fa47991964679fd3 (diff) | |
download | strongswan-61b748c80faddc4501ede29d0dfb613df420e96d.tar.bz2 strongswan-61b748c80faddc4501ede29d0dfb613df420e96d.tar.xz |
- implemented
- not tested!
Diffstat (limited to 'Source/charon/transforms')
-rw-r--r-- | Source/charon/transforms/prfs/prf_hmac_sha1.c | 70 | ||||
-rw-r--r-- | Source/charon/transforms/prfs/prf_hmac_sha1.h | 5 |
2 files changed, 63 insertions, 12 deletions
diff --git a/Source/charon/transforms/prfs/prf_hmac_sha1.c b/Source/charon/transforms/prfs/prf_hmac_sha1.c index fc1ea74ae..6aa7d91ba 100644 --- a/Source/charon/transforms/prfs/prf_hmac_sha1.c +++ b/Source/charon/transforms/prfs/prf_hmac_sha1.c @@ -1,8 +1,9 @@ /** - * @file prf_hmac_sha1.h + * @file prf_hmac_sha1.c * * @brief Implementation of prf_t interface using the - * HMAC SHA1 algorithm. + * HMAC SHA1 algorithm. This simply wraps hmac-sha1 + * in a prf. * */ @@ -24,6 +25,7 @@ #include "prf_hmac_sha1.h" #include "../../utils/allocator.h" +#include "../hmac.h" typedef struct private_prf_hmac_sha1_s private_prf_hmac_sha1_t; @@ -32,14 +34,55 @@ struct private_prf_hmac_sha1_s { * public interface for this prf */ prf_hmac_sha1_t public; + + /** + * hmac to use for generation + */ + hmac_t *hmac; }; +/** + * implementation of prf_t.get_bytes + */ +static status_t get_bytes(private_prf_hmac_sha1_t *this, chunk_t seed, u_int8_t *buffer) +{ + return this->hmac->get_mac(this->hmac, seed, buffer); +} +/** + * implementation of prf_t.allocate_bytes + */ +static status_t allocate_bytes(private_prf_hmac_sha1_t *this, chunk_t seed, chunk_t *chunk) +{ + return this->hmac->allocate_mac(this->hmac, seed, chunk); +} +/** + * implementation of prf_t.get_block_size + */ +static size_t get_block_size(private_prf_hmac_sha1_t *this) +{ + return this->hmac->get_block_size(this->hmac); +} +/** + * implementation of prf_t.set_key + */ +static status_t set_key(private_prf_hmac_sha1_t *this, chunk_t key) +{ + this->hmac->set_key(this->hmac, key); + return SUCCESS; +} - - +/** + * implementation of prf_t.destroy + */ +static status_t destroy(private_prf_hmac_sha1_t *this) +{ + allocator_free(this); + this->hmac->destroy(this->hmac); + return SUCCESS; +} /* * Described in header @@ -53,11 +96,18 @@ prf_hmac_sha1_t *prf_hmac_sha1_create() return NULL; } - return &(this->public); + this->public.prf_interface.get_bytes = (status_t (*) (prf_t *,chunk_t,u_int8_t*))get_bytes; + this->public.prf_interface.allocate_bytes = (status_t (*) (prf_t*,chunk_t,chunk_t*))allocate_bytes; + this->public.prf_interface.get_block_size = (size_t (*) (prf_t*))get_block_size; + this->public.prf_interface.set_key = (status_t (*) (prf_t *,chunk_t))set_key; + this->public.prf_interface.destroy = (status_t (*) (prf_t *))destroy; + + this->hmac = hmac_create(HASH_SHA1); + if (this->hmac == NULL) + { + allocator_free(this); + return NULL; + } + return &(this->public); } - - - - - diff --git a/Source/charon/transforms/prfs/prf_hmac_sha1.h b/Source/charon/transforms/prfs/prf_hmac_sha1.h index 19a0fa635..3b4305c81 100644 --- a/Source/charon/transforms/prfs/prf_hmac_sha1.h +++ b/Source/charon/transforms/prfs/prf_hmac_sha1.h @@ -2,7 +2,8 @@ * @file prf_hmac_sha1.h * * @brief Implementation of prf_t interface using the - * HMAC SHA1 algorithm. + * HMAC SHA1 algorithm. This simply wraps hmac-sha1 + * in a prf. * */ @@ -29,7 +30,7 @@ #include "../../types.h" /** - * Object representing a diffie hellman exchange + * Object representing a prf using HMAC-SHA1 * */ typedef struct prf_hmac_sha1_s prf_hmac_sha1_t; |