2 * @file prf_hmac_sha1.c
4 * @brief Implementation of prf_t interface using the
5 * HMAC SHA1 algorithm. This simply wraps hmac-sha1
11 * Copyright (C) 2005 Jan Hutter, Martin Willi
12 * Hochschule fuer Technik Rapperswil
14 * This program is free software; you can redistribute it and/or modify it
15 * under the terms of the GNU General Public License as published by the
16 * Free Software Foundation; either version 2 of the License, or (at your
17 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
19 * This program is distributed in the hope that it will be useful, but
20 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
21 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
25 #include "prf_hmac_sha1.h"
27 #include "../../utils/allocator.h"
30 typedef struct private_prf_hmac_sha1_s private_prf_hmac_sha1_t
;
32 struct private_prf_hmac_sha1_s
{
34 * public interface for this prf
36 prf_hmac_sha1_t
public;
39 * hmac to use for generation
45 * implementation of prf_t.get_bytes
47 static status_t
get_bytes(private_prf_hmac_sha1_t
*this, chunk_t seed
, u_int8_t
*buffer
)
49 return this->hmac
->get_mac(this->hmac
, seed
, buffer
);
53 * implementation of prf_t.allocate_bytes
55 static status_t
allocate_bytes(private_prf_hmac_sha1_t
*this, chunk_t seed
, chunk_t
*chunk
)
57 return this->hmac
->allocate_mac(this->hmac
, seed
, chunk
);
61 * implementation of prf_t.get_block_size
63 static size_t get_block_size(private_prf_hmac_sha1_t
*this)
65 return this->hmac
->get_block_size(this->hmac
);
69 * implementation of prf_t.set_key
71 static status_t
set_key(private_prf_hmac_sha1_t
*this, chunk_t key
)
73 this->hmac
->set_key(this->hmac
, key
);
78 * implementation of prf_t.destroy
80 static status_t
destroy(private_prf_hmac_sha1_t
*this)
83 this->hmac
->destroy(this->hmac
);
90 prf_hmac_sha1_t
*prf_hmac_sha1_create()
92 private_prf_hmac_sha1_t
*this = allocator_alloc_thing(private_prf_hmac_sha1_t
);
99 this->public.prf_interface
.get_bytes
= (status_t (*) (prf_t
*,chunk_t
,u_int8_t
*))get_bytes
;
100 this->public.prf_interface
.allocate_bytes
= (status_t (*) (prf_t
*,chunk_t
,chunk_t
*))allocate_bytes
;
101 this->public.prf_interface
.get_block_size
= (size_t (*) (prf_t
*))get_block_size
;
102 this->public.prf_interface
.set_key
= (status_t (*) (prf_t
*,chunk_t
))set_key
;
103 this->public.prf_interface
.destroy
= (status_t (*) (prf_t
*))destroy
;
105 this->hmac
= hmac_create(HASH_SHA1
);
106 if (this->hmac
== NULL
)
108 allocator_free(this);
112 return &(this->public);