EAP-TEAP: Add parsing and generation routines for Identity-Type TLV
Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
d11c41bb75
commit
cc661c160a
2 changed files with 35 additions and 0 deletions
|
@ -427,6 +427,17 @@ int eap_teap_parse_tlv(struct eap_teap_tlv_parse *tlv,
|
||||||
int tlv_type, u8 *pos, size_t len)
|
int tlv_type, u8 *pos, size_t len)
|
||||||
{
|
{
|
||||||
switch (tlv_type) {
|
switch (tlv_type) {
|
||||||
|
case TEAP_TLV_IDENTITY_TYPE:
|
||||||
|
if (len < 2) {
|
||||||
|
wpa_printf(MSG_INFO,
|
||||||
|
"EAP-TEAP: Too short Identity-Type TLV");
|
||||||
|
tlv->result = TEAP_STATUS_FAILURE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
tlv->identity_type = WPA_GET_BE16(pos);
|
||||||
|
wpa_printf(MSG_DEBUG, "EAP-TEAP: Identity-Type: %u",
|
||||||
|
tlv->identity_type);
|
||||||
|
break;
|
||||||
case TEAP_TLV_RESULT:
|
case TEAP_TLV_RESULT:
|
||||||
wpa_hexdump(MSG_MSGDUMP, "EAP-TEAP: Result TLV", pos, len);
|
wpa_hexdump(MSG_MSGDUMP, "EAP-TEAP: Result TLV", pos, len);
|
||||||
if (tlv->result) {
|
if (tlv->result) {
|
||||||
|
@ -679,6 +690,22 @@ struct wpabuf * eap_teap_tlv_error(enum teap_error_codes error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct wpabuf * eap_teap_tlv_identity_type(enum teap_identity_types id)
|
||||||
|
{
|
||||||
|
struct wpabuf *buf;
|
||||||
|
|
||||||
|
buf = wpabuf_alloc(4 + 2);
|
||||||
|
if (!buf)
|
||||||
|
return NULL;
|
||||||
|
wpa_printf(MSG_DEBUG,
|
||||||
|
"EAP-TEAP: Add Identity-Type TLV(Identity-Type=%d)", id);
|
||||||
|
wpabuf_put_be16(buf, TEAP_TLV_IDENTITY_TYPE);
|
||||||
|
wpabuf_put_be16(buf, 2);
|
||||||
|
wpabuf_put_be16(buf, id);
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int eap_teap_allowed_anon_prov_phase2_method(int vendor, enum eap_type type)
|
int eap_teap_allowed_anon_prov_phase2_method(int vendor, enum eap_type type)
|
||||||
{
|
{
|
||||||
/* RFC 7170, Section 3.8.3: MUST provide mutual authentication,
|
/* RFC 7170, Section 3.8.3: MUST provide mutual authentication,
|
||||||
|
|
|
@ -151,6 +151,12 @@ enum teap_tlv_result_status {
|
||||||
TEAP_STATUS_FAILURE = 2
|
TEAP_STATUS_FAILURE = 2
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Identity-Type values within Identity-Type TLV */
|
||||||
|
enum teap_identity_types {
|
||||||
|
TEAP_IDENTITY_TYPE_USER = 1,
|
||||||
|
TEAP_IDENTITY_TYPE_MACHINE = 2,
|
||||||
|
};
|
||||||
|
|
||||||
#define TEAP_TLV_MANDATORY 0x8000
|
#define TEAP_TLV_MANDATORY 0x8000
|
||||||
#define TEAP_TLV_TYPE_MASK 0x3fff
|
#define TEAP_TLV_TYPE_MASK 0x3fff
|
||||||
|
|
||||||
|
@ -189,6 +195,7 @@ struct eap_teap_tlv_parse {
|
||||||
u8 *basic_auth_resp;
|
u8 *basic_auth_resp;
|
||||||
size_t basic_auth_resp_len;
|
size_t basic_auth_resp_len;
|
||||||
u32 error_code;
|
u32 error_code;
|
||||||
|
u16 identity_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
void eap_teap_put_tlv_hdr(struct wpabuf *buf, u16 type, u16 len);
|
void eap_teap_put_tlv_hdr(struct wpabuf *buf, u16 type, u16 len);
|
||||||
|
@ -215,6 +222,7 @@ int eap_teap_parse_tlv(struct eap_teap_tlv_parse *tlv,
|
||||||
const char * eap_teap_tlv_type_str(enum teap_tlv_types type);
|
const char * eap_teap_tlv_type_str(enum teap_tlv_types type);
|
||||||
struct wpabuf * eap_teap_tlv_result(int status, int intermediate);
|
struct wpabuf * eap_teap_tlv_result(int status, int intermediate);
|
||||||
struct wpabuf * eap_teap_tlv_error(enum teap_error_codes error);
|
struct wpabuf * eap_teap_tlv_error(enum teap_error_codes error);
|
||||||
|
struct wpabuf * eap_teap_tlv_identity_type(enum teap_identity_types id);
|
||||||
enum eap_type;
|
enum eap_type;
|
||||||
int eap_teap_allowed_anon_prov_phase2_method(int vendor, enum eap_type type);
|
int eap_teap_allowed_anon_prov_phase2_method(int vendor, enum eap_type type);
|
||||||
int eap_teap_allowed_anon_prov_cipher_suite(u16 cs);
|
int eap_teap_allowed_anon_prov_cipher_suite(u16 cs);
|
||||||
|
|
Loading…
Reference in a new issue