Lines Matching refs:data

76 static void eap_sim_state(struct eap_sim_data *data, int state)  in eap_sim_state()  argument
79 eap_sim_state_txt(data->state), in eap_sim_state()
81 data->state = state; in eap_sim_state()
87 struct eap_sim_data *data; in eap_sim_init() local
90 data = os_zalloc(sizeof(*data)); in eap_sim_init()
91 if (data == NULL) in eap_sim_init()
94 if (random_get_bytes(data->nonce_mt, EAP_SIM_NONCE_MT_LEN)) { in eap_sim_init()
97 os_free(data); in eap_sim_init()
102 data->error_code = NO_EAP_METHOD_ERROR; in eap_sim_init()
104 data->min_num_chal = 2; in eap_sim_init()
108 data->min_num_chal = atoi(pos + 17); in eap_sim_init()
109 if (data->min_num_chal < 2 || data->min_num_chal > 3) { in eap_sim_init()
113 (unsigned long) data->min_num_chal); in eap_sim_init()
114 os_free(data); in eap_sim_init()
119 (unsigned long) data->min_num_chal); in eap_sim_init()
122 data->result_ind = os_strstr(config->phase1, "result_ind=1") != in eap_sim_init()
126 data->use_pseudonym = !sm->init_phase2; in eap_sim_init()
127 if (config && config->anonymous_identity && data->use_pseudonym) { in eap_sim_init()
128 data->pseudonym = os_malloc(config->anonymous_identity_len); in eap_sim_init()
129 if (data->pseudonym) { in eap_sim_init()
130 os_memcpy(data->pseudonym, config->anonymous_identity, in eap_sim_init()
132 data->pseudonym_len = config->anonymous_identity_len; in eap_sim_init()
136 eap_sim_state(data, CONTINUE); in eap_sim_init()
138 return data; in eap_sim_init()
142 static void eap_sim_clear_keys(struct eap_sim_data *data, int reauth) in eap_sim_clear_keys() argument
145 os_memset(data->mk, 0, EAP_SIM_MK_LEN); in eap_sim_clear_keys()
146 os_memset(data->k_aut, 0, EAP_SIM_K_AUT_LEN); in eap_sim_clear_keys()
147 os_memset(data->k_encr, 0, EAP_SIM_K_ENCR_LEN); in eap_sim_clear_keys()
149 os_memset(data->kc, 0, 3 * EAP_SIM_KC_LEN); in eap_sim_clear_keys()
150 os_memset(data->sres, 0, 3 * EAP_SIM_SRES_LEN); in eap_sim_clear_keys()
151 os_memset(data->msk, 0, EAP_SIM_KEYING_DATA_LEN); in eap_sim_clear_keys()
152 os_memset(data->emsk, 0, EAP_EMSK_LEN); in eap_sim_clear_keys()
158 struct eap_sim_data *data = priv; in eap_sim_deinit() local
159 if (data) { in eap_sim_deinit()
160 os_free(data->ver_list); in eap_sim_deinit()
161 os_free(data->pseudonym); in eap_sim_deinit()
162 os_free(data->reauth_id); in eap_sim_deinit()
163 os_free(data->last_eap_identity); in eap_sim_deinit()
164 eap_sim_clear_keys(data, 0); in eap_sim_deinit()
165 os_free(data); in eap_sim_deinit()
170 static int eap_sim_ext_sim_req(struct eap_sm *sm, struct eap_sim_data *data) in eap_sim_ext_sim_req() argument
179 for (i = 0; i < data->num_chal; i++) { in eap_sim_ext_sim_req()
181 pos += wpa_snprintf_hex(pos, end - pos, data->rand[i], in eap_sim_ext_sim_req()
190 static int eap_sim_ext_sim_result(struct eap_sm *sm, struct eap_sim_data *data, in eap_sim_ext_sim_result() argument
209 for (i = 0; i < data->num_chal; i++) { in eap_sim_ext_sim_result()
211 data->rand[i], GSM_RAND_LEN); in eap_sim_ext_sim_result()
213 if (hexstr2bin(pos, data->kc[i], EAP_SIM_KC_LEN) < 0) in eap_sim_ext_sim_result()
216 data->kc[i], EAP_SIM_KC_LEN); in eap_sim_ext_sim_result()
222 if (hexstr2bin(pos, data->sres[i], EAP_SIM_SRES_LEN) < 0) in eap_sim_ext_sim_result()
225 data->sres[i], EAP_SIM_SRES_LEN); in eap_sim_ext_sim_result()
227 if (i + 1 < data->num_chal) { in eap_sim_ext_sim_result()
244 static int eap_sim_gsm_auth(struct eap_sm *sm, struct eap_sim_data *data) in eap_sim_gsm_auth() argument
256 return eap_sim_ext_sim_result(sm, data, conf); in eap_sim_gsm_auth()
258 return eap_sim_ext_sim_req(sm, data); in eap_sim_gsm_auth()
263 if (scard_gsm_auth(sm->scard_ctx, data->rand[0], in eap_sim_gsm_auth()
264 data->sres[0], data->kc[0]) || in eap_sim_gsm_auth()
265 scard_gsm_auth(sm->scard_ctx, data->rand[1], in eap_sim_gsm_auth()
266 data->sres[1], data->kc[1]) || in eap_sim_gsm_auth()
267 (data->num_chal > 2 && in eap_sim_gsm_auth()
268 scard_gsm_auth(sm->scard_ctx, data->rand[2], in eap_sim_gsm_auth()
269 data->sres[2], data->kc[2]))) { in eap_sim_gsm_auth()
301 for (i = 0; i < data->num_chal; i++) { in eap_sim_gsm_auth()
302 if (gsm_milenage(opc, k, data->rand[i], in eap_sim_gsm_auth()
303 data->sres[i], data->kc[i])) { in eap_sim_gsm_auth()
310 data->rand[i], GSM_RAND_LEN); in eap_sim_gsm_auth()
312 data->sres[i], EAP_SIM_SRES_LEN); in eap_sim_gsm_auth()
314 data->kc[i], EAP_SIM_KC_LEN); in eap_sim_gsm_auth()
331 for (i = 0; i < data->num_chal; i++) { in eap_sim_gsm_auth()
332 if (data->rand[i][0] == 0xaa) { in eap_sim_gsm_auth()
333 os_memcpy(data->kc[i], in eap_sim_gsm_auth()
336 os_memcpy(data->sres[i], "\xd1\xd2\xd3\xd4", in eap_sim_gsm_auth()
338 } else if (data->rand[i][0] == 0xbb) { in eap_sim_gsm_auth()
339 os_memcpy(data->kc[i], in eap_sim_gsm_auth()
342 os_memcpy(data->sres[i], "\xe1\xe2\xe3\xe4", in eap_sim_gsm_auth()
345 os_memcpy(data->kc[i], in eap_sim_gsm_auth()
348 os_memcpy(data->sres[i], "\xf1\xf2\xf3\xf4", in eap_sim_gsm_auth()
377 struct eap_sim_data *data, int id) in eap_sim_clear_identities() argument
379 if ((id & CLEAR_PSEUDONYM) && data->pseudonym) { in eap_sim_clear_identities()
381 os_free(data->pseudonym); in eap_sim_clear_identities()
382 data->pseudonym = NULL; in eap_sim_clear_identities()
383 data->pseudonym_len = 0; in eap_sim_clear_identities()
384 if (data->use_pseudonym) in eap_sim_clear_identities()
387 if ((id & CLEAR_REAUTH_ID) && data->reauth_id) { in eap_sim_clear_identities()
389 os_free(data->reauth_id); in eap_sim_clear_identities()
390 data->reauth_id = NULL; in eap_sim_clear_identities()
391 data->reauth_id_len = 0; in eap_sim_clear_identities()
393 if ((id & CLEAR_EAP_ID) && data->last_eap_identity) { in eap_sim_clear_identities()
395 os_free(data->last_eap_identity); in eap_sim_clear_identities()
396 data->last_eap_identity = NULL; in eap_sim_clear_identities()
397 data->last_eap_identity_len = 0; in eap_sim_clear_identities()
402 static int eap_sim_learn_ids(struct eap_sm *sm, struct eap_sim_data *data, in eap_sim_learn_ids() argument
415 os_free(data->pseudonym); in eap_sim_learn_ids()
425 data->pseudonym = os_malloc(attr->next_pseudonym_len + in eap_sim_learn_ids()
427 if (data->pseudonym == NULL) { in eap_sim_learn_ids()
430 data->pseudonym_len = 0; in eap_sim_learn_ids()
433 os_memcpy(data->pseudonym, attr->next_pseudonym, in eap_sim_learn_ids()
436 os_memcpy(data->pseudonym + attr->next_pseudonym_len, in eap_sim_learn_ids()
439 data->pseudonym_len = attr->next_pseudonym_len + realm_len; in eap_sim_learn_ids()
440 if (data->use_pseudonym) in eap_sim_learn_ids()
441 eap_set_anon_id(sm, data->pseudonym, in eap_sim_learn_ids()
442 data->pseudonym_len); in eap_sim_learn_ids()
446 os_free(data->reauth_id); in eap_sim_learn_ids()
447 data->reauth_id = os_memdup(attr->next_reauth_id, in eap_sim_learn_ids()
449 if (data->reauth_id == NULL) { in eap_sim_learn_ids()
452 data->reauth_id_len = 0; in eap_sim_learn_ids()
455 data->reauth_id_len = attr->next_reauth_id_len; in eap_sim_learn_ids()
458 data->reauth_id, in eap_sim_learn_ids()
459 data->reauth_id_len); in eap_sim_learn_ids()
466 static struct wpabuf * eap_sim_client_error(struct eap_sim_data *data, u8 id, in eap_sim_client_error() argument
471 eap_sim_state(data, FAILURE); in eap_sim_client_error()
472 data->num_id_req = 0; in eap_sim_client_error()
473 data->num_notification = 0; in eap_sim_client_error()
485 struct eap_sim_data *data, u8 id, in eap_sim_response_start() argument
493 data->reauth = 0; in eap_sim_response_start()
494 if (id_req == ANY_ID && data->reauth_id) { in eap_sim_response_start()
495 identity = data->reauth_id; in eap_sim_response_start()
496 identity_len = data->reauth_id_len; in eap_sim_response_start()
497 data->reauth = 1; in eap_sim_response_start()
499 data->pseudonym && in eap_sim_response_start()
500 !eap_sim_anonymous_username(data->pseudonym, in eap_sim_response_start()
501 data->pseudonym_len)) { in eap_sim_response_start()
502 identity = data->pseudonym; in eap_sim_response_start()
503 identity_len = data->pseudonym_len; in eap_sim_response_start()
504 eap_sim_clear_identities(sm, data, CLEAR_REAUTH_ID); in eap_sim_response_start()
510 if (data->pseudonym && in eap_sim_response_start()
511 eap_sim_anonymous_username(data->pseudonym, in eap_sim_response_start()
512 data->pseudonym_len)) in eap_sim_response_start()
514 eap_sim_clear_identities(sm, data, ids); in eap_sim_response_start()
518 eap_sim_clear_identities(sm, data, CLEAR_EAP_ID); in eap_sim_response_start()
529 if (!data->reauth) { in eap_sim_response_start()
531 data->nonce_mt, EAP_SIM_NONCE_MT_LEN); in eap_sim_response_start()
533 data->nonce_mt, EAP_SIM_NONCE_MT_LEN); in eap_sim_response_start()
535 data->selected_version); in eap_sim_response_start()
537 data->selected_version, NULL, 0); in eap_sim_response_start()
542 eap_sim_state(data, START_DONE); in eap_sim_response_start()
547 static struct wpabuf * eap_sim_response_challenge(struct eap_sim_data *data, in eap_sim_response_challenge() argument
555 if (data->use_result_ind) { in eap_sim_response_challenge()
561 return eap_sim_msg_finish(msg, EAP_TYPE_SIM, data->k_aut, in eap_sim_response_challenge()
562 (u8 *) data->sres, in eap_sim_response_challenge()
563 data->num_chal * EAP_SIM_SRES_LEN); in eap_sim_response_challenge()
567 static struct wpabuf * eap_sim_response_reauth(struct eap_sim_data *data, in eap_sim_response_reauth() argument
585 counter = data->counter_too_small; in eap_sim_response_reauth()
587 counter = data->counter; in eap_sim_response_reauth()
592 if (eap_sim_msg_add_encr_end(msg, data->k_encr, EAP_SIM_AT_PADDING)) { in eap_sim_response_reauth()
598 if (data->use_result_ind) { in eap_sim_response_reauth()
604 return eap_sim_msg_finish(msg, EAP_TYPE_SIM, data->k_aut, nonce_s, in eap_sim_response_reauth()
609 static struct wpabuf * eap_sim_response_notification(struct eap_sim_data *data, in eap_sim_response_notification() argument
613 u8 *k_aut = (notification & 0x4000) == 0 ? data->k_aut : NULL; in eap_sim_response_notification()
618 if (k_aut && data->reauth) { in eap_sim_response_notification()
623 wpa_printf(MSG_DEBUG, " *AT_COUNTER %d", data->counter); in eap_sim_response_notification()
624 eap_sim_msg_add(msg, EAP_SIM_AT_COUNTER, data->counter, in eap_sim_response_notification()
626 if (eap_sim_msg_add_encr_end(msg, data->k_encr, in eap_sim_response_notification()
643 struct eap_sim_data *data, u8 id, in eap_sim_process_start() argument
654 return eap_sim_client_error(data, id, in eap_sim_process_start()
658 os_free(data->ver_list); in eap_sim_process_start()
659 data->ver_list = os_memdup(attr->version_list, attr->version_list_len); in eap_sim_process_start()
660 if (data->ver_list == NULL) { in eap_sim_process_start()
663 return eap_sim_client_error(data, id, in eap_sim_process_start()
666 data->ver_list_len = attr->version_list_len; in eap_sim_process_start()
667 pos = data->ver_list; in eap_sim_process_start()
668 for (i = 0; i < data->ver_list_len / 2; i++) { in eap_sim_process_start()
679 return eap_sim_client_error(data, id, in eap_sim_process_start()
684 data->selected_version = selected_version; in eap_sim_process_start()
691 if (data->num_id_req > 0) in eap_sim_process_start()
693 data->num_id_req++; in eap_sim_process_start()
696 if (data->num_id_req > 1) in eap_sim_process_start()
698 data->num_id_req++; in eap_sim_process_start()
701 if (data->num_id_req > 2) in eap_sim_process_start()
703 data->num_id_req++; in eap_sim_process_start()
709 return eap_sim_client_error(data, id, in eap_sim_process_start()
713 return eap_sim_response_start(sm, data, id, attr->id_req); in eap_sim_process_start()
718 struct eap_sim_data *data, in eap_sim_process_challenge() argument
729 if (data->state != START_DONE) { in eap_sim_process_challenge()
732 eap_sim_state_txt(data->state)); in eap_sim_process_challenge()
733 return eap_sim_client_error(data, id, in eap_sim_process_challenge()
736 data->reauth = 0; in eap_sim_process_challenge()
742 return eap_sim_client_error(data, id, in eap_sim_process_challenge()
748 if (attr->num_chal < data->min_num_chal) { in eap_sim_process_challenge()
751 return eap_sim_client_error(data, id, in eap_sim_process_challenge()
757 return eap_sim_client_error(data, id, in eap_sim_process_challenge()
771 return eap_sim_client_error(data, id, in eap_sim_process_challenge()
775 os_memcpy(data->rand, attr->rand, attr->num_chal * GSM_RAND_LEN); in eap_sim_process_challenge()
776 data->num_chal = attr->num_chal; in eap_sim_process_challenge()
778 res = eap_sim_gsm_auth(sm, data); in eap_sim_process_challenge()
785 return eap_sim_client_error(data, id, in eap_sim_process_challenge()
788 if (data->last_eap_identity) { in eap_sim_process_challenge()
789 identity = data->last_eap_identity; in eap_sim_process_challenge()
790 identity_len = data->last_eap_identity_len; in eap_sim_process_challenge()
791 } else if (data->pseudonym && in eap_sim_process_challenge()
792 !eap_sim_anonymous_username(data->pseudonym, in eap_sim_process_challenge()
793 data->pseudonym_len)) { in eap_sim_process_challenge()
794 identity = data->pseudonym; in eap_sim_process_challenge()
795 identity_len = data->pseudonym_len; in eap_sim_process_challenge()
809 eap_sim_derive_mk(identity, identity_len, data->nonce_mt, in eap_sim_process_challenge()
810 data->selected_version, data->ver_list, in eap_sim_process_challenge()
811 data->ver_list_len, data->num_chal, in eap_sim_process_challenge()
812 (const u8 *) data->kc, data->mk); in eap_sim_process_challenge()
813 eap_sim_derive_keys(data->mk, data->k_encr, data->k_aut, data->msk, in eap_sim_process_challenge()
814 data->emsk); in eap_sim_process_challenge()
815 if (eap_sim_verify_mac(data->k_aut, reqData, attr->mac, data->nonce_mt, in eap_sim_process_challenge()
823 return eap_sim_client_error(data, id, in eap_sim_process_challenge()
832 eap_sim_clear_identities(sm, data, CLEAR_REAUTH_ID | CLEAR_EAP_ID); in eap_sim_process_challenge()
836 decrypted = eap_sim_parse_encr(data->k_encr, attr->encr_data, in eap_sim_process_challenge()
841 data, id, EAP_SIM_UNABLE_TO_PROCESS_PACKET); in eap_sim_process_challenge()
843 eap_sim_learn_ids(sm, data, &eattr); in eap_sim_process_challenge()
847 if (data->result_ind && attr->result_ind) in eap_sim_process_challenge()
848 data->use_result_ind = 1; in eap_sim_process_challenge()
850 if (data->state != FAILURE) { in eap_sim_process_challenge()
851 eap_sim_state(data, data->use_result_ind ? in eap_sim_process_challenge()
855 data->num_id_req = 0; in eap_sim_process_challenge()
856 data->num_notification = 0; in eap_sim_process_challenge()
860 data->counter = 0; in eap_sim_process_challenge()
861 return eap_sim_response_challenge(data, id); in eap_sim_process_challenge()
865 static int eap_sim_process_notification_reauth(struct eap_sim_data *data, in eap_sim_process_notification_reauth() argument
877 decrypted = eap_sim_parse_encr(data->k_encr, attr->encr_data, in eap_sim_process_notification_reauth()
886 if (eattr.counter < 0 || (size_t) eattr.counter != data->counter) { in eap_sim_process_notification_reauth()
899 static int eap_sim_process_notification_auth(struct eap_sim_data *data, in eap_sim_process_notification_auth() argument
909 if (eap_sim_verify_mac(data->k_aut, reqData, attr->mac, (u8 *) "", 0)) in eap_sim_process_notification_auth()
916 if (data->reauth && in eap_sim_process_notification_auth()
917 eap_sim_process_notification_reauth(data, attr)) { in eap_sim_process_notification_auth()
928 struct eap_sm *sm, struct eap_sim_data *data, u8 id, in eap_sim_process_notification() argument
932 if (data->num_notification > 0) { in eap_sim_process_notification()
935 return eap_sim_client_error(data, id, in eap_sim_process_notification()
938 data->num_notification++; in eap_sim_process_notification()
942 return eap_sim_client_error(data, id, in eap_sim_process_notification()
947 eap_sim_process_notification_auth(data, reqData, attr)) { in eap_sim_process_notification()
948 return eap_sim_client_error(data, id, in eap_sim_process_notification()
954 data->error_code = attr->notification; in eap_sim_process_notification()
955 eap_sim_state(data, FAILURE); in eap_sim_process_notification()
957 data->state == RESULT_SUCCESS) in eap_sim_process_notification()
958 eap_sim_state(data, SUCCESS); in eap_sim_process_notification()
959 return eap_sim_response_notification(data, id, attr->notification); in eap_sim_process_notification()
964 struct eap_sm *sm, struct eap_sim_data *data, u8 id, in eap_sim_process_reauthentication() argument
972 if (data->reauth_id == NULL) { in eap_sim_process_reauthentication()
975 return eap_sim_client_error(data, id, in eap_sim_process_reauthentication()
979 data->reauth = 1; in eap_sim_process_reauthentication()
980 if (eap_sim_verify_mac(data->k_aut, reqData, attr->mac, (u8 *) "", 0)) in eap_sim_process_reauthentication()
988 return eap_sim_client_error(data, id, in eap_sim_process_reauthentication()
999 os_memcpy(data->reauth_mac, attr->mac, EAP_SIM_MAC_LEN); in eap_sim_process_reauthentication()
1001 os_memset(data->reauth_mac, 0x12, EAP_SIM_MAC_LEN); in eap_sim_process_reauthentication()
1003 os_memcpy(data->reauth_mac, attr->mac, EAP_SIM_MAC_LEN); in eap_sim_process_reauthentication()
1006 data->reauth_mac, EAP_SIM_MAC_LEN); in eap_sim_process_reauthentication()
1011 return eap_sim_client_error(data, id, in eap_sim_process_reauthentication()
1015 decrypted = eap_sim_parse_encr(data->k_encr, attr->encr_data, in eap_sim_process_reauthentication()
1021 return eap_sim_client_error(data, id, in eap_sim_process_reauthentication()
1030 return eap_sim_client_error(data, id, in eap_sim_process_reauthentication()
1034 if (eattr.counter < 0 || (size_t) eattr.counter <= data->counter) { in eap_sim_process_reauthentication()
1037 "(%d <= %d)", eattr.counter, data->counter); in eap_sim_process_reauthentication()
1038 data->counter_too_small = eattr.counter; in eap_sim_process_reauthentication()
1045 os_free(data->last_eap_identity); in eap_sim_process_reauthentication()
1046 data->last_eap_identity = data->reauth_id; in eap_sim_process_reauthentication()
1047 data->last_eap_identity_len = data->reauth_id_len; in eap_sim_process_reauthentication()
1048 data->reauth_id = NULL; in eap_sim_process_reauthentication()
1049 data->reauth_id_len = 0; in eap_sim_process_reauthentication()
1051 res = eap_sim_response_reauth(data, id, 1, eattr.nonce_s); in eap_sim_process_reauthentication()
1056 data->counter = eattr.counter; in eap_sim_process_reauthentication()
1058 os_memcpy(data->nonce_s, eattr.nonce_s, EAP_SIM_NONCE_S_LEN); in eap_sim_process_reauthentication()
1060 data->nonce_s, EAP_SIM_NONCE_S_LEN); in eap_sim_process_reauthentication()
1062 eap_sim_derive_keys_reauth(data->counter, in eap_sim_process_reauthentication()
1063 data->reauth_id, data->reauth_id_len, in eap_sim_process_reauthentication()
1064 data->nonce_s, data->mk, data->msk, in eap_sim_process_reauthentication()
1065 data->emsk); in eap_sim_process_reauthentication()
1066 eap_sim_clear_identities(sm, data, CLEAR_REAUTH_ID | CLEAR_EAP_ID); in eap_sim_process_reauthentication()
1067 eap_sim_learn_ids(sm, data, &eattr); in eap_sim_process_reauthentication()
1069 if (data->result_ind && attr->result_ind) in eap_sim_process_reauthentication()
1070 data->use_result_ind = 1; in eap_sim_process_reauthentication()
1072 if (data->state != FAILURE) { in eap_sim_process_reauthentication()
1073 eap_sim_state(data, data->use_result_ind ? in eap_sim_process_reauthentication()
1077 data->num_id_req = 0; in eap_sim_process_reauthentication()
1078 data->num_notification = 0; in eap_sim_process_reauthentication()
1079 if (data->counter > EAP_SIM_MAX_FAST_REAUTHS) { in eap_sim_process_reauthentication()
1082 eap_sim_clear_identities(sm, data, in eap_sim_process_reauthentication()
1086 return eap_sim_response_reauth(data, id, 0, data->nonce_s); in eap_sim_process_reauthentication()
1094 struct eap_sim_data *data = priv; in eap_sim_process() local
1130 res = eap_sim_client_error(data, id, in eap_sim_process()
1137 res = eap_sim_process_start(sm, data, id, &attr); in eap_sim_process()
1140 res = eap_sim_process_challenge(sm, data, id, reqData, &attr); in eap_sim_process()
1143 res = eap_sim_process_notification(sm, data, id, reqData, in eap_sim_process()
1147 res = eap_sim_process_reauthentication(sm, data, id, reqData, in eap_sim_process()
1152 res = eap_sim_client_error(data, id, in eap_sim_process()
1157 res = eap_sim_client_error(data, id, in eap_sim_process()
1163 if (data->state == FAILURE) { in eap_sim_process()
1166 } else if (data->state == SUCCESS) { in eap_sim_process()
1167 ret->decision = data->use_result_ind ? in eap_sim_process()
1169 ret->methodState = data->use_result_ind ? in eap_sim_process()
1171 } else if (data->state == RESULT_SUCCESS) in eap_sim_process()
1184 struct eap_sim_data *data = priv; in eap_sim_has_reauth_data() local
1185 return data->pseudonym || data->reauth_id; in eap_sim_has_reauth_data()
1191 struct eap_sim_data *data = priv; in eap_sim_deinit_for_reauth() local
1192 eap_sim_clear_identities(sm, data, CLEAR_EAP_ID); in eap_sim_deinit_for_reauth()
1193 data->use_result_ind = 0; in eap_sim_deinit_for_reauth()
1194 eap_sim_clear_keys(data, 1); in eap_sim_deinit_for_reauth()
1200 struct eap_sim_data *data = priv; in eap_sim_init_for_reauth() local
1201 if (random_get_bytes(data->nonce_mt, EAP_SIM_NONCE_MT_LEN)) { in eap_sim_init_for_reauth()
1204 eap_sim_deinit(sm, data); in eap_sim_init_for_reauth()
1207 data->num_id_req = 0; in eap_sim_init_for_reauth()
1208 data->num_notification = 0; in eap_sim_init_for_reauth()
1209 eap_sim_state(data, CONTINUE); in eap_sim_init_for_reauth()
1217 struct eap_sim_data *data = priv; in eap_sim_get_identity() local
1219 if (data->reauth_id) { in eap_sim_get_identity()
1220 *len = data->reauth_id_len; in eap_sim_get_identity()
1221 return data->reauth_id; in eap_sim_get_identity()
1224 if (data->pseudonym) { in eap_sim_get_identity()
1225 *len = data->pseudonym_len; in eap_sim_get_identity()
1226 return data->pseudonym; in eap_sim_get_identity()
1235 struct eap_sim_data *data = priv; in eap_sim_isKeyAvailable() local
1236 return data->state == SUCCESS; in eap_sim_isKeyAvailable()
1242 struct eap_sim_data *data = priv; in eap_sim_getKey() local
1245 if (data->state != SUCCESS) in eap_sim_getKey()
1248 key = os_memdup(data->msk, EAP_SIM_KEYING_DATA_LEN); in eap_sim_getKey()
1260 struct eap_sim_data *data = priv; in eap_sim_get_session_id() local
1263 if (data->state != SUCCESS) in eap_sim_get_session_id()
1266 if (!data->reauth) in eap_sim_get_session_id()
1267 *len = 1 + data->num_chal * GSM_RAND_LEN + EAP_SIM_NONCE_MT_LEN; in eap_sim_get_session_id()
1275 if (!data->reauth) { in eap_sim_get_session_id()
1276 os_memcpy(id + 1, data->rand, data->num_chal * GSM_RAND_LEN); in eap_sim_get_session_id()
1277 os_memcpy(id + 1 + data->num_chal * GSM_RAND_LEN, in eap_sim_get_session_id()
1278 data->nonce_mt, EAP_SIM_NONCE_MT_LEN); in eap_sim_get_session_id()
1280 os_memcpy(id + 1, data->nonce_s, EAP_SIM_NONCE_S_LEN); in eap_sim_get_session_id()
1281 os_memcpy(id + 1 + EAP_SIM_NONCE_S_LEN, data->reauth_mac, in eap_sim_get_session_id()
1292 struct eap_sim_data *data = priv; in eap_sim_get_emsk() local
1295 if (data->state != SUCCESS) in eap_sim_get_emsk()
1298 key = os_memdup(data->emsk, EAP_EMSK_LEN); in eap_sim_get_emsk()
1310 struct eap_sim_data *data = priv; in eap_sim_get_error_code() local
1313 if (!data) in eap_sim_get_error_code()
1316 current_data_error = data->error_code; in eap_sim_get_error_code()
1319 data->error_code = NO_EAP_METHOD_ERROR; in eap_sim_get_error_code()