Annotation of embedaddon/strongswan/src/libcharon/sa/ikev1/phase1.h, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2012 Martin Willi
3: * Copyright (C) 2012 revosec AG
4: *
5: * This program is free software; you can redistribute it and/or modify it
6: * under the terms of the GNU General Public License as published by the
7: * Free Software Foundation; either version 2 of the License, or (at your
8: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
9: *
10: * This program is distributed in the hope that it will be useful, but
11: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13: * for more details.
14: */
15:
16: /**
17: * @defgroup phase1 phase1
18: * @{ @ingroup ikev1
19: */
20:
21: #ifndef PHASE1_H_
22: #define PHASE1_H_
23:
24: typedef struct phase1_t phase1_t;
25:
26: #include <sa/ike_sa.h>
27: #include <crypto/diffie_hellman.h>
28:
29: /**
30: * Common phase 1 helper for main and aggressive mode.
31: */
32: struct phase1_t {
33:
34: /**
35: * Create keymat hasher.
36: *
37: * @return TRUE if hasher created
38: */
39: bool (*create_hasher)(phase1_t *this);
40:
41: /**
42: * Create DH object using SA keymat.
43: *
44: * @param group negotiated DH group
45: * @return TRUE if group supported
46: */
47: bool (*create_dh)(phase1_t *this, diffie_hellman_group_t group);
48:
49: /**
50: * Derive key material.
51: *
52: * @param peer_cfg peer config to look up shared key for, or NULL
53: * @param method negotiated authenticated method
54: * @return TRUE if successful
55: */
56: bool (*derive_keys)(phase1_t *this, peer_cfg_t *peer_cfg,
57: auth_method_t method);
58: /**
59: * Verify a HASH or SIG payload in message.
60: *
61: * @param method negotiated auth method
62: * @param message message containing HASH or SIG payload
63: * @param id_data encoded identity, including protocol/port fields
64: * @return TRUE if verified successfully
65: */
66: bool (*verify_auth)(phase1_t *this, auth_method_t method,
67: message_t *message, chunk_t id_data);
68:
69: /**
70: * Build a HASH or SIG payload and add it to message.
71: *
72: * @param method negotiated auth method
73: * @param message message to add payload to
74: * @param id_data encoded identity, including protocol/port fields
75: * @return TRUE if built successfully
76: */
77: bool (*build_auth)(phase1_t *this, auth_method_t method,
78: message_t *message, chunk_t id_data);
79:
80: /**
81: * Get the IKEv1 authentication method defined by peer config.
82: *
83: * @param peer_cfg peer config to get auth method from
84: * @return auth method, or AUTH_NONE
85: */
86: auth_method_t (*get_auth_method)(phase1_t *this, peer_cfg_t *peer_cfg);
87:
88: /**
89: * Select a peer config as responder.
90: *
91: * If called after the first successful call the next alternative config
92: * is returned, if any.
93: *
94: * @param method used authentication method
95: * @param aggressive TRUE to get an aggressive mode config
96: * @param id initiator identity
97: * @return selected peer config, NULL if none found
98: */
99: peer_cfg_t* (*select_config)(phase1_t *this, auth_method_t method,
100: bool aggressive, identification_t *id);
101:
102: /**
103: * Get configured identity from peer config.
104: *
105: * @param peer_cfg peer config to get identity from
106: * @param local TRUE to get own identity, FALSE for remote
107: * @return identity, pointing to internal config data
108: */
109: identification_t* (*get_id)(phase1_t *this, peer_cfg_t *peer_cfg, bool local);
110:
111: /**
112: * Check if peer config has virtual IPs pool assigned.
113: *
114: * @param peer_cfg peer_config to check
115: * @return TRUE if peer config contains at least one pool
116: */
117: bool (*has_pool)(phase1_t *this, peer_cfg_t *peer_cfg);
118:
119: /**
120: * Check if peer config has virtual IPs to request
121: *
122: * @param peer_cfg peer_config to check
123: * @return TRUE if peer config contains at least one virtual IP
124: */
125: bool (*has_virtual_ip)(phase1_t *this, peer_cfg_t *peer_cfg);
126:
127: /**
128: * Extract and store SA payload bytes from encoded message.
129: *
130: * @param message message to extract SA payload bytes from
131: * @return TRUE if SA payload found
132: */
133: bool (*save_sa_payload)(phase1_t *this, message_t *message);
134:
135: /**
136: * Add Nonce and KE payload to message.
137: *
138: * @param message message to add payloads
139: * @return TRUE if payloads added successfully
140: */
141: bool (*add_nonce_ke)(phase1_t *this, message_t *message);
142:
143: /**
144: * Extract Nonce and KE payload from message.
145: *
146: * @param message message to get payloads from
147: * @return TRUE if payloads extracted successfully
148: */
149: bool (*get_nonce_ke)(phase1_t *this, message_t *message);
150:
151: /**
152: * Destroy a phase1_t.
153: */
154: void (*destroy)(phase1_t *this);
155: };
156:
157: /**
158: * Create a phase1 instance.
159: *
160: * @param ike_sa IKE_SA to set up
161: * @param initiator TRUE if initiating actively
162: * @return Phase 1 helper
163: */
164: phase1_t *phase1_create(ike_sa_t *ike_sa, bool initiator);
165:
166: #endif /** PHASE1_H_ @}*/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>