mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2025-01-31 17:24:02 -05:00
Add Type-Code context to EAP-TLS 1.3 exported Key_Material and Method-Id
Change to require the Type-Code in context for Key_Material and Method-Id has now been published as draft-ietf-emu-eap-tls13-04. https://tools.ietf.org/html/draft-ietf-emu-eap-tls13-04#section-2.3 Signed-off-by: Ervin Oro <ervin.oro@aalto.fi>
This commit is contained in:
parent
90270e15cb
commit
7ad9e36d4a
@ -174,6 +174,9 @@ static void eap_tls_success(struct eap_sm *sm, struct eap_tls_data *data,
|
|||||||
struct eap_method_ret *ret)
|
struct eap_method_ret *ret)
|
||||||
{
|
{
|
||||||
const char *label;
|
const char *label;
|
||||||
|
const u8 eap_tls13_context[] = { EAP_TYPE_TLS };
|
||||||
|
const u8 *context = NULL;
|
||||||
|
size_t context_len = 0;
|
||||||
|
|
||||||
wpa_printf(MSG_DEBUG, "EAP-TLS: Done");
|
wpa_printf(MSG_DEBUG, "EAP-TLS: Done");
|
||||||
|
|
||||||
@ -184,6 +187,8 @@ static void eap_tls_success(struct eap_sm *sm, struct eap_tls_data *data,
|
|||||||
|
|
||||||
if (data->ssl.tls_v13) {
|
if (data->ssl.tls_v13) {
|
||||||
label = "EXPORTER_EAP_TLS_Key_Material";
|
label = "EXPORTER_EAP_TLS_Key_Material";
|
||||||
|
context = eap_tls13_context;
|
||||||
|
context_len = 1;
|
||||||
|
|
||||||
/* A possible NewSessionTicket may be received before
|
/* A possible NewSessionTicket may be received before
|
||||||
* EAP-Success, so need to allow it to be received. */
|
* EAP-Success, so need to allow it to be received. */
|
||||||
@ -198,7 +203,7 @@ static void eap_tls_success(struct eap_sm *sm, struct eap_tls_data *data,
|
|||||||
|
|
||||||
eap_tls_free_key(data);
|
eap_tls_free_key(data);
|
||||||
data->key_data = eap_peer_tls_derive_key(sm, &data->ssl, label,
|
data->key_data = eap_peer_tls_derive_key(sm, &data->ssl, label,
|
||||||
NULL, 0,
|
context, context_len,
|
||||||
EAP_TLS_KEY_LEN +
|
EAP_TLS_KEY_LEN +
|
||||||
EAP_EMSK_LEN);
|
EAP_EMSK_LEN);
|
||||||
if (data->key_data) {
|
if (data->key_data) {
|
||||||
|
@ -413,17 +413,18 @@ u8 * eap_peer_tls_derive_session_id(struct eap_sm *sm,
|
|||||||
|
|
||||||
if (eap_type == EAP_TYPE_TLS && data->tls_v13) {
|
if (eap_type == EAP_TYPE_TLS && data->tls_v13) {
|
||||||
u8 *id, *method_id;
|
u8 *id, *method_id;
|
||||||
|
const u8 context[] = { EAP_TYPE_TLS };
|
||||||
|
|
||||||
/* Session-Id = <EAP-Type> || Method-Id
|
/* Session-Id = <EAP-Type> || Method-Id
|
||||||
* Method-Id = TLS-Exporter("EXPORTER_EAP_TLS_Method-Id",
|
* Method-Id = TLS-Exporter("EXPORTER_EAP_TLS_Method-Id",
|
||||||
* "", 64)
|
* Type-Code, 64)
|
||||||
*/
|
*/
|
||||||
*len = 1 + 64;
|
*len = 1 + 64;
|
||||||
id = os_malloc(*len);
|
id = os_malloc(*len);
|
||||||
if (!id)
|
if (!id)
|
||||||
return NULL;
|
return NULL;
|
||||||
method_id = eap_peer_tls_derive_key(
|
method_id = eap_peer_tls_derive_key(
|
||||||
sm, data, "EXPORTER_EAP_TLS_Method-Id", NULL, 0, 64);
|
sm, data, "EXPORTER_EAP_TLS_Method-Id", context, 1, 64);
|
||||||
if (!method_id) {
|
if (!method_id) {
|
||||||
os_free(id);
|
os_free(id);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -322,16 +322,22 @@ static u8 * eap_tls_getKey(struct eap_sm *sm, void *priv, size_t *len)
|
|||||||
struct eap_tls_data *data = priv;
|
struct eap_tls_data *data = priv;
|
||||||
u8 *eapKeyData;
|
u8 *eapKeyData;
|
||||||
const char *label;
|
const char *label;
|
||||||
|
const u8 eap_tls13_context[] = { EAP_TYPE_TLS };
|
||||||
|
const u8 *context = NULL;
|
||||||
|
size_t context_len = 0;
|
||||||
|
|
||||||
if (data->state != SUCCESS)
|
if (data->state != SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (data->ssl.tls_v13)
|
if (data->ssl.tls_v13) {
|
||||||
label = "EXPORTER_EAP_TLS_Key_Material";
|
label = "EXPORTER_EAP_TLS_Key_Material";
|
||||||
else
|
context = eap_tls13_context;
|
||||||
|
context_len = 1;
|
||||||
|
} else {
|
||||||
label = "client EAP encryption";
|
label = "client EAP encryption";
|
||||||
|
}
|
||||||
eapKeyData = eap_server_tls_derive_key(sm, &data->ssl, label,
|
eapKeyData = eap_server_tls_derive_key(sm, &data->ssl, label,
|
||||||
NULL, 0,
|
context, context_len,
|
||||||
EAP_TLS_KEY_LEN + EAP_EMSK_LEN);
|
EAP_TLS_KEY_LEN + EAP_EMSK_LEN);
|
||||||
if (eapKeyData) {
|
if (eapKeyData) {
|
||||||
*len = EAP_TLS_KEY_LEN;
|
*len = EAP_TLS_KEY_LEN;
|
||||||
@ -351,16 +357,22 @@ static u8 * eap_tls_get_emsk(struct eap_sm *sm, void *priv, size_t *len)
|
|||||||
struct eap_tls_data *data = priv;
|
struct eap_tls_data *data = priv;
|
||||||
u8 *eapKeyData, *emsk;
|
u8 *eapKeyData, *emsk;
|
||||||
const char *label;
|
const char *label;
|
||||||
|
const u8 eap_tls13_context[] = { EAP_TYPE_TLS };
|
||||||
|
const u8 *context = NULL;
|
||||||
|
size_t context_len = 0;
|
||||||
|
|
||||||
if (data->state != SUCCESS)
|
if (data->state != SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (data->ssl.tls_v13)
|
if (data->ssl.tls_v13) {
|
||||||
label = "EXPORTER_EAP_TLS_Key_Material";
|
label = "EXPORTER_EAP_TLS_Key_Material";
|
||||||
else
|
context = eap_tls13_context;
|
||||||
|
context_len = 1;
|
||||||
|
} else {
|
||||||
label = "client EAP encryption";
|
label = "client EAP encryption";
|
||||||
|
}
|
||||||
eapKeyData = eap_server_tls_derive_key(sm, &data->ssl, label,
|
eapKeyData = eap_server_tls_derive_key(sm, &data->ssl, label,
|
||||||
NULL, 0,
|
context, context_len,
|
||||||
EAP_TLS_KEY_LEN + EAP_EMSK_LEN);
|
EAP_TLS_KEY_LEN + EAP_EMSK_LEN);
|
||||||
if (eapKeyData) {
|
if (eapKeyData) {
|
||||||
emsk = os_malloc(EAP_EMSK_LEN);
|
emsk = os_malloc(EAP_EMSK_LEN);
|
||||||
|
@ -145,20 +145,21 @@ u8 * eap_server_tls_derive_session_id(struct eap_sm *sm,
|
|||||||
{
|
{
|
||||||
struct tls_random keys;
|
struct tls_random keys;
|
||||||
u8 *out;
|
u8 *out;
|
||||||
|
const u8 context[] = { EAP_TYPE_TLS };
|
||||||
|
|
||||||
if (eap_type == EAP_TYPE_TLS && data->tls_v13) {
|
if (eap_type == EAP_TYPE_TLS && data->tls_v13) {
|
||||||
u8 *id, *method_id;
|
u8 *id, *method_id;
|
||||||
|
|
||||||
/* Session-Id = <EAP-Type> || Method-Id
|
/* Session-Id = <EAP-Type> || Method-Id
|
||||||
* Method-Id = TLS-Exporter("EXPORTER_EAP_TLS_Method-Id",
|
* Method-Id = TLS-Exporter("EXPORTER_EAP_TLS_Method-Id",
|
||||||
* "", 64)
|
* Type-Code, 64)
|
||||||
*/
|
*/
|
||||||
*len = 1 + 64;
|
*len = 1 + 64;
|
||||||
id = os_malloc(*len);
|
id = os_malloc(*len);
|
||||||
if (!id)
|
if (!id)
|
||||||
return NULL;
|
return NULL;
|
||||||
method_id = eap_server_tls_derive_key(
|
method_id = eap_server_tls_derive_key(
|
||||||
sm, data, "EXPORTER_EAP_TLS_Method-Id", NULL, 0, 64);
|
sm, data, "EXPORTER_EAP_TLS_Method-Id", context, 1, 64);
|
||||||
if (!method_id) {
|
if (!method_id) {
|
||||||
os_free(id);
|
os_free(id);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user