4 * @brief Implementation for prf_hmac_t.
9 * Copyright (C) 2005 Jan Hutter, Martin Willi
10 * Hochschule fuer Technik Rapperswil
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the
14 * Free Software Foundation; either version 2 of the License, or (at your
15 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
19 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
25 #include <utils/allocator.h>
26 #include <transforms/hmac.h>
28 typedef struct private_prf_hmac_t private_prf_hmac_t
;
30 struct private_prf_hmac_t
{
32 * public interface for this prf
37 * hmac to use for generation
43 * implementation of prf_t.get_bytes
45 static status_t
get_bytes(private_prf_hmac_t
*this, chunk_t seed
, u_int8_t
*buffer
)
47 return this->hmac
->get_mac(this->hmac
, seed
, buffer
);
51 * implementation of prf_t.allocate_bytes
53 static status_t
allocate_bytes(private_prf_hmac_t
*this, chunk_t seed
, chunk_t
*chunk
)
55 return this->hmac
->allocate_mac(this->hmac
, seed
, chunk
);
59 * implementation of prf_t.get_block_size
61 static size_t get_block_size(private_prf_hmac_t
*this)
63 return this->hmac
->get_block_size(this->hmac
);
67 * implementation of prf_t.set_key
69 static status_t
set_key(private_prf_hmac_t
*this, chunk_t key
)
71 this->hmac
->set_key(this->hmac
, key
);
76 * implementation of prf_t.destroy
78 static status_t
destroy(private_prf_hmac_t
*this)
81 this->hmac
->destroy(this->hmac
);
88 prf_hmac_t
*prf_hmac_create(hash_algorithm_t hash_algorithm
)
90 private_prf_hmac_t
*this = allocator_alloc_thing(private_prf_hmac_t
);
97 this->public.prf_interface
.get_bytes
= (status_t (*) (prf_t
*,chunk_t
,u_int8_t
*))get_bytes
;
98 this->public.prf_interface
.allocate_bytes
= (status_t (*) (prf_t
*,chunk_t
,chunk_t
*))allocate_bytes
;
99 this->public.prf_interface
.get_block_size
= (size_t (*) (prf_t
*))get_block_size
;
100 this->public.prf_interface
.set_key
= (status_t (*) (prf_t
*,chunk_t
))set_key
;
101 this->public.prf_interface
.destroy
= (status_t (*) (prf_t
*))destroy
;
103 this->hmac
= hmac_create(hash_algorithm
);
104 if (this->hmac
== NULL
)
106 allocator_free(this);
110 return &(this->public);