Lines Matching defs:sm

29 static void eap_peap_reset(struct eap_sm *sm, void *priv);
59 static int eap_peap_phase2_init(struct eap_sm *sm, struct eap_peap_data *data,
107 static void eap_peap_valid_session(struct eap_sm *sm,
112 if (!sm->cfg->tls_session_lifetime ||
113 tls_connection_resumed(sm->cfg->ssl_ctx, data->ssl.conn))
116 buf = wpabuf_alloc(1 + 1 + sm->identity_len);
120 if (sm->identity) {
123 if (sm->identity_len <= 255)
124 id_len = sm->identity_len;
128 wpabuf_put_data(buf, sm->identity, id_len);
136 static void eap_peap_req_success(struct eap_sm *sm,
153 static void eap_peap_req_failure(struct eap_sm *sm,
171 static void * eap_peap_init(struct eap_sm *sm)
180 if (sm->user && sm->user->force_version >= 0) {
181 data->force_version = sm->user->force_version;
189 if (eap_server_tls_ssl_init(sm, &data->ssl, 0, EAP_TYPE_PEAP)) {
191 eap_peap_reset(sm, data);
199 static void eap_peap_reset(struct eap_sm *sm, void *priv)
205 data->phase2_method->reset(sm, data->phase2_priv);
206 eap_server_tls_ssl_deinit(sm, &data->ssl);
214 static struct wpabuf * eap_peap_build_start(struct eap_sm *sm,
236 static struct wpabuf * eap_peap_build_phase2_req(struct eap_sm *sm,
248 buf = data->phase2_method->buildReq(sm, data->phase2_priv, id);
264 encr_req = eap_server_tls_encrypt(sm, &data->ssl, &msgbuf);
272 static struct wpabuf * eap_peap_build_phase2_soh(struct eap_sm *sm,
303 encr_req = eap_server_tls_encrypt(sm, &data->ssl, &msgbuf);
327 static int eap_peap_derive_cmk(struct eap_sm *sm, struct eap_peap_data *data)
350 tk = eap_server_tls_derive_key(sm, &data->ssl, label,
357 if (tls_connection_resumed(sm->cfg->ssl_ctx, data->ssl.conn)) {
403 static struct wpabuf * eap_peap_build_phase2_tlv(struct eap_sm *sm,
451 if (eap_peap_derive_cmk(sm, data) < 0 ||
488 encr_req = eap_server_tls_encrypt(sm, &data->ssl, buf);
495 static struct wpabuf * eap_peap_build_phase2_term(struct eap_sm *sm,
516 encr_req = eap_server_tls_encrypt(sm, &data->ssl, &msgbuf);
520 !tls_connection_resumed(sm->cfg->ssl_ctx, data->ssl.conn)) {
541 static struct wpabuf * eap_peap_buildReq(struct eap_sm *sm, void *priv, u8 id)
557 return eap_peap_build_start(sm, data, id);
560 if (tls_connection_established(sm->cfg->ssl_ctx,
574 eap_peap_phase2_init(sm, data, EAP_VENDOR_IETF,
585 data->ssl.tls_out = eap_peap_build_phase2_req(sm, data, id);
591 data->ssl.tls_out = eap_peap_build_phase2_soh(sm, data, id);
597 data->ssl.tls_out = eap_peap_build_phase2_tlv(sm, data, id);
600 data->ssl.tls_out = eap_peap_build_phase2_term(sm, data, id,
606 data->ssl.tls_out = eap_peap_build_phase2_term(sm, data, id,
620 static bool eap_peap_check(struct eap_sm *sm, void *priv,
636 static int eap_peap_phase2_init(struct eap_sm *sm, struct eap_peap_data *data,
640 data->phase2_method->reset(sm, data->phase2_priv);
648 sm->init_phase2 = 1;
649 data->phase2_priv = data->phase2_method->init(sm);
650 sm->init_phase2 = 0;
655 static int eap_tlv_validate_cryptobinding(struct eap_sm *sm,
707 static void eap_peap_process_phase2_tlv(struct eap_sm *sm,
774 if (eap_tlv_validate_cryptobinding(sm, data, crypto_tlv - 4,
808 eap_peap_valid_session(sm, data);
827 static void eap_peap_process_phase2_soh(struct eap_sm *sm,
949 next_type = sm->user->methods[0].method;
950 sm->user_eap_method_index = 1;
952 sm->user->methods[0].vendor, next_type);
953 eap_peap_phase2_init(sm, data, sm->user->methods[0].vendor, next_type);
958 static void eap_peap_process_phase2_response(struct eap_sm *sm,
969 eap_peap_process_phase2_tlv(sm, data, in_data);
975 eap_peap_process_phase2_soh(sm, data, in_data);
993 eap_sm_process_nak(sm, pos + 1, left - 1);
994 if (sm->user && sm->user_eap_method_index < EAP_MAX_METHODS &&
995 (sm->user->methods[sm->user_eap_method_index].vendor !=
997 sm->user->methods[sm->user_eap_method_index].method !=
999 next_vendor = sm->user->methods[
1000 sm->user_eap_method_index].vendor;
1001 next_type = sm->user->methods[
1002 sm->user_eap_method_index++].method;
1007 eap_peap_req_failure(sm, data);
1011 eap_peap_phase2_init(sm, data, next_vendor, next_type);
1015 if (data->phase2_method->check(sm, data->phase2_priv, in_data)) {
1021 data->phase2_method->process(sm, data->phase2_priv, in_data);
1023 if (sm->method_pending == METHOD_PENDING_WAIT) {
1030 if (!data->phase2_method->isDone(sm, data->phase2_priv))
1033 if (!data->phase2_method->isSuccess(sm, data->phase2_priv)) {
1035 eap_peap_req_failure(sm, data);
1038 eap_peap_phase2_init(sm, data, next_vendor, next_type);
1045 sm, data->phase2_priv, &data->phase2_key_len);
1049 eap_peap_req_failure(sm, data);
1050 eap_peap_phase2_init(sm, data, EAP_VENDOR_IETF,
1060 if (eap_user_get(sm, sm->identity, sm->identity_len, 1) != 0) {
1064 sm->identity, sm->identity_len);
1065 eap_peap_req_failure(sm, data);
1072 if (data->state != PHASE2_SOH && sm->cfg->tnc &&
1084 next_vendor = sm->user->methods[0].vendor;
1085 next_type = sm->user->methods[0].method;
1086 sm->user_eap_method_index = 1;
1091 eap_peap_req_success(sm, data);
1103 eap_peap_phase2_init(sm, data, next_vendor, next_type);
1107 static void eap_peap_process_phase2(struct eap_sm *sm,
1122 eap_peap_process_phase2_response(sm, data,
1129 in_decrypted = tls_connection_decrypt(sm->cfg->ssl_ctx, data->ssl.conn,
1170 eap_peap_req_failure(sm, data);
1180 eap_peap_req_failure(sm, data);
1188 eap_peap_process_phase2_response(sm, data, in_decrypted);
1194 eap_peap_valid_session(sm, data);
1211 static int eap_peap_process_version(struct eap_sm *sm, void *priv,
1234 static void eap_peap_process_msg(struct eap_sm *sm, void *priv,
1241 if (eap_server_tls_phase1(sm, &data->ssl) < 0) {
1248 eap_peap_phase2_init(sm, data, EAP_VENDOR_IETF,
1256 eap_peap_process_phase2(sm, data, respData, data->ssl.tls_in);
1260 eap_peap_valid_session(sm, data);
1273 static void eap_peap_process(struct eap_sm *sm, void *priv,
1281 if (eap_server_tls_process(sm, &data->ssl, respData, data,
1289 !tls_connection_established(sm->cfg->ssl_ctx, data->ssl.conn) ||
1290 !tls_connection_resumed(sm->cfg->ssl_ctx, data->ssl.conn))
1314 os_free(sm->identity);
1315 sm->identity = os_malloc(id_len ? id_len : 1);
1316 if (!sm->identity) {
1317 sm->identity_len = 0;
1322 os_memcpy(sm->identity, pos, id_len);
1323 sm->identity_len = id_len;
1325 if (eap_user_get(sm, sm->identity, sm->identity_len, 1) != 0) {
1327 sm->identity, sm->identity_len);
1334 eap_peap_req_success(sm, data);
1340 static bool eap_peap_isDone(struct eap_sm *sm, void *priv)
1347 static u8 * eap_peap_getKey(struct eap_sm *sm, void *priv, size_t *len)
1396 eapKeyData = eap_server_tls_derive_key(sm, &data->ssl,
1412 static u8 * eap_peap_get_emsk(struct eap_sm *sm, void *priv, size_t *len)
1438 eapKeyData = eap_server_tls_derive_key(sm, &data->ssl,
1458 static bool eap_peap_isSuccess(struct eap_sm *sm, void *priv)
1465 static u8 * eap_peap_get_session_id(struct eap_sm *sm, void *priv, size_t *len)
1472 return eap_server_tls_derive_session_id(sm, &data->ssl, EAP_TYPE_PEAP,