#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include "common.h"
#include "eap_i.h"
#include "wpa_supplicant.h"
#include "config_ssid.h"
#include "tls.h"
#include "crypto.h"
#include "pcsc_funcs.h"
#include "wpa_ctrl.h"
Include dependency graph for eap.c:
Go to the source code of this file.
Defines | |
#define | EAP_MAX_AUTH_ROUNDS 50 |
#define | NUM_EAP_METHODS (sizeof(eap_methods) / sizeof(eap_methods[0])) |
#define | SM_STATE(machine, state) |
#define | SM_ENTRY(machine, state) |
#define | SM_ENTER(machine, state) sm_ ## machine ## _ ## state ## _Enter(sm, 0) |
#define | SM_ENTER_GLOBAL(machine, state) sm_ ## machine ## _ ## state ## _Enter(sm, 1) |
#define | SM_STEP(machine) static void sm_ ## machine ## _Step(struct eap_sm *sm) |
#define | SM_STEP_RUN(machine) sm_ ## machine ## _Step(sm) |
Enumerations | |
enum | eap_ctrl_req_type { TYPE_IDENTITY, TYPE_PASSWORD, TYPE_OTP, TYPE_PIN, TYPE_NEW_PASSWORD, TYPE_PASSPHRASE } |
Functions | |
const struct eap_method * | eap_sm_get_eap_methods (int method) |
Get EAP method based on type number. | |
SM_STATE (EAP, INITIALIZE) | |
SM_STATE (EAP, DISABLED) | |
SM_STATE (EAP, IDLE) | |
SM_STATE (EAP, RECEIVED) | |
SM_STATE (EAP, GET_METHOD) | |
SM_STATE (EAP, METHOD) | |
SM_STATE (EAP, SEND_RESPONSE) | |
SM_STATE (EAP, DISCARD) | |
SM_STATE (EAP, IDENTITY) | |
SM_STATE (EAP, NOTIFICATION) | |
SM_STATE (EAP, RETRANSMIT) | |
SM_STATE (EAP, SUCCESS) | |
SM_STATE (EAP, FAILURE) | |
SM_STEP (EAP) | |
u8 * | eap_sm_buildIdentity (struct eap_sm *sm, int id, size_t *len, int encrypted) |
Build EAP-Identity/Response for the current network. | |
eap_sm * | eap_sm_init (void *eapol_ctx, struct eapol_callbacks *eapol_cb, void *msg_ctx, struct eap_config *conf) |
Allocate and initialize EAP state machine. | |
void | eap_sm_deinit (struct eap_sm *sm) |
Deinitialize and free an EAP state machine. | |
int | eap_sm_step (struct eap_sm *sm) |
Step EAP state machine. | |
void | eap_sm_abort (struct eap_sm *sm) |
Abort EAP authentication. | |
int | eap_sm_get_status (struct eap_sm *sm, char *buf, size_t buflen, int verbose) |
Get EAP state machine status. | |
void | eap_sm_request_identity (struct eap_sm *sm, struct wpa_ssid *config) |
Request identity from user (ctrl_iface). | |
void | eap_sm_request_password (struct eap_sm *sm, struct wpa_ssid *config) |
Request password from user (ctrl_iface). | |
void | eap_sm_request_new_password (struct eap_sm *sm, struct wpa_ssid *config) |
Request new password from user (ctrl_iface). | |
void | eap_sm_request_pin (struct eap_sm *sm, struct wpa_ssid *config) |
Request SIM or smart card PIN from user (ctrl_iface). | |
void | eap_sm_request_otp (struct eap_sm *sm, struct wpa_ssid *config, const char *msg, size_t msg_len) |
Request one time password from user (ctrl_iface). | |
void | eap_sm_request_passphrase (struct eap_sm *sm, struct wpa_ssid *config) |
Request passphrase from user (ctrl_iface). | |
void | eap_sm_notify_ctrl_attached (struct eap_sm *sm) |
Notification of attached monitor. | |
u8 | eap_get_type (const char *name) |
Get EAP type for the given EAP method name. | |
const char * | eap_get_name (EapType type) |
Get EAP method name for the given EAP type. | |
size_t | eap_get_names (char *buf, size_t buflen) |
Get space separated list of names for supported EAP methods. | |
u8 | eap_get_phase2_type (const char *name) |
Get EAP type for the given EAP phase 2 method name. | |
u8 * | eap_get_phase2_types (struct wpa_ssid *config, size_t *count) |
Get list of allowed EAP phase 2 types. | |
void | eap_set_fast_reauth (struct eap_sm *sm, int enabled) |
Update fast_reauth setting. | |
void | eap_set_workaround (struct eap_sm *sm, unsigned int workaround) |
Update EAP workarounds setting. | |
wpa_ssid * | eap_get_config (struct eap_sm *sm) |
Get current network configuration. | |
int | eap_key_available (struct eap_sm *sm) |
Get key availability (eapKeyAvailable variable). | |
void | eap_notify_success (struct eap_sm *sm) |
Notify EAP state machine about external success trigger. | |
void | eap_notify_lower_layer_success (struct eap_sm *sm) |
Notification of lower layer success. | |
const u8 * | eap_get_eapKeyData (struct eap_sm *sm, size_t *len) |
Get master session key (MSK) from EAP state machine. | |
u8 * | eap_get_eapRespData (struct eap_sm *sm, size_t *len) |
Get EAP response data. | |
void | eap_register_scard_ctx (struct eap_sm *sm, void *ctx) |
Notification of smart card context. | |
const u8 * | eap_hdr_validate (EapType eap_type, const u8 *msg, size_t msglen, size_t *plen) |
Validate EAP header. | |
void | eap_set_config_blob (struct eap_sm *sm, struct wpa_config_blob *blob) |
Set or add a named configuration blob. | |
const struct wpa_config_blob * | eap_get_config_blob (struct eap_sm *sm, const char *name) |
Get a named configuration blob. | |
void | eap_set_force_disabled (struct eap_sm *sm, int disabled) |
Set force_disabled flag. |
Alternatively, this software may be distributed under the terms of BSD license.
See README and COPYING for more details.
This file implements the Peer State Machine as defined in RFC 4137. The used states and state transitions match mostly with the RFC. However, there are couple of additional transitions for working around small issues noticed during testing. These exceptions are explained in comments within the functions in this file. The method functions, m.func(), are similar to the ones used in RFC 4137, but some small changes have used here to optimize operations and to add functionality needed for fast re-authentication (session resumption).
Definition in file eap.c.
|
Value: if (!global || sm->machine ## _state != machine ## _ ## state) { \ sm->changed = TRUE; \ wpa_printf(MSG_DEBUG, "EAP: " #machine " entering state " #state); \ } \ sm->machine ## _state = machine ## _ ## state; |
|
Value: static void sm_ ## machine ## _ ## state ## _Enter(struct eap_sm *sm, \ int global) |
|
Get current network configuration.
|
|
Get a named configuration blob.
|
|
Get master session key (MSK) from EAP state machine.
|
|
Get EAP response data.
|
|
Get EAP method name for the given EAP type.
|
|
Get space separated list of names for supported EAP methods.
|
|
Get EAP type for the given EAP phase 2 method name.
Definition at line 1667 of file eap.c. Here is the call graph for this function: |
|
Get list of allowed EAP phase 2 types.
|
|
Get EAP type for the given EAP method name.
|
|
Validate EAP header.
Definition at line 1889 of file eap.c. Here is the call graph for this function: |
|
Get key availability (eapKeyAvailable variable).
|
|
Notification of lower layer success.
|
|
Notify EAP state machine about external success trigger.
|
|
Notification of smart card context.
|
|
Set or add a named configuration blob.
|
|
Update fast_reauth setting.
|
|
Set force_disabled flag.
|
|
Update EAP workarounds setting.
|
|
Abort EAP authentication.
|
|
Build EAP-Identity/Response for the current network.
Definition at line 940 of file eap.c. Here is the call graph for this function: |
|
Deinitialize and free an EAP state machine.
Definition at line 1177 of file eap.c. Here is the call graph for this function: |
|
Get EAP method based on type number.
|
|
Get EAP state machine status.
Definition at line 1313 of file eap.c. Here is the call graph for this function: |
|
Allocate and initialize EAP state machine.
Definition at line 1138 of file eap.c. Here is the call graph for this function: |
|
Notification of attached monitor.
Definition at line 1559 of file eap.c. Here is the call graph for this function: |
|
Request identity from user (ctrl_iface).
|
|
Request new password from user (ctrl_iface).
|
|
Request one time password from user (ctrl_iface).
|
|
Request passphrase from user (ctrl_iface).
|
|
Request password from user (ctrl_iface).
|
|
Request SIM or smart card PIN from user (ctrl_iface).
|
|
Step EAP state machine.
|