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