diff options
author | Jouni Malinen <j@w1.fi> | 2014-11-29 21:46:45 (GMT) |
---|---|---|
committer | Jouni Malinen <j@w1.fi> | 2014-11-30 13:53:11 (GMT) |
commit | d1f89dd732ab5f579d2f362c0523912f756c2b2d (patch) | |
tree | 14f9f619e422510ca8e109a7692c9fa6b7556157 /src/eap_server/eap_server_aka.c | |
parent | d68f74c5ff681f8d3b0d7d0338857dec81ced106 (diff) | |
download | hostap-d1f89dd732ab5f579d2f362c0523912f756c2b2d.zip hostap-d1f89dd732ab5f579d2f362c0523912f756c2b2d.tar.gz hostap-d1f89dd732ab5f579d2f362c0523912f756c2b2d.tar.bz2 |
EAP server: Add getSessionId
This extends EAP server implementation to derive Session-Id similarly to
the existing EAP peer implementation.
Signed-off-by: Jouni Malinen <j@w1.fi>
Diffstat (limited to 'src/eap_server/eap_server_aka.c')
-rw-r--r-- | src/eap_server/eap_server_aka.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/eap_server/eap_server_aka.c b/src/eap_server/eap_server_aka.c index 09b976e..db9b6aa 100644 --- a/src/eap_server/eap_server_aka.c +++ b/src/eap_server/eap_server_aka.c @@ -1294,6 +1294,28 @@ static Boolean eap_aka_isSuccess(struct eap_sm *sm, void *priv) } +static u8 * eap_aka_get_session_id(struct eap_sm *sm, void *priv, size_t *len) +{ + struct eap_aka_data *data = priv; + u8 *id; + + if (data->state != SUCCESS) + return NULL; + + *len = 1 + EAP_AKA_RAND_LEN + EAP_AKA_AUTN_LEN; + id = os_malloc(*len); + if (id == NULL) + return NULL; + + id[0] = data->eap_method; + os_memcpy(id + 1, data->rand, EAP_AKA_RAND_LEN); + os_memcpy(id + 1 + EAP_AKA_RAND_LEN, data->autn, EAP_AKA_AUTN_LEN); + wpa_hexdump(MSG_DEBUG, "EAP-AKA: Derived Session-Id", id, *len); + + return id; +} + + int eap_server_aka_register(void) { struct eap_method *eap; @@ -1313,6 +1335,7 @@ int eap_server_aka_register(void) eap->getKey = eap_aka_getKey; eap->isSuccess = eap_aka_isSuccess; eap->get_emsk = eap_aka_get_emsk; + eap->getSessionId = eap_aka_get_session_id; ret = eap_server_method_register(eap); if (ret) @@ -1342,6 +1365,7 @@ int eap_server_aka_prime_register(void) eap->getKey = eap_aka_getKey; eap->isSuccess = eap_aka_isSuccess; eap->get_emsk = eap_aka_get_emsk; + eap->getSessionId = eap_aka_get_session_id; ret = eap_server_method_register(eap); if (ret) |