EAP peer: Add Session-Id derivation
This adds a new getSessionId() callback for EAP peer methods to allow EAP Session-Id to be derived. This commits implements this for EAP-FAST, EAP-GPSK, EAP-IKEv2, EAP-PEAP, EAP-TLS, and EAP-TTLS. Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
9288e6625b
commit
950c563076
13 changed files with 457 additions and 2 deletions
|
@ -475,6 +475,36 @@ static u8 * eap_ikev2_get_emsk(struct eap_sm *sm, void *priv, size_t *len)
|
|||
}
|
||||
|
||||
|
||||
static u8 * eap_ikev2_get_session_id(struct eap_sm *sm, void *priv, size_t *len)
|
||||
{
|
||||
struct eap_ikev2_data *data = priv;
|
||||
u8 *sid;
|
||||
size_t sid_len;
|
||||
size_t offset;
|
||||
|
||||
if (data->state != DONE || !data->keymat_ok)
|
||||
return NULL;
|
||||
|
||||
sid_len = 1 + data->ikev2.i_nonce_len + data->ikev2.r_nonce_len;
|
||||
sid = os_malloc(sid_len);
|
||||
if (sid) {
|
||||
offset = 0;
|
||||
sid[offset] = EAP_TYPE_IKEV2;
|
||||
offset++;
|
||||
os_memcpy(sid + offset, data->ikev2.i_nonce,
|
||||
data->ikev2.i_nonce_len);
|
||||
offset += data->ikev2.i_nonce_len;
|
||||
os_memcpy(sid + offset, data->ikev2.r_nonce,
|
||||
data->ikev2.r_nonce_len);
|
||||
*len = sid_len;
|
||||
wpa_hexdump(MSG_DEBUG, "EAP-IKEV2: Derived Session-Id",
|
||||
sid, sid_len);
|
||||
}
|
||||
|
||||
return sid;
|
||||
}
|
||||
|
||||
|
||||
int eap_peer_ikev2_register(void)
|
||||
{
|
||||
struct eap_method *eap;
|
||||
|
@ -492,6 +522,7 @@ int eap_peer_ikev2_register(void)
|
|||
eap->isKeyAvailable = eap_ikev2_isKeyAvailable;
|
||||
eap->getKey = eap_ikev2_getKey;
|
||||
eap->get_emsk = eap_ikev2_get_emsk;
|
||||
eap->getSessionId = eap_ikev2_get_session_id;
|
||||
|
||||
ret = eap_peer_method_register(eap);
|
||||
if (ret)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue