Lines Matching refs:data
83 struct eap_teap_data *data = ctx; in eap_teap_session_ticket_cb() local
90 data->session_ticket_used = 0; in eap_teap_session_ticket_cb()
91 if (data->provisioning_allowed) { in eap_teap_session_ticket_cb()
94 data->provisioning = 1; in eap_teap_session_ticket_cb()
95 data->current_pac = NULL; in eap_teap_session_ticket_cb()
102 if (!data->current_pac) { in eap_teap_session_ticket_cb()
105 data->session_ticket_used = 0; in eap_teap_session_ticket_cb()
110 os_memcpy(master_secret, data->current_pac->pac_key, in eap_teap_session_ticket_cb()
113 data->session_ticket_used = 1; in eap_teap_session_ticket_cb()
119 static void eap_teap_parse_phase1(struct eap_teap_data *data, in eap_teap_parse_phase1() argument
126 data->provisioning_allowed = atoi(pos + 18); in eap_teap_parse_phase1()
129 data->provisioning_allowed); in eap_teap_parse_phase1()
134 data->max_pac_list_len = atoi(pos + 22); in eap_teap_parse_phase1()
135 if (data->max_pac_list_len == 0) in eap_teap_parse_phase1()
136 data->max_pac_list_len = 1; in eap_teap_parse_phase1()
138 (unsigned long) data->max_pac_list_len); in eap_teap_parse_phase1()
142 data->use_pac_binary_format = 1; in eap_teap_parse_phase1()
149 data->test_outer_tlvs = 1; in eap_teap_parse_phase1()
156 struct eap_teap_data *data; in eap_teap_init() local
162 data = os_zalloc(sizeof(*data)); in eap_teap_init()
163 if (!data) in eap_teap_init()
165 data->teap_version = EAP_TEAP_VERSION; in eap_teap_init()
166 data->max_pac_list_len = 10; in eap_teap_init()
169 eap_teap_parse_phase1(data, config->phase1); in eap_teap_init()
171 if ((data->provisioning_allowed & EAP_TEAP_PROV_AUTH) && in eap_teap_init()
178 data->provisioning_allowed &= ~EAP_TEAP_PROV_AUTH; in eap_teap_init()
182 &data->phase2_types, in eap_teap_init()
183 &data->num_phase2_types, 0) < 0) { in eap_teap_init()
184 eap_teap_deinit(sm, data); in eap_teap_init()
188 data->phase2_type.vendor = EAP_VENDOR_IETF; in eap_teap_init()
189 data->phase2_type.method = EAP_TYPE_NONE; in eap_teap_init()
191 config->teap_anon_dh = !!(data->provisioning_allowed & in eap_teap_init()
193 if (eap_peer_tls_ssl_init(sm, &data->ssl, config, EAP_TYPE_TEAP)) { in eap_teap_init()
195 eap_teap_deinit(sm, data); in eap_teap_init()
199 if (tls_connection_set_session_ticket_cb(sm->ssl_ctx, data->ssl.conn, in eap_teap_init()
201 data) < 0) { in eap_teap_init()
204 eap_teap_deinit(sm, data); in eap_teap_init()
210 eap_teap_deinit(sm, data); in eap_teap_init()
214 if (data->use_pac_binary_format && in eap_teap_init()
215 eap_teap_load_pac_bin(sm, &data->pac, config->pac_file) < 0) { in eap_teap_init()
217 eap_teap_deinit(sm, data); in eap_teap_init()
221 if (!data->use_pac_binary_format && in eap_teap_init()
222 eap_teap_load_pac(sm, &data->pac, config->pac_file) < 0) { in eap_teap_init()
224 eap_teap_deinit(sm, data); in eap_teap_init()
227 eap_teap_pac_list_truncate(data->pac, data->max_pac_list_len); in eap_teap_init()
229 return data; in eap_teap_init()
233 static void eap_teap_clear(struct eap_teap_data *data) in eap_teap_clear() argument
235 forced_memzero(data->key_data, EAP_TEAP_KEY_LEN); in eap_teap_clear()
236 forced_memzero(data->emsk, EAP_EMSK_LEN); in eap_teap_clear()
237 os_free(data->session_id); in eap_teap_clear()
238 data->session_id = NULL; in eap_teap_clear()
239 wpabuf_free(data->pending_phase2_req); in eap_teap_clear()
240 data->pending_phase2_req = NULL; in eap_teap_clear()
241 wpabuf_free(data->pending_resp); in eap_teap_clear()
242 data->pending_resp = NULL; in eap_teap_clear()
243 wpabuf_free(data->server_outer_tlvs); in eap_teap_clear()
244 data->server_outer_tlvs = NULL; in eap_teap_clear()
245 wpabuf_free(data->peer_outer_tlvs); in eap_teap_clear()
246 data->peer_outer_tlvs = NULL; in eap_teap_clear()
247 forced_memzero(data->simck_msk, EAP_TEAP_SIMCK_LEN); in eap_teap_clear()
248 forced_memzero(data->simck_emsk, EAP_TEAP_SIMCK_LEN); in eap_teap_clear()
254 struct eap_teap_data *data = priv; in eap_teap_deinit() local
257 if (!data) in eap_teap_deinit()
259 if (data->phase2_priv && data->phase2_method) in eap_teap_deinit()
260 data->phase2_method->deinit(sm, data->phase2_priv); in eap_teap_deinit()
261 eap_teap_clear(data); in eap_teap_deinit()
262 os_free(data->phase2_types); in eap_teap_deinit()
263 eap_peer_tls_ssl_deinit(sm, &data->ssl); in eap_teap_deinit()
265 pac = data->pac; in eap_teap_deinit()
273 os_free(data); in eap_teap_deinit()
277 static int eap_teap_derive_msk(struct eap_teap_data *data) in eap_teap_derive_msk() argument
281 if (eap_teap_derive_eap_msk(data->tls_cs, data->simck_msk, in eap_teap_derive_msk()
282 data->key_data) < 0 || in eap_teap_derive_msk()
283 eap_teap_derive_eap_emsk(data->tls_cs, data->simck_msk, in eap_teap_derive_msk()
284 data->emsk) < 0) in eap_teap_derive_msk()
286 data->success = 1; in eap_teap_derive_msk()
292 struct eap_teap_data *data) in eap_teap_derive_key_auth() argument
297 res = tls_connection_export_key(sm->ssl_ctx, data->ssl.conn, in eap_teap_derive_key_auth()
299 data->simck_msk, EAP_TEAP_SIMCK_LEN); in eap_teap_derive_key_auth()
304 data->simck_msk, EAP_TEAP_SIMCK_LEN); in eap_teap_derive_key_auth()
305 os_memcpy(data->simck_emsk, data->simck_msk, EAP_TEAP_SIMCK_LEN); in eap_teap_derive_key_auth()
306 data->simck_idx = 0; in eap_teap_derive_key_auth()
312 struct eap_teap_data *data) in eap_teap_init_phase2_method() argument
314 data->inner_method_done = 0; in eap_teap_init_phase2_method()
315 data->iresult_verified = 0; in eap_teap_init_phase2_method()
316 data->phase2_method = in eap_teap_init_phase2_method()
317 eap_peer_get_eap_method(data->phase2_type.vendor, in eap_teap_init_phase2_method()
318 data->phase2_type.method); in eap_teap_init_phase2_method()
319 if (!data->phase2_method) in eap_teap_init_phase2_method()
330 data->phase2_priv = data->phase2_method->init(sm); in eap_teap_init_phase2_method()
333 return data->phase2_priv == NULL ? -1 : 0; in eap_teap_init_phase2_method()
337 static int eap_teap_select_phase2_method(struct eap_teap_data *data, in eap_teap_select_phase2_method() argument
345 if (data->anon_provisioning && in eap_teap_select_phase2_method()
355 data->phase2_type.vendor = EAP_VENDOR_IETF; in eap_teap_select_phase2_method()
356 data->phase2_type.method = EAP_TYPE_TNC; in eap_teap_select_phase2_method()
359 data->phase2_type.vendor, in eap_teap_select_phase2_method()
360 data->phase2_type.method); in eap_teap_select_phase2_method()
365 for (i = 0; i < data->num_phase2_types; i++) { in eap_teap_select_phase2_method()
366 if (data->phase2_types[i].vendor != vendor || in eap_teap_select_phase2_method()
367 data->phase2_types[i].method != type) in eap_teap_select_phase2_method()
370 data->phase2_type.vendor = data->phase2_types[i].vendor; in eap_teap_select_phase2_method()
371 data->phase2_type.method = data->phase2_types[i].method; in eap_teap_select_phase2_method()
374 data->phase2_type.vendor, in eap_teap_select_phase2_method()
375 data->phase2_type.method); in eap_teap_select_phase2_method()
379 if (vendor != data->phase2_type.vendor || in eap_teap_select_phase2_method()
380 type != data->phase2_type.method || in eap_teap_select_phase2_method()
389 struct eap_teap_data *data) in eap_teap_deinit_inner_eap() argument
391 if (!data->phase2_priv || !data->phase2_method) in eap_teap_deinit_inner_eap()
396 data->phase2_method->deinit(sm, data->phase2_priv); in eap_teap_deinit_inner_eap()
397 data->phase2_method = NULL; in eap_teap_deinit_inner_eap()
398 data->phase2_priv = NULL; in eap_teap_deinit_inner_eap()
399 data->phase2_type.vendor = EAP_VENDOR_IETF; in eap_teap_deinit_inner_eap()
400 data->phase2_type.method = EAP_TYPE_NONE; in eap_teap_deinit_inner_eap()
405 struct eap_teap_data *data, in eap_teap_phase2_request() argument
439 eap_teap_deinit_inner_eap(sm, data); in eap_teap_phase2_request()
444 if (data->phase2_priv && data->phase2_method && in eap_teap_phase2_request()
445 (vendor != data->phase2_type.vendor || in eap_teap_phase2_request()
446 method != data->phase2_type.method)) in eap_teap_phase2_request()
447 eap_teap_deinit_inner_eap(sm, data); in eap_teap_phase2_request()
449 if (data->phase2_type.vendor == EAP_VENDOR_IETF && in eap_teap_phase2_request()
450 data->phase2_type.method == EAP_TYPE_NONE && in eap_teap_phase2_request()
451 eap_teap_select_phase2_method(data, vendor, method) < 0) { in eap_teap_phase2_request()
452 if (eap_peer_tls_phase2_nak(data->phase2_types, in eap_teap_phase2_request()
453 data->num_phase2_types, in eap_teap_phase2_request()
459 if ((!data->phase2_priv && eap_teap_init_phase2_method(sm, data) < 0) || in eap_teap_phase2_request()
460 !data->phase2_method) { in eap_teap_phase2_request()
471 *resp = data->phase2_method->process(sm, data->phase2_priv, &iret, in eap_teap_phase2_request()
474 data->inner_method_done = 1; in eap_teap_phase2_request()
485 data->phase2_success = 1; in eap_teap_phase2_request()
492 wpabuf_free(data->pending_phase2_req); in eap_teap_phase2_request()
493 data->pending_phase2_req = wpabuf_alloc_copy(hdr, len); in eap_teap_phase2_request()
556 struct eap_sm *sm, struct eap_teap_data *data, in eap_teap_process_eap_payload_tlv() argument
585 if (eap_teap_phase2_request(sm, data, ret, hdr, &resp)) { in eap_teap_process_eap_payload_tlv()
600 struct eap_sm *sm, struct eap_teap_data *data, in eap_teap_process_basic_auth_req() argument
637 data->phase2_success = 1; in eap_teap_process_basic_auth_req()
644 eap_teap_validate_crypto_binding(struct eap_teap_data *data, in eap_teap_validate_crypto_binding() argument
663 cb->received_version != data->received_version || in eap_teap_validate_crypto_binding()
683 struct eap_teap_data *data, in eap_teap_write_crypto_binding() argument
695 rbind->received_version = data->received_version; in eap_teap_write_crypto_binding()
707 if (eap_teap_compound_mac(data->tls_cs, rbind, data->server_outer_tlvs, in eap_teap_write_crypto_binding()
708 data->peer_outer_tlvs, cmk_msk, in eap_teap_write_crypto_binding()
712 eap_teap_compound_mac(data->tls_cs, rbind, data->server_outer_tlvs, in eap_teap_write_crypto_binding()
713 data->peer_outer_tlvs, cmk_emsk, in eap_teap_write_crypto_binding()
731 static int eap_teap_get_cmk(struct eap_sm *sm, struct eap_teap_data *data, in eap_teap_get_cmk() argument
740 data->simck_idx + 1); in eap_teap_get_cmk()
742 if (!data->phase2_method) in eap_teap_get_cmk()
743 return eap_teap_derive_cmk_basic_pw_auth(data->tls_cs, in eap_teap_get_cmk()
744 data->simck_msk, in eap_teap_get_cmk()
747 if (!data->phase2_method || !data->phase2_priv) { in eap_teap_get_cmk()
752 if (data->phase2_method->isKeyAvailable && in eap_teap_get_cmk()
753 !data->phase2_method->isKeyAvailable(sm, data->phase2_priv)) { in eap_teap_get_cmk()
759 if (data->phase2_method->isKeyAvailable && in eap_teap_get_cmk()
760 data->phase2_method->getKey) { in eap_teap_get_cmk()
761 msk = data->phase2_method->getKey(sm, data->phase2_priv, in eap_teap_get_cmk()
770 if (data->phase2_method->isKeyAvailable && in eap_teap_get_cmk()
771 data->phase2_method->get_emsk) { in eap_teap_get_cmk()
772 emsk = data->phase2_method->get_emsk(sm, data->phase2_priv, in eap_teap_get_cmk()
776 res = eap_teap_derive_imck(data->tls_cs, in eap_teap_get_cmk()
777 data->simck_msk, data->simck_emsk, in eap_teap_get_cmk()
779 data->simck_msk, cmk_msk, in eap_teap_get_cmk()
780 data->simck_emsk, cmk_emsk); in eap_teap_get_cmk()
784 data->simck_idx++; in eap_teap_get_cmk()
786 data->cmk_emsk_available = 1; in eap_teap_get_cmk()
792 static int eap_teap_session_id(struct eap_teap_data *data) in eap_teap_session_id() argument
797 os_free(data->session_id); in eap_teap_session_id()
798 data->session_id = os_malloc(max_id_len); in eap_teap_session_id()
799 if (!data->session_id) in eap_teap_session_id()
802 data->session_id[0] = EAP_TYPE_TEAP; in eap_teap_session_id()
803 res = tls_get_tls_unique(data->ssl.conn, data->session_id + 1, in eap_teap_session_id()
806 os_free(data->session_id); in eap_teap_session_id()
807 data->session_id = NULL; in eap_teap_session_id()
812 data->id_len = 1 + res; in eap_teap_session_id()
814 data->session_id, data->id_len); in eap_teap_session_id()
820 struct eap_sm *sm, struct eap_teap_data *data, in eap_teap_process_crypto_binding() argument
833 if (eap_teap_validate_crypto_binding(data, cb) < 0 || in eap_teap_process_crypto_binding()
834 eap_teap_get_cmk(sm, data, cmk_msk, cmk_emsk) < 0) in eap_teap_process_crypto_binding()
844 if (eap_teap_compound_mac(data->tls_cs, cb, in eap_teap_process_crypto_binding()
845 data->server_outer_tlvs, in eap_teap_process_crypto_binding()
846 data->peer_outer_tlvs, cmk_msk, in eap_teap_process_crypto_binding()
865 data->cmk_emsk_available) { in eap_teap_process_crypto_binding()
868 if (eap_teap_compound_mac(data->tls_cs, cb, in eap_teap_process_crypto_binding()
869 data->server_outer_tlvs, in eap_teap_process_crypto_binding()
870 data->peer_outer_tlvs, cmk_emsk, in eap_teap_process_crypto_binding()
890 !data->cmk_emsk_available) { in eap_teap_process_crypto_binding()
906 if (data->phase2_success && eap_teap_derive_msk(data) < 0) { in eap_teap_process_crypto_binding()
910 data->phase2_success = 0; in eap_teap_process_crypto_binding()
915 if (data->phase2_success && eap_teap_session_id(data) < 0) { in eap_teap_process_crypto_binding()
922 data, (struct teap_tlv_crypto_binding *) pos, in eap_teap_process_crypto_binding()
1131 struct eap_teap_data *data, in eap_teap_process_pac() argument
1143 eap_teap_add_pac(&data->pac, &data->current_pac, &entry); in eap_teap_process_pac()
1144 eap_teap_pac_list_truncate(data->pac, data->max_pac_list_len); in eap_teap_process_pac()
1145 if (data->use_pac_binary_format) in eap_teap_process_pac()
1146 eap_teap_save_pac_bin(sm, data->pac, config->pac_file); in eap_teap_process_pac()
1148 eap_teap_save_pac(sm, data->pac, config->pac_file); in eap_teap_process_pac()
1152 data->provisioning ? "peer" : "server"); in eap_teap_process_pac()
1244 struct eap_teap_data *data, in eap_teap_process_decrypted() argument
1288 if (!data->iresult_verified && !data->result_success_done && in eap_teap_process_decrypted()
1300 data->inner_method_done) { in eap_teap_process_decrypted()
1318 tmp = eap_teap_process_crypto_binding(sm, data, ret, in eap_teap_process_decrypted()
1327 data->result_success_done = 1; in eap_teap_process_decrypted()
1329 data->inner_method_done = 0; in eap_teap_process_decrypted()
1330 data->iresult_verified = 1; in eap_teap_process_decrypted()
1346 os_free(data->phase2_types); in eap_teap_process_decrypted()
1347 data->phase2_types = NULL; in eap_teap_process_decrypted()
1348 data->num_phase2_types = 0; in eap_teap_process_decrypted()
1351 &data->phase2_types, in eap_teap_process_decrypted()
1352 &data->num_phase2_types, in eap_teap_process_decrypted()
1362 tmp = eap_teap_process_basic_auth_req(sm, data, in eap_teap_process_decrypted()
1370 tmp = eap_teap_process_eap_payload_tlv(sm, data, ret, in eap_teap_process_decrypted()
1390 if (data->result_success_done && data->session_ticket_used && in eap_teap_process_decrypted()
1391 eap_teap_derive_msk(data) == 0) { in eap_teap_process_decrypted()
1398 } else if (data->result_success_done && in eap_teap_process_decrypted()
1399 tls_connection_get_own_cert_used(data->ssl.conn) && in eap_teap_process_decrypted()
1400 eap_teap_derive_msk(data) == 0) { in eap_teap_process_decrypted()
1411 tmp = eap_teap_process_pac(sm, data, ret, in eap_teap_process_decrypted()
1422 if (!data->current_pac && data->provisioning && !failed && !tlv.pac && in eap_teap_process_decrypted()
1424 (!data->anon_provisioning || in eap_teap_process_decrypted()
1425 (data->phase2_success && data->phase2_method && in eap_teap_process_decrypted()
1426 data->phase2_method->vendor == 0 && in eap_teap_process_decrypted()
1427 eap_teap_allowed_anon_prov_cipher_suite(data->tls_cs) && in eap_teap_process_decrypted()
1429 data->phase2_method->vendor, in eap_teap_process_decrypted()
1430 data->phase2_method->method))) && in eap_teap_process_decrypted()
1460 tmp = eap_teap_tlv_result((!failed && data->phase2_success) ? in eap_teap_process_decrypted()
1467 (tlv.crypto_binding || data->iresult_verified) && in eap_teap_process_decrypted()
1468 data->phase2_success) { in eap_teap_process_decrypted()
1473 data->on_tx_completion = data->provisioning ? in eap_teap_process_decrypted()
1489 if (eap_peer_tls_encrypt(sm, &data->ssl, EAP_TYPE_TEAP, in eap_teap_process_decrypted()
1490 data->teap_version, identifier, in eap_teap_process_decrypted()
1501 static int eap_teap_decrypt(struct eap_sm *sm, struct eap_teap_data *data, in eap_teap_decrypt() argument
1513 if (data->pending_phase2_req) { in eap_teap_decrypt()
1517 eap_peer_tls_reset_input(&data->ssl); in eap_teap_decrypt()
1519 in_decrypted = data->pending_phase2_req; in eap_teap_decrypt()
1520 data->pending_phase2_req = NULL; in eap_teap_decrypt()
1526 res = eap_peer_tls_encrypt(sm, &data->ssl, EAP_TYPE_TEAP, in eap_teap_decrypt()
1527 data->teap_version, in eap_teap_decrypt()
1529 if (res == 0 && !data->ssl.tls_out && in eap_teap_decrypt()
1530 data->on_tx_completion) { in eap_teap_decrypt()
1533 ret->methodState = data->on_tx_completion; in eap_teap_decrypt()
1534 data->on_tx_completion = 0; in eap_teap_decrypt()
1540 res = eap_peer_tls_decrypt(sm, &data->ssl, in_data, &in_decrypted); in eap_teap_decrypt()
1556 res = eap_teap_process_decrypted(sm, data, ret, identifier, in eap_teap_decrypt()
1565 static void eap_teap_select_pac(struct eap_teap_data *data, in eap_teap_select_pac() argument
1570 data->current_pac = eap_teap_get_pac(data->pac, a_id, a_id_len, in eap_teap_select_pac()
1572 if (data->current_pac) { in eap_teap_select_pac()
1575 data->current_pac->pac_type); in eap_teap_select_pac()
1577 data->current_pac->a_id_info, in eap_teap_select_pac()
1578 data->current_pac->a_id_info_len); in eap_teap_select_pac()
1584 struct eap_teap_data *data, in eap_teap_use_pac_opaque() argument
1602 tls_connection_client_hello_ext(sm->ssl_ctx, data->ssl.conn, in eap_teap_use_pac_opaque()
1617 struct eap_teap_data *data) in eap_teap_clear_pac_opaque_ext() argument
1619 if (tls_connection_client_hello_ext(sm->ssl_ctx, data->ssl.conn, in eap_teap_clear_pac_opaque_ext()
1630 struct eap_teap_data *data, u8 flags, in eap_teap_process_start() argument
1640 data->received_version = flags & EAP_TLS_VERSION_MASK; in eap_teap_process_start()
1642 data->received_version, data->teap_version); in eap_teap_process_start()
1643 if (data->received_version < 1) { in eap_teap_process_start()
1647 data->received_version); in eap_teap_process_start()
1650 if (data->received_version < data->teap_version) in eap_teap_process_start()
1651 data->teap_version = data->received_version; in eap_teap_process_start()
1653 data->teap_version); in eap_teap_process_start()
1682 wpabuf_free(data->server_outer_tlvs); in eap_teap_process_start()
1683 data->server_outer_tlvs = wpabuf_alloc_copy(outer_pos, in eap_teap_process_start()
1685 if (!data->server_outer_tlvs) in eap_teap_process_start()
1743 eap_teap_select_pac(data, a_id, a_id_len); in eap_teap_process_start()
1745 if (data->resuming && data->current_pac) { in eap_teap_process_start()
1748 if (eap_teap_clear_pac_opaque_ext(sm, data) < 0) in eap_teap_process_start()
1750 } else if (data->current_pac) { in eap_teap_process_start()
1755 if (eap_teap_use_pac_opaque(sm, data, data->current_pac) < 0) in eap_teap_process_start()
1757 } else if (data->provisioning_allowed) { in eap_teap_process_start()
1760 if (eap_teap_clear_pac_opaque_ext(sm, data) < 0) in eap_teap_process_start()
1762 data->provisioning = 1; in eap_teap_process_start()
1770 static struct wpabuf * eap_teap_add_stub_outer_tlvs(struct eap_teap_data *data, in eap_teap_add_stub_outer_tlvs() argument
1778 wpabuf_free(data->peer_outer_tlvs); in eap_teap_add_stub_outer_tlvs()
1779 data->peer_outer_tlvs = wpabuf_alloc(4 + 4); in eap_teap_add_stub_outer_tlvs()
1780 if (!data->peer_outer_tlvs) { in eap_teap_add_stub_outer_tlvs()
1786 wpabuf_put_be16(data->peer_outer_tlvs, TEAP_TLV_VENDOR_SPECIFIC); in eap_teap_add_stub_outer_tlvs()
1787 wpabuf_put_be16(data->peer_outer_tlvs, 4); in eap_teap_add_stub_outer_tlvs()
1788 wpabuf_put_be32(data->peer_outer_tlvs, EAP_VENDOR_HOSTAP); in eap_teap_add_stub_outer_tlvs()
1790 data->peer_outer_tlvs); in eap_teap_add_stub_outer_tlvs()
1796 wpabuf_len(data->peer_outer_tlvs)); in eap_teap_add_stub_outer_tlvs()
1807 wpabuf_put_be16(resp2, len + 4 + wpabuf_len(data->peer_outer_tlvs)); in eap_teap_add_stub_outer_tlvs()
1822 wpabuf_put_be32(resp2, wpabuf_len(data->peer_outer_tlvs)); in eap_teap_add_stub_outer_tlvs()
1825 wpabuf_put_buf(resp2, data->peer_outer_tlvs); /* Outer TLVs */ in eap_teap_add_stub_outer_tlvs()
1846 struct eap_teap_data *data = priv; in eap_teap_process() local
1849 pos = eap_peer_tls_process_init(sm, &data->ssl, EAP_TYPE_TEAP, ret, in eap_teap_process()
1858 if (eap_teap_process_start(sm, data, flags, pos, left) < 0) in eap_teap_process()
1878 if (tls_connection_established(sm->ssl_ctx, data->ssl.conn) && in eap_teap_process()
1879 !data->resuming) { in eap_teap_process()
1881 res = eap_teap_decrypt(sm, data, ret, id, &msg, &resp); in eap_teap_process()
1892 if (sm->waiting_ext_cert_check && data->pending_resp) { in eap_teap_process()
1899 resp = data->pending_resp; in eap_teap_process()
1900 data->pending_resp = NULL; in eap_teap_process()
1921 res = eap_peer_tls_process_helper(sm, &data->ssl, in eap_teap_process()
1923 data->teap_version, id, &msg, in eap_teap_process()
1936 wpabuf_free(data->pending_resp); in eap_teap_process()
1937 data->pending_resp = resp; in eap_teap_process()
1941 if (tls_connection_established(sm->ssl_ctx, data->ssl.conn)) { in eap_teap_process()
1946 data->tls_cs = in eap_teap_process()
1947 tls_connection_get_cipher_suite(data->ssl.conn); in eap_teap_process()
1950 data->tls_cs); in eap_teap_process()
1952 if (data->provisioning && in eap_teap_process()
1953 (!(data->provisioning_allowed & in eap_teap_process()
1955 tls_get_cipher(sm->ssl_ctx, data->ssl.conn, in eap_teap_process()
1961 data->anon_provisioning = 1; in eap_teap_process()
1963 data->anon_provisioning = 0; in eap_teap_process()
1965 data->resuming = 0; in eap_teap_process()
1966 if (eap_teap_derive_key_auth(sm, data) < 0) { in eap_teap_process()
1980 wpabuf_free(data->pending_phase2_req); in eap_teap_process()
1981 data->pending_phase2_req = resp; in eap_teap_process()
1983 res = eap_teap_decrypt(sm, data, ret, id, &msg, &resp); in eap_teap_process()
1990 data->teap_version); in eap_teap_process()
1994 if (data->test_outer_tlvs && res == 0 && resp && in eap_teap_process()
1996 resp = eap_teap_add_stub_outer_tlvs(data, resp); in eap_teap_process()
2006 struct eap_teap_data *data = priv;
2008 return tls_connection_established(sm->ssl_ctx, data->ssl.conn);
2014 struct eap_teap_data *data = priv;
2016 if (data->phase2_priv && data->phase2_method &&
2017 data->phase2_method->deinit_for_reauth)
2018 data->phase2_method->deinit_for_reauth(sm, data->phase2_priv);
2019 eap_teap_clear(data);
2025 struct eap_teap_data *data = priv;
2027 if (eap_peer_tls_reauth_init(sm, &data->ssl)) {
2028 eap_teap_deinit(sm, data);
2031 if (data->phase2_priv && data->phase2_method &&
2032 data->phase2_method->init_for_reauth)
2033 data->phase2_method->init_for_reauth(sm, data->phase2_priv);
2034 data->phase2_success = 0;
2035 data->inner_method_done = 0;
2036 data->result_success_done = 0;
2037 data->iresult_verified = 0;
2038 data->done_on_tx_completion = 0;
2039 data->resuming = 1;
2040 data->provisioning = 0;
2041 data->anon_provisioning = 0;
2042 data->simck_idx = 0;
2051 struct eap_teap_data *data = priv; in eap_teap_get_status() local
2054 len = eap_peer_tls_status(sm, &data->ssl, buf, buflen, verbose); in eap_teap_get_status()
2055 if (data->phase2_method) { in eap_teap_get_status()
2058 data->phase2_method->name); in eap_teap_get_status()
2069 struct eap_teap_data *data = priv; in eap_teap_isKeyAvailable() local
2071 return data->success; in eap_teap_isKeyAvailable()
2077 struct eap_teap_data *data = priv; in eap_teap_getKey() local
2080 if (!data->success) in eap_teap_getKey()
2083 key = os_memdup(data->key_data, EAP_TEAP_KEY_LEN); in eap_teap_getKey()
2095 struct eap_teap_data *data = priv; in eap_teap_get_session_id() local
2098 if (!data->success || !data->session_id) in eap_teap_get_session_id()
2101 id = os_memdup(data->session_id, data->id_len); in eap_teap_get_session_id()
2105 *len = data->id_len; in eap_teap_get_session_id()
2113 struct eap_teap_data *data = priv; in eap_teap_get_emsk() local
2116 if (!data->success) in eap_teap_get_emsk()
2119 key = os_memdup(data->emsk, EAP_EMSK_LEN); in eap_teap_get_emsk()