Lines Matching refs:data
68 static void eap_sim_state(struct eap_sim_data *data, int state) in eap_sim_state() argument
71 eap_sim_state_txt(data->state), in eap_sim_state()
73 data->state = state; in eap_sim_state()
79 struct eap_sim_data *data; in eap_sim_init() local
86 data = os_zalloc(sizeof(*data)); in eap_sim_init()
87 if (data == NULL) in eap_sim_init()
89 data->state = START; in eap_sim_init()
91 return data; in eap_sim_init()
97 struct eap_sim_data *data = priv; in eap_sim_reset() local
98 os_free(data->next_pseudonym); in eap_sim_reset()
99 os_free(data->next_reauth_id); in eap_sim_reset()
100 bin_clear_free(data, sizeof(*data)); in eap_sim_reset()
105 struct eap_sim_data *data, u8 id) in eap_sim_build_start() argument
114 data->start_round++; in eap_sim_build_start()
116 if (data->start_round == 1 && (sm->cfg->eap_sim_id & 0x04)) { in eap_sim_build_start()
130 } else if (data->start_round == 1) { in eap_sim_build_start()
137 } else if (data->start_round > 3) { in eap_sim_build_start()
141 } else if (data->start_round == 0) { in eap_sim_build_start()
166 static int eap_sim_build_encr(struct eap_sm *sm, struct eap_sim_data *data, in eap_sim_build_encr() argument
170 os_free(data->next_pseudonym); in eap_sim_build_encr()
173 data->next_pseudonym = NULL; in eap_sim_build_encr()
175 data->next_pseudonym = in eap_sim_build_encr()
180 data->next_pseudonym = NULL; in eap_sim_build_encr()
182 os_free(data->next_reauth_id); in eap_sim_build_encr()
185 data->next_reauth_id = NULL; in eap_sim_build_encr()
186 } else if (data->counter <= EAP_SIM_MAX_FAST_REAUTHS) { in eap_sim_build_encr()
187 data->next_reauth_id = in eap_sim_build_encr()
193 data->next_reauth_id = NULL; in eap_sim_build_encr()
196 if (data->next_pseudonym == NULL && data->next_reauth_id == NULL && in eap_sim_build_encr()
215 if (data->next_pseudonym) { in eap_sim_build_encr()
217 data->next_pseudonym); in eap_sim_build_encr()
219 os_strlen(data->next_pseudonym), in eap_sim_build_encr()
220 (u8 *) data->next_pseudonym, in eap_sim_build_encr()
221 os_strlen(data->next_pseudonym)); in eap_sim_build_encr()
224 if (data->next_reauth_id) { in eap_sim_build_encr()
226 data->next_reauth_id); in eap_sim_build_encr()
228 os_strlen(data->next_reauth_id), in eap_sim_build_encr()
229 (u8 *) data->next_reauth_id, in eap_sim_build_encr()
230 os_strlen(data->next_reauth_id)); in eap_sim_build_encr()
233 if (eap_sim_msg_add_encr_end(msg, data->k_encr, EAP_SIM_AT_PADDING)) { in eap_sim_build_encr()
244 struct eap_sim_data *data, in eap_sim_build_challenge() argument
253 eap_sim_msg_add(msg, EAP_SIM_AT_RAND, 0, (u8 *) data->rand, in eap_sim_build_challenge()
254 data->num_chal * GSM_RAND_LEN); in eap_sim_build_challenge()
256 if (eap_sim_build_encr(sm, data, msg, 0, NULL)) { in eap_sim_build_challenge()
268 return eap_sim_msg_finish(msg, EAP_TYPE_SIM, data->k_aut, in eap_sim_build_challenge()
269 data->nonce_mt, EAP_SIM_NONCE_MT_LEN); in eap_sim_build_challenge()
274 struct eap_sim_data *data, u8 id) in eap_sim_build_reauth() argument
281 if (random_get_bytes(data->nonce_s, EAP_SIM_NONCE_S_LEN)) in eap_sim_build_reauth()
284 data->nonce_s, EAP_SIM_NONCE_S_LEN); in eap_sim_build_reauth()
286 eap_sim_derive_keys(data->mk, data->k_encr, data->k_aut, data->msk, in eap_sim_build_reauth()
287 data->emsk); in eap_sim_build_reauth()
288 eap_sim_derive_keys_reauth(data->counter, sm->identity, in eap_sim_build_reauth()
289 sm->identity_len, data->nonce_s, data->mk, in eap_sim_build_reauth()
290 data->msk, data->emsk); in eap_sim_build_reauth()
295 if (eap_sim_build_encr(sm, data, msg, data->counter, data->nonce_s)) { in eap_sim_build_reauth()
307 buf = eap_sim_msg_finish(msg, EAP_TYPE_SIM, data->k_aut, NULL, 0); in eap_sim_build_reauth()
312 os_memcpy(data->reauth_mac, in eap_sim_build_reauth()
321 struct eap_sim_data *data, in eap_sim_build_notification() argument
329 wpa_printf(MSG_DEBUG, " AT_NOTIFICATION (%d)", data->notification); in eap_sim_build_notification()
330 eap_sim_msg_add(msg, EAP_SIM_AT_NOTIFICATION, data->notification, in eap_sim_build_notification()
332 if (data->use_result_ind) { in eap_sim_build_notification()
333 if (data->reauth) { in eap_sim_build_notification()
339 data->counter); in eap_sim_build_notification()
340 eap_sim_msg_add(msg, EAP_SIM_AT_COUNTER, data->counter, in eap_sim_build_notification()
343 if (eap_sim_msg_add_encr_end(msg, data->k_encr, in eap_sim_build_notification()
355 return eap_sim_msg_finish(msg, EAP_TYPE_SIM, data->k_aut, NULL, 0); in eap_sim_build_notification()
361 struct eap_sim_data *data = priv; in eap_sim_buildReq() local
363 switch (data->state) { in eap_sim_buildReq()
365 return eap_sim_build_start(sm, data, id); in eap_sim_buildReq()
367 return eap_sim_build_challenge(sm, data, id); in eap_sim_buildReq()
369 return eap_sim_build_reauth(sm, data, id); in eap_sim_buildReq()
371 return eap_sim_build_notification(sm, data, id); in eap_sim_buildReq()
374 "buildReq", data->state); in eap_sim_buildReq()
397 static bool eap_sim_unexpected_subtype(struct eap_sim_data *data, in eap_sim_unexpected_subtype() argument
403 switch (data->state) { in eap_sim_unexpected_subtype()
434 "processing a response", data->state); in eap_sim_unexpected_subtype()
442 static int eap_sim_supported_ver(struct eap_sim_data *data, int version) in eap_sim_supported_ver() argument
449 struct eap_sim_data *data, in eap_sim_process_start() argument
461 if (data->start_round == 0) { in eap_sim_process_start()
508 data->reauth = eap_sim_db_get_reauth_entry( in eap_sim_process_start()
511 if (data->reauth == NULL) { in eap_sim_process_start()
518 if (data->reauth->counter > in eap_sim_process_start()
525 os_strlcpy(data->permanent, in eap_sim_process_start()
526 data->reauth->permanent, in eap_sim_process_start()
527 sizeof(data->permanent)); in eap_sim_process_start()
529 data->reauth->permanent, in eap_sim_process_start()
533 data->reauth); in eap_sim_process_start()
534 data->reauth = NULL; in eap_sim_process_start()
540 data->reauth->counter); in eap_sim_process_start()
541 os_strlcpy(data->permanent, data->reauth->permanent, in eap_sim_process_start()
542 sizeof(data->permanent)); in eap_sim_process_start()
543 data->counter = data->reauth->counter; in eap_sim_process_start()
544 os_memcpy(data->mk, data->reauth->mk, EAP_SIM_MK_LEN); in eap_sim_process_start()
545 eap_sim_state(data, REAUTH); in eap_sim_process_start()
562 os_strlcpy(data->permanent, permanent, in eap_sim_process_start()
563 sizeof(data->permanent)); in eap_sim_process_start()
567 os_strlcpy(data->permanent, username, sizeof(data->permanent)); in eap_sim_process_start()
633 os_strlcpy(data->permanent, username, sizeof(data->permanent)); in eap_sim_process_start()
652 if (!eap_sim_supported_ver(data, attr->selected_version)) { in eap_sim_process_start()
658 data->counter = 0; /* reset re-auth counter since this is full auth */ in eap_sim_process_start()
659 data->reauth = NULL; in eap_sim_process_start()
661 data->num_chal = eap_sim_db_get_gsm_triplets( in eap_sim_process_start()
662 sm->cfg->eap_sim_db_priv, data->permanent, EAP_SIM_MAX_CHAL, in eap_sim_process_start()
663 (u8 *) data->rand, (u8 *) data->kc, (u8 *) data->sres, sm); in eap_sim_process_start()
664 if (data->num_chal == EAP_SIM_DB_PENDING) { in eap_sim_process_start()
670 if (data->num_chal < 2) { in eap_sim_process_start()
676 if (data->permanent[0] == EAP_SIM_PERMANENT_PREFIX) in eap_sim_process_start()
677 os_strlcpy(sm->imsi, &data->permanent[1], sizeof(sm->imsi)); in eap_sim_process_start()
688 os_memcpy(data->nonce_mt, attr->nonce_mt, EAP_SIM_NONCE_MT_LEN); in eap_sim_process_start()
692 data->num_chal, (const u8 *) data->kc, data->mk); in eap_sim_process_start()
693 eap_sim_derive_keys(data->mk, data->k_encr, data->k_aut, data->msk, in eap_sim_process_start()
694 data->emsk); in eap_sim_process_start()
696 eap_sim_state(data, CHALLENGE); in eap_sim_process_start()
700 data->notification = EAP_SIM_GENERAL_FAILURE_BEFORE_AUTH; in eap_sim_process_start()
701 eap_sim_state(data, NOTIFICATION); in eap_sim_process_start()
706 struct eap_sim_data *data, in eap_sim_process_challenge() argument
711 eap_sim_verify_mac(data->k_aut, respData, attr->mac, in eap_sim_process_challenge()
712 (u8 *) data->sres, in eap_sim_process_challenge()
713 data->num_chal * EAP_SIM_SRES_LEN)) { in eap_sim_process_challenge()
716 data->notification = EAP_SIM_GENERAL_FAILURE_BEFORE_AUTH; in eap_sim_process_challenge()
717 eap_sim_state(data, NOTIFICATION); in eap_sim_process_challenge()
724 data->use_result_ind = 1; in eap_sim_process_challenge()
725 data->notification = EAP_SIM_SUCCESS; in eap_sim_process_challenge()
726 eap_sim_state(data, NOTIFICATION); in eap_sim_process_challenge()
728 eap_sim_state(data, SUCCESS); in eap_sim_process_challenge()
730 if (data->next_pseudonym) { in eap_sim_process_challenge()
732 data->permanent, in eap_sim_process_challenge()
733 data->next_pseudonym); in eap_sim_process_challenge()
734 data->next_pseudonym = NULL; in eap_sim_process_challenge()
736 if (data->next_reauth_id) { in eap_sim_process_challenge()
737 eap_sim_db_add_reauth(sm->cfg->eap_sim_db_priv, data->permanent, in eap_sim_process_challenge()
738 data->next_reauth_id, data->counter + 1, in eap_sim_process_challenge()
739 data->mk); in eap_sim_process_challenge()
740 data->next_reauth_id = NULL; in eap_sim_process_challenge()
746 struct eap_sim_data *data, in eap_sim_process_reauth() argument
754 eap_sim_verify_mac(data->k_aut, respData, attr->mac, data->nonce_s, in eap_sim_process_reauth()
767 decrypted = eap_sim_parse_encr(data->k_encr, attr->encr_data, in eap_sim_process_reauth()
776 if (eattr.counter != data->counter) { in eap_sim_process_reauth()
779 eattr.counter, data->counter); in eap_sim_process_reauth()
792 data->start_round = -1; in eap_sim_process_reauth()
793 eap_sim_state(data, START); in eap_sim_process_reauth()
798 data->use_result_ind = 1; in eap_sim_process_reauth()
799 data->notification = EAP_SIM_SUCCESS; in eap_sim_process_reauth()
800 eap_sim_state(data, NOTIFICATION); in eap_sim_process_reauth()
802 eap_sim_state(data, SUCCESS); in eap_sim_process_reauth()
804 if (data->next_reauth_id) { in eap_sim_process_reauth()
805 eap_sim_db_add_reauth(sm->cfg->eap_sim_db_priv, data->permanent, in eap_sim_process_reauth()
806 data->next_reauth_id, in eap_sim_process_reauth()
807 data->counter + 1, data->mk); in eap_sim_process_reauth()
808 data->next_reauth_id = NULL; in eap_sim_process_reauth()
811 data->reauth); in eap_sim_process_reauth()
812 data->reauth = NULL; in eap_sim_process_reauth()
818 data->notification = EAP_SIM_GENERAL_FAILURE_BEFORE_AUTH; in eap_sim_process_reauth()
819 eap_sim_state(data, NOTIFICATION); in eap_sim_process_reauth()
820 eap_sim_db_remove_reauth(sm->cfg->eap_sim_db_priv, data->reauth); in eap_sim_process_reauth()
821 data->reauth = NULL; in eap_sim_process_reauth()
827 struct eap_sim_data *data, in eap_sim_process_client_error() argument
833 if (data->notification == EAP_SIM_SUCCESS && data->use_result_ind) in eap_sim_process_client_error()
834 eap_sim_state(data, SUCCESS); in eap_sim_process_client_error()
836 eap_sim_state(data, FAILURE); in eap_sim_process_client_error()
841 struct eap_sim_data *data, in eap_sim_process_notification() argument
846 if (data->notification == EAP_SIM_SUCCESS && data->use_result_ind) in eap_sim_process_notification()
847 eap_sim_state(data, SUCCESS); in eap_sim_process_notification()
849 eap_sim_state(data, FAILURE); in eap_sim_process_notification()
856 struct eap_sim_data *data = priv; in eap_sim_process() local
870 if (eap_sim_unexpected_subtype(data, subtype)) { in eap_sim_process()
873 data->notification = EAP_SIM_GENERAL_FAILURE_BEFORE_AUTH; in eap_sim_process()
874 eap_sim_state(data, NOTIFICATION); in eap_sim_process()
881 (data->state == START || data->state == CHALLENGE || in eap_sim_process()
882 data->state == REAUTH)) { in eap_sim_process()
883 data->notification = in eap_sim_process()
885 eap_sim_state(data, NOTIFICATION); in eap_sim_process()
888 eap_sim_state(data, FAILURE); in eap_sim_process()
893 eap_sim_process_client_error(sm, data, respData, &attr); in eap_sim_process()
897 switch (data->state) { in eap_sim_process()
899 eap_sim_process_start(sm, data, respData, &attr); in eap_sim_process()
902 eap_sim_process_challenge(sm, data, respData, &attr); in eap_sim_process()
905 eap_sim_process_reauth(sm, data, respData, &attr); in eap_sim_process()
908 eap_sim_process_notification(sm, data, respData, &attr); in eap_sim_process()
912 "process", data->state); in eap_sim_process()
920 struct eap_sim_data *data = priv; in eap_sim_isDone() local
921 return data->state == SUCCESS || data->state == FAILURE; in eap_sim_isDone()
927 struct eap_sim_data *data = priv; in eap_sim_getKey() local
930 if (data->state != SUCCESS) in eap_sim_getKey()
933 key = os_memdup(data->msk, EAP_SIM_KEYING_DATA_LEN); in eap_sim_getKey()
943 struct eap_sim_data *data = priv; in eap_sim_get_emsk() local
946 if (data->state != SUCCESS) in eap_sim_get_emsk()
949 key = os_memdup(data->emsk, EAP_EMSK_LEN); in eap_sim_get_emsk()
959 struct eap_sim_data *data = priv; in eap_sim_isSuccess() local
960 return data->state == SUCCESS; in eap_sim_isSuccess()
966 struct eap_sim_data *data = priv; in eap_sim_get_session_id() local
969 if (data->state != SUCCESS) in eap_sim_get_session_id()
972 if (!data->reauth) in eap_sim_get_session_id()
973 *len = 1 + data->num_chal * GSM_RAND_LEN + EAP_SIM_NONCE_MT_LEN; in eap_sim_get_session_id()
981 if (!data->reauth) { in eap_sim_get_session_id()
982 os_memcpy(id + 1, data->rand, data->num_chal * GSM_RAND_LEN); in eap_sim_get_session_id()
983 os_memcpy(id + 1 + data->num_chal * GSM_RAND_LEN, in eap_sim_get_session_id()
984 data->nonce_mt, EAP_SIM_NONCE_MT_LEN); in eap_sim_get_session_id()
986 os_memcpy(id + 1, data->nonce_s, EAP_SIM_NONCE_S_LEN); in eap_sim_get_session_id()
987 os_memcpy(id + 1 + EAP_SIM_NONCE_S_LEN, data->reauth_mac, in eap_sim_get_session_id()