Annotation of embedaddon/strongswan/src/libipsec/esp_context.h, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2012-2013 Tobias Brunner
3: * Copyright (C) 2012 Giuliano Grassi
4: * Copyright (C) 2012 Ralf Sager
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: /**
19: * @defgroup esp_context esp_context
20: * @{ @ingroup libipsec
21: */
22:
23: #ifndef ESP_CONTEXT_H_
24: #define ESP_CONTEXT_H_
25:
26: #include <library.h>
27: #include <crypto/aead.h>
28:
29: typedef struct esp_context_t esp_context_t;
30:
31: /**
32: * ESP context, handles sequence numbers and maintains cryptographic primitives
33: */
34: struct esp_context_t {
35:
36: /**
37: * Get AEAD wrapper or method to encrypt/decrypt/authenticate ESP packets.
38: *
39: * @return AEAD wrapper of method
40: */
41: aead_t *(*get_aead)(esp_context_t *this);
42:
43: /**
44: * Get the current outbound ESP sequence number or the highest authenticated
45: * inbound sequence number.
46: *
47: * @return current sequence number, in host byte order
48: */
49: uint32_t (*get_seqno)(esp_context_t *this);
50:
51: /**
52: * Allocate the next outbound ESP sequence number.
53: *
54: * @param seqno the sequence number, in host byte order
55: * @return FALSE if the sequence number cycled or inbound context
56: */
57: bool (*next_seqno)(esp_context_t *this, uint32_t *seqno);
58:
59: /**
60: * Verify an ESP sequence number. Checks whether a packet with this
61: * sequence number was already received, using the anti-replay window.
62: * This operation does not modify the internal state. After the sequence
63: * number is successfully verified and the ESP packet is authenticated,
64: * set_authenticated_seqno() should be called.
65: *
66: * @param seqno the sequence number to verify, in host byte order
67: * @return TRUE when sequence number is valid
68: */
69: bool (*verify_seqno)(esp_context_t *this, uint32_t seqno);
70:
71: /**
72: * Adds a sequence number that was successfully verified and
73: * authenticated. A user MUST call verify_seqno() immediately before
74: * calling this method.
75: *
76: * @param seqno verified and authenticated seq number in host byte order
77: */
78: void (*set_authenticated_seqno)(esp_context_t *this,
79: uint32_t seqno);
80:
81: /**
82: * Destroy an esp_context_t
83: */
84: void (*destroy)(esp_context_t *this);
85:
86: };
87:
88: /**
89: * Create an esp_context_t instance
90: *
91: * @param enc_alg encryption algorithm
92: * @param enc_key encryption key
93: * @param int_alg integrity protection algorithm
94: * @param int_key integrity protection key
95: * @param inbound TRUE to create an inbound ESP context
96: * @return ESP context instance, or NULL if creation fails
97: */
98: esp_context_t *esp_context_create(int enc_alg, chunk_t enc_key, int int_alg,
99: chunk_t int_key, bool inbound);
100:
101: #endif /** ESP_CONTEXT_H_ @}*/
102:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>