xref: /dflybsd-src/contrib/wpa_supplicant/src/eap_server/ikev2.h (revision bcf9aa4feb4a2fdf8ceac276d271a57f4b27e13d)
16d49e1aeSJan Lentfer /*
26d49e1aeSJan Lentfer  * IKEv2 initiator (RFC 4306) for EAP-IKEV2
36d49e1aeSJan Lentfer  * Copyright (c) 2007, Jouni Malinen <j@w1.fi>
46d49e1aeSJan Lentfer  *
5*3ff40c12SJohn Marino  * This software may be distributed under the terms of the BSD license.
6*3ff40c12SJohn Marino  * See README for more details.
76d49e1aeSJan Lentfer  */
86d49e1aeSJan Lentfer 
96d49e1aeSJan Lentfer #ifndef IKEV2_H
106d49e1aeSJan Lentfer #define IKEV2_H
116d49e1aeSJan Lentfer 
126d49e1aeSJan Lentfer #include "eap_common/ikev2_common.h"
136d49e1aeSJan Lentfer 
146d49e1aeSJan Lentfer struct ikev2_proposal_data {
156d49e1aeSJan Lentfer 	u8 proposal_num;
166d49e1aeSJan Lentfer 	int integ;
176d49e1aeSJan Lentfer 	int prf;
186d49e1aeSJan Lentfer 	int encr;
196d49e1aeSJan Lentfer 	int dh;
206d49e1aeSJan Lentfer };
216d49e1aeSJan Lentfer 
226d49e1aeSJan Lentfer 
236d49e1aeSJan Lentfer struct ikev2_initiator_data {
246d49e1aeSJan Lentfer 	enum { SA_INIT, SA_AUTH, CHILD_SA, IKEV2_DONE } state;
256d49e1aeSJan Lentfer 	u8 i_spi[IKEV2_SPI_LEN];
266d49e1aeSJan Lentfer 	u8 r_spi[IKEV2_SPI_LEN];
276d49e1aeSJan Lentfer 	u8 i_nonce[IKEV2_NONCE_MAX_LEN];
286d49e1aeSJan Lentfer 	size_t i_nonce_len;
296d49e1aeSJan Lentfer 	u8 r_nonce[IKEV2_NONCE_MAX_LEN];
306d49e1aeSJan Lentfer 	size_t r_nonce_len;
316d49e1aeSJan Lentfer 	struct wpabuf *r_dh_public;
326d49e1aeSJan Lentfer 	struct wpabuf *i_dh_private;
336d49e1aeSJan Lentfer 	struct ikev2_proposal_data proposal;
346d49e1aeSJan Lentfer 	const struct dh_group *dh;
356d49e1aeSJan Lentfer 	struct ikev2_keys keys;
366d49e1aeSJan Lentfer 	u8 *IDi;
376d49e1aeSJan Lentfer 	size_t IDi_len;
386d49e1aeSJan Lentfer 	u8 *IDr;
396d49e1aeSJan Lentfer 	size_t IDr_len;
406d49e1aeSJan Lentfer 	u8 IDr_type;
416d49e1aeSJan Lentfer 	struct wpabuf *r_sign_msg;
426d49e1aeSJan Lentfer 	struct wpabuf *i_sign_msg;
436d49e1aeSJan Lentfer 	u8 *shared_secret;
446d49e1aeSJan Lentfer 	size_t shared_secret_len;
456d49e1aeSJan Lentfer 	enum { PEER_AUTH_CERT, PEER_AUTH_SECRET } peer_auth;
466d49e1aeSJan Lentfer 	u8 *key_pad;
476d49e1aeSJan Lentfer 	size_t key_pad_len;
486d49e1aeSJan Lentfer 
496d49e1aeSJan Lentfer 	const u8 * (*get_shared_secret)(void *ctx, const u8 *IDr,
506d49e1aeSJan Lentfer 					size_t IDr_len, size_t *secret_len);
516d49e1aeSJan Lentfer 	void *cb_ctx;
526d49e1aeSJan Lentfer 	int unknown_user;
536d49e1aeSJan Lentfer };
546d49e1aeSJan Lentfer 
556d49e1aeSJan Lentfer 
566d49e1aeSJan Lentfer void ikev2_initiator_deinit(struct ikev2_initiator_data *data);
576d49e1aeSJan Lentfer int ikev2_initiator_process(struct ikev2_initiator_data *data,
586d49e1aeSJan Lentfer 			    const struct wpabuf *buf);
596d49e1aeSJan Lentfer struct wpabuf * ikev2_initiator_build(struct ikev2_initiator_data *data);
606d49e1aeSJan Lentfer 
616d49e1aeSJan Lentfer #endif /* IKEV2_H */
62