Lines Matching refs:data

73 static void eap_ikev2_state(struct eap_ikev2_data *data, int state)  in eap_ikev2_state()  argument
76 eap_ikev2_state_txt(data->state), in eap_ikev2_state()
78 data->state = state; in eap_ikev2_state()
84 struct eap_ikev2_data *data; in eap_ikev2_init() local
86 data = os_zalloc(sizeof(*data)); in eap_ikev2_init()
87 if (data == NULL) in eap_ikev2_init()
89 data->state = MSG; in eap_ikev2_init()
90 data->fragment_size = sm->cfg->fragment_size > 0 ? in eap_ikev2_init()
92 data->ikev2.state = SA_INIT; in eap_ikev2_init()
93 data->ikev2.peer_auth = PEER_AUTH_SECRET; in eap_ikev2_init()
94 data->ikev2.key_pad = (u8 *) os_strdup("Key Pad for EAP-IKEv2"); in eap_ikev2_init()
95 if (data->ikev2.key_pad == NULL) in eap_ikev2_init()
97 data->ikev2.key_pad_len = 21; in eap_ikev2_init()
100 data->ikev2.proposal.proposal_num = 1; in eap_ikev2_init()
101 data->ikev2.proposal.integ = AUTH_HMAC_SHA1_96; in eap_ikev2_init()
102 data->ikev2.proposal.prf = PRF_HMAC_SHA1; in eap_ikev2_init()
103 data->ikev2.proposal.encr = ENCR_AES_CBC; in eap_ikev2_init()
104 data->ikev2.proposal.dh = DH_GROUP2_1024BIT_MODP; in eap_ikev2_init()
106 data->ikev2.IDi = os_memdup(sm->cfg->server_id, sm->cfg->server_id_len); in eap_ikev2_init()
107 if (data->ikev2.IDi == NULL) in eap_ikev2_init()
109 data->ikev2.IDi_len = sm->cfg->server_id_len; in eap_ikev2_init()
111 data->ikev2.get_shared_secret = eap_ikev2_get_shared_secret; in eap_ikev2_init()
112 data->ikev2.cb_ctx = sm; in eap_ikev2_init()
114 return data; in eap_ikev2_init()
117 ikev2_initiator_deinit(&data->ikev2); in eap_ikev2_init()
118 os_free(data); in eap_ikev2_init()
125 struct eap_ikev2_data *data = priv; in eap_ikev2_reset() local
126 wpabuf_free(data->in_buf); in eap_ikev2_reset()
127 wpabuf_free(data->out_buf); in eap_ikev2_reset()
128 ikev2_initiator_deinit(&data->ikev2); in eap_ikev2_reset()
129 bin_clear_free(data, sizeof(*data)); in eap_ikev2_reset()
133 static struct wpabuf * eap_ikev2_build_msg(struct eap_ikev2_data *data, u8 id) in eap_ikev2_build_msg() argument
142 send_len = wpabuf_len(data->out_buf) - data->out_used; in eap_ikev2_build_msg()
143 if (1 + send_len > data->fragment_size) { in eap_ikev2_build_msg()
144 send_len = data->fragment_size - 1; in eap_ikev2_build_msg()
146 if (data->out_used == 0) { in eap_ikev2_build_msg()
155 if (data->keys_ready) { in eap_ikev2_build_msg()
160 integ = ikev2_get_integ(data->ikev2.proposal.integ); in eap_ikev2_build_msg()
177 wpabuf_put_be32(req, wpabuf_len(data->out_buf)); in eap_ikev2_build_msg()
179 wpabuf_put_data(req, wpabuf_head_u8(data->out_buf) + data->out_used, in eap_ikev2_build_msg()
181 data->out_used += send_len; in eap_ikev2_build_msg()
186 ikev2_integ_hash(data->ikev2.proposal.integ, in eap_ikev2_build_msg()
187 data->ikev2.keys.SK_ai, in eap_ikev2_build_msg()
188 data->ikev2.keys.SK_integ_len, in eap_ikev2_build_msg()
192 if (data->out_used == wpabuf_len(data->out_buf)) { in eap_ikev2_build_msg()
196 wpabuf_free(data->out_buf); in eap_ikev2_build_msg()
197 data->out_buf = NULL; in eap_ikev2_build_msg()
198 data->out_used = 0; in eap_ikev2_build_msg()
202 (unsigned long) wpabuf_len(data->out_buf) - in eap_ikev2_build_msg()
203 data->out_used); in eap_ikev2_build_msg()
204 eap_ikev2_state(data, WAIT_FRAG_ACK); in eap_ikev2_build_msg()
213 struct eap_ikev2_data *data = priv; in eap_ikev2_buildReq() local
215 switch (data->state) { in eap_ikev2_buildReq()
217 if (data->out_buf == NULL) { in eap_ikev2_buildReq()
218 data->out_buf = ikev2_initiator_build(&data->ikev2); in eap_ikev2_buildReq()
219 if (data->out_buf == NULL) { in eap_ikev2_buildReq()
224 data->out_used = 0; in eap_ikev2_buildReq()
228 return eap_ikev2_build_msg(data, id); in eap_ikev2_buildReq()
233 "buildReq", data->state); in eap_ikev2_buildReq()
256 static int eap_ikev2_process_icv(struct eap_ikev2_data *data, in eap_ikev2_process_icv() argument
263 data->ikev2.proposal.integ, &data->ikev2.keys, 0, in eap_ikev2_process_icv()
269 } else if (data->keys_ready && !frag_ack) { in eap_ikev2_process_icv()
279 static int eap_ikev2_process_cont(struct eap_ikev2_data *data, in eap_ikev2_process_cont() argument
283 if (len > wpabuf_tailroom(data->in_buf)) { in eap_ikev2_process_cont()
285 eap_ikev2_state(data, FAIL); in eap_ikev2_process_cont()
289 wpabuf_put_data(data->in_buf, buf, len); in eap_ikev2_process_cont()
292 (unsigned long) wpabuf_tailroom(data->in_buf)); in eap_ikev2_process_cont()
298 static int eap_ikev2_process_fragment(struct eap_ikev2_data *data, in eap_ikev2_process_fragment() argument
303 if (data->in_buf == NULL && !(flags & IKEV2_FLAGS_LENGTH_INCLUDED)) { in eap_ikev2_process_fragment()
309 if (data->in_buf == NULL) { in eap_ikev2_process_fragment()
317 data->in_buf = wpabuf_alloc(message_length); in eap_ikev2_process_fragment()
318 if (data->in_buf == NULL) { in eap_ikev2_process_fragment()
323 wpabuf_put_data(data->in_buf, buf, len); in eap_ikev2_process_fragment()
327 (unsigned long) wpabuf_tailroom(data->in_buf)); in eap_ikev2_process_fragment()
334 static int eap_ikev2_server_keymat(struct eap_ikev2_data *data) in eap_ikev2_server_keymat() argument
337 data->ikev2.proposal.prf, &data->ikev2.keys, in eap_ikev2_server_keymat()
338 data->ikev2.i_nonce, data->ikev2.i_nonce_len, in eap_ikev2_server_keymat()
339 data->ikev2.r_nonce, data->ikev2.r_nonce_len, in eap_ikev2_server_keymat()
340 data->keymat) < 0) { in eap_ikev2_server_keymat()
345 data->keymat_ok = 1; in eap_ikev2_server_keymat()
353 struct eap_ikev2_data *data = priv; in eap_ikev2_process() local
374 if (eap_ikev2_process_icv(data, respData, flags, pos, &end, in eap_ikev2_process()
375 data->state == WAIT_FRAG_ACK && len == 0) < 0) in eap_ikev2_process()
377 eap_ikev2_state(data, FAIL); in eap_ikev2_process()
384 eap_ikev2_state(data, FAIL); in eap_ikev2_process()
394 eap_ikev2_state(data, FAIL); in eap_ikev2_process()
401 if (data->state == WAIT_FRAG_ACK) { in eap_ikev2_process()
405 eap_ikev2_state(data, FAIL); in eap_ikev2_process()
409 eap_ikev2_state(data, MSG); in eap_ikev2_process()
413 if (data->in_buf && eap_ikev2_process_cont(data, pos, end - pos) < 0) { in eap_ikev2_process()
414 eap_ikev2_state(data, FAIL); in eap_ikev2_process()
419 if (eap_ikev2_process_fragment(data, flags, message_length, in eap_ikev2_process()
421 eap_ikev2_state(data, FAIL); in eap_ikev2_process()
423 eap_ikev2_state(data, FRAG_ACK); in eap_ikev2_process()
425 } else if (data->state == FRAG_ACK) { in eap_ikev2_process()
427 data->state = MSG; in eap_ikev2_process()
430 if (data->in_buf == NULL) { in eap_ikev2_process()
433 data->in_buf = &tmpbuf; in eap_ikev2_process()
436 if (ikev2_initiator_process(&data->ikev2, data->in_buf) < 0) { in eap_ikev2_process()
437 if (data->in_buf == &tmpbuf) in eap_ikev2_process()
438 data->in_buf = NULL; in eap_ikev2_process()
439 eap_ikev2_state(data, FAIL); in eap_ikev2_process()
443 switch (data->ikev2.state) { in eap_ikev2_process()
447 data->keys_ready = 1; in eap_ikev2_process()
450 if (data->state == FAIL) in eap_ikev2_process()
454 if (eap_ikev2_server_keymat(data)) in eap_ikev2_process()
456 eap_ikev2_state(data, DONE); in eap_ikev2_process()
462 if (data->in_buf != &tmpbuf) in eap_ikev2_process()
463 wpabuf_free(data->in_buf); in eap_ikev2_process()
464 data->in_buf = NULL; in eap_ikev2_process()
470 struct eap_ikev2_data *data = priv; in eap_ikev2_isDone() local
471 return data->state == DONE || data->state == FAIL; in eap_ikev2_isDone()
477 struct eap_ikev2_data *data = priv; in eap_ikev2_isSuccess() local
478 return data->state == DONE && data->ikev2.state == IKEV2_DONE && in eap_ikev2_isSuccess()
479 data->keymat_ok; in eap_ikev2_isSuccess()
485 struct eap_ikev2_data *data = priv; in eap_ikev2_getKey() local
488 if (data->state != DONE || !data->keymat_ok) in eap_ikev2_getKey()
493 os_memcpy(key, data->keymat, EAP_MSK_LEN); in eap_ikev2_getKey()
503 struct eap_ikev2_data *data = priv; in eap_ikev2_get_emsk() local
506 if (data->state != DONE || !data->keymat_ok) in eap_ikev2_get_emsk()
511 os_memcpy(key, data->keymat + EAP_MSK_LEN, EAP_EMSK_LEN); in eap_ikev2_get_emsk()
521 struct eap_ikev2_data *data = priv; in eap_ikev2_get_session_id() local
526 if (data->state != DONE || !data->keymat_ok) in eap_ikev2_get_session_id()
529 sid_len = 1 + data->ikev2.i_nonce_len + data->ikev2.r_nonce_len; in eap_ikev2_get_session_id()
535 os_memcpy(sid + offset, data->ikev2.i_nonce, in eap_ikev2_get_session_id()
536 data->ikev2.i_nonce_len); in eap_ikev2_get_session_id()
537 offset += data->ikev2.i_nonce_len; in eap_ikev2_get_session_id()
538 os_memcpy(sid + offset, data->ikev2.r_nonce, in eap_ikev2_get_session_id()
539 data->ikev2.r_nonce_len); in eap_ikev2_get_session_id()