18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/*
28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * EAP-TLV definitions (draft-josefsson-pppext-eap-tls-eap-10.txt)
38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2004-2008, Jouni Malinen <j@w1.fi>
48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license.
6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details.
78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef EAP_TLV_COMMON_H
108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_COMMON_H
118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* EAP-TLV TLVs (draft-josefsson-ppext-eap-tls-eap-10.txt) */
138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_RESULT_TLV 3 /* Acknowledged Result */
148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_NAK_TLV 4
158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_ERROR_CODE_TLV 5
168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_CONNECTION_BINDING_TLV 6
178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_VENDOR_SPECIFIC_TLV 7
188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_URI_TLV 8
198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_EAP_PAYLOAD_TLV 9
208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_INTERMEDIATE_RESULT_TLV 10
218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_PAC_TLV 11 /* RFC 5422, Section 4.2 */
228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_CRYPTO_BINDING_TLV 12
238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_CALLING_STATION_ID_TLV 13
248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_CALLED_STATION_ID_TLV 14
258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_NAS_PORT_TYPE_TLV 15
268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_SERVER_IDENTIFIER_TLV 16
278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_IDENTITY_TYPE_TLV 17
288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_SERVER_TRUSTED_ROOT_TLV 18
298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_REQUEST_ACTION_TLV 19
308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_PKCS7_TLV 20
318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_RESULT_SUCCESS 1
338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_RESULT_FAILURE 2
348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_TYPE_MANDATORY 0x8000
368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_TYPE_MASK 0x3fff
378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef _MSC_VER
398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#pragma pack(push, 1)
408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* _MSC_VER */
418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct eap_tlv_hdr {
438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 tlv_type;
448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 length;
458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} STRUCT_PACKED;
468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct eap_tlv_nak_tlv {
488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 tlv_type;
498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 length;
508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be32 vendor_id;
518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 nak_type;
528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} STRUCT_PACKED;
538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct eap_tlv_result_tlv {
558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 tlv_type;
568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 length;
578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 status;
588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} STRUCT_PACKED;
598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* RFC 4851, Section 4.2.7 - Intermediate-Result TLV */
618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct eap_tlv_intermediate_result_tlv {
628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 tlv_type;
638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 length;
648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 status;
658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* Followed by optional TLVs */
668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} STRUCT_PACKED;
678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* RFC 4851, Section 4.2.8 - Crypto-Binding TLV */
698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct eap_tlv_crypto_binding_tlv {
708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 tlv_type;
718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 length;
728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 reserved;
738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 version;
748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 received_version;
758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 subtype;
768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 nonce[32];
778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 compound_mac[20];
788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} STRUCT_PACKED;
798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct eap_tlv_pac_ack_tlv {
818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 tlv_type;
828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 length;
838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 pac_type;
848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 pac_len;
858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 result;
868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} STRUCT_PACKED;
878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* RFC 4851, Section 4.2.9 - Request-Action TLV */
898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct eap_tlv_request_action_tlv {
908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 tlv_type;
918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 length;
928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 action;
938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} STRUCT_PACKED;
948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* RFC 5422, Section 4.2.6 - PAC-Type TLV */
968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct eap_tlv_pac_type_tlv {
978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 tlv_type; /* PAC_TYPE_PAC_TYPE */
988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 length;
998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	be16 pac_type;
1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} STRUCT_PACKED;
1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef _MSC_VER
1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#pragma pack(pop)
1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* _MSC_VER */
1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_CRYPTO_BINDING_SUBTYPE_REQUEST 0
1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_CRYPTO_BINDING_SUBTYPE_RESPONSE 1
1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_ACTION_PROCESS_TLV 1
1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_TLV_ACTION_NEGOTIATE_EAP 2
1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* EAP_TLV_COMMON_H */
113