Annotation of embedaddon/strongswan/src/libstrongswan/crypto/prfs/mac_prf.c, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2012 Tobias Brunner
3: * Copyright (C) 2005-2006 Martin Willi
4: * Copyright (C) 2005 Jan Hutter
5: * HSR Hochschule fuer Technik Rapperswil
6: *
7: * This program is free software; you can redistribute it and/or modify it
8: * under the terms of the GNU General Public License as published by the
9: * Free Software Foundation; either version 2 of the License, or (at your
10: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
11: *
12: * This program is distributed in the hope that it will be useful, but
13: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15: * for more details.
16: */
17:
18: #include "mac_prf.h"
19:
20: typedef struct private_prf_t private_prf_t;
21:
22: /**
23: * Private data of a mac_prf_t object.
24: */
25: struct private_prf_t {
26:
27: /**
28: * Public interface
29: */
30: prf_t public;
31:
32: /**
33: * MAC to use
34: */
35: mac_t *mac;
36: };
37:
38: METHOD(prf_t, get_bytes, bool,
39: private_prf_t *this, chunk_t seed, uint8_t *buffer)
40: {
41: return this->mac->get_mac(this->mac, seed, buffer);
42: }
43:
44: METHOD(prf_t, allocate_bytes, bool,
45: private_prf_t *this, chunk_t seed, chunk_t *chunk)
46: {
47: if (chunk)
48: {
49: *chunk = chunk_alloc(this->mac->get_mac_size(this->mac));
50: return this->mac->get_mac(this->mac, seed, chunk->ptr);
51: }
52: return this->mac->get_mac(this->mac, seed, NULL);
53: }
54:
55: METHOD(prf_t, get_block_size, size_t,
56: private_prf_t *this)
57: {
58: return this->mac->get_mac_size(this->mac);
59: }
60:
61: METHOD(prf_t, get_key_size, size_t,
62: private_prf_t *this)
63: {
64: /* IKEv2 uses MAC size as key size */
65: return this->mac->get_mac_size(this->mac);
66: }
67:
68: METHOD(prf_t, set_key, bool,
69: private_prf_t *this, chunk_t key)
70: {
71: return this->mac->set_key(this->mac, key);
72: }
73:
74: METHOD(prf_t, destroy, void,
75: private_prf_t *this)
76: {
77: this->mac->destroy(this->mac);
78: free(this);
79: }
80:
81: /*
82: * Described in header.
83: */
84: prf_t *mac_prf_create(mac_t *mac)
85: {
86: private_prf_t *this;
87:
88: INIT(this,
89: .public = {
90: .get_bytes = _get_bytes,
91: .allocate_bytes = _allocate_bytes,
92: .get_block_size = _get_block_size,
93: .get_key_size = _get_key_size,
94: .set_key = _set_key,
95: .destroy = _destroy,
96: },
97: .mac = mac,
98: );
99:
100: return &this->public;
101: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>