xref: /openbsd/sbin/iked/eap.h (revision 73471bf0)
1 /*	$OpenBSD: eap.h,v 1.6 2020/09/16 21:37:35 tobhe Exp $	*/
2 
3 /*
4  * Copyright (c) 2010-2013 Reyk Floeter <reyk@openbsd.org>
5  *
6  * Permission to use, copy, modify, and distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 #ifndef IKED_EAP_H
20 #define IKED_EAP_H
21 
22 struct eap_header {
23 	uint8_t		eap_code;
24 	uint8_t		eap_id;
25 	uint16_t	eap_length;
26 } __packed;
27 
28 struct eap_message {
29 	uint8_t		eap_code;
30 	uint8_t		eap_id;
31 	uint16_t	eap_length;
32 	uint8_t		eap_type;
33 	/* Followed by type-specific data */
34 } __packed;
35 
36 #define EAP_CODE_REQUEST	1	/* Request */
37 #define EAP_CODE_RESPONSE	2	/* Response */
38 #define EAP_CODE_SUCCESS	3	/* Success */
39 #define EAP_CODE_FAILURE	4	/* Failure */
40 
41 extern struct iked_constmap eap_code_map[];
42 
43 /* http://www.iana.org/assignments/eap-numbers */
44 #define EAP_TYPE_NONE		0	/* NONE */
45 #define EAP_TYPE_IDENTITY	1	/* RFC3748 */
46 #define EAP_TYPE_NOTIFICATION	2	/* RFC3748 */
47 #define EAP_TYPE_NAK		3	/* RFC3748 */
48 #define EAP_TYPE_MD5		4	/* RFC3748 */
49 #define EAP_TYPE_OTP		5	/* RFC3748 */
50 #define EAP_TYPE_GTC		6	/* RFC3748 */
51 #define EAP_TYPE_RSA		9	/* Whelan */
52 #define EAP_TYPE_DSS		10	/* Nace */
53 #define EAP_TYPE_KEA		11	/* Nace */
54 #define EAP_TYPE_KEA_VALIDATE	12	/* Nace */
55 #define EAP_TYPE_TLS		13	/* RFC5216 */
56 #define EAP_TYPE_AXENT		14	/* Rosselli */
57 #define EAP_TYPE_SECURID	15	/* Nystrm */
58 #define EAP_TYPE_ARCOT		16	/* Jerdonek */
59 #define EAP_TYPE_CISCO		17	/* Norman */
60 #define EAP_TYPE_SIM		18	/* RFC4186 */
61 #define EAP_TYPE_SRP_SHA1	19	/* Carlson */
62 #define EAP_TYPE_TTLS		21	/* Funk */
63 #define EAP_TYPE_RAS		22	/* Fields */
64 #define EAP_TYPE_OAAKA		23	/* RFC4187 */
65 #define EAP_TYPE_3COM		24	/* Young */
66 #define EAP_TYPE_PEAP		25	/* Palekar */
67 #define EAP_TYPE_MSCHAP_V2	26	/* Palekar */
68 #define EAP_TYPE_MAKE		27	/* Berrendonner */
69 #define EAP_TYPE_CRYPTOCARD	28	/* Webb */
70 #define EAP_TYPE_MSCHAP_V2_2	29	/* Potter */
71 #define EAP_TYPE_DYNAMID	30	/* Merlin */
72 #define EAP_TYPE_ROB		31	/* Ullah */
73 #define EAP_TYPE_POTP		32	/* RFC4794 */
74 #define EAP_TYPE_MS_TLV		33	/* Palekar */
75 #define EAP_TYPE_SENTRINET	34	/* Kelleher */
76 #define EAP_TYPE_ACTIONTEC	35	/* Chang */
77 #define EAP_TYPE_BIOMETRICS	36	/* Xiong */
78 #define EAP_TYPE_AIRFORTRESS	37	/* Hibbard */
79 #define EAP_TYPE_HTTP_DIGEST	38	/* Tavakoli */
80 #define EAP_TYPE_SECURESUITE	39	/* Clements */
81 #define EAP_TYPE_DEVICECONNECT	40	/* Pitard */
82 #define EAP_TYPE_SPEKE		41	/* Zick */
83 #define EAP_TYPE_MOBAC		42	/* Rixom */
84 #define EAP_TYPE_FAST		43	/* Cam-Winget */
85 #define EAP_TYPE_ZLX		44	/* Bogue */
86 #define EAP_TYPE_LINK		45	/* Zick */
87 #define EAP_TYPE_PAX		46	/* Clancy */
88 #define EAP_TYPE_PSK		47	/* RFC-bersani-eap-psk-11.txt */
89 #define EAP_TYPE_SAKE		48	/* RFC-vanderveen-eap-sake-02.txt */
90 #define EAP_TYPE_IKEV2		49	/* RFC5106 */
91 #define EAP_TYPE_AKA2		50	/* RFC5448 */
92 #define EAP_TYPE_GPSK		51	/* RFC5106 */
93 #define EAP_TYPE_PWD		52	/* RFC-harkins-emu-eap-pwd-12.txt */
94 #define EAP_TYPE_EXPANDED_TYPE	254	/* RFC3748 */
95 #define EAP_TYPE_EXPERIMENTAL	255	/* RFC3748 */
96 
97 extern struct iked_constmap eap_type_map[];
98 
99 /*
100  * EAP MSCHAP-V2
101  */
102 
103 #define EAP_MSCHAP_CHALLENGE_SZ		16
104 #define EAP_MSCHAP_RESPONSE_SZ		49
105 #define EAP_MSCHAP_NTRESPONSE_SZ	24
106 #define EAP_MSCHAP_SUCCESS_SZ		42
107 
108 #define EAP_MSOPCODE_CHALLENGE		1	/* Challenge */
109 #define EAP_MSOPCODE_RESPONSE		2	/* Response */
110 #define EAP_MSOPCODE_SUCCESS		3	/* Success */
111 #define EAP_MSOPCODE_FAILURE		4	/* Failure */
112 #define EAP_MSOPCODE_CHANGE_PASSWORD	7	/* Change Password */
113 
114 extern struct iked_constmap eap_msopcode_map[];
115 
116 struct eap_mschap {
117 	uint8_t				ms_opcode;
118 } __packed;
119 
120 struct eap_mschap_challenge {
121 	uint8_t				msc_opcode;
122 	uint8_t				msc_id;
123 	uint16_t			msc_length;
124 	uint8_t				msc_valuesize;
125 	uint8_t				msc_challenge[EAP_MSCHAP_CHALLENGE_SZ];
126 	/* Followed by variable-size name field */
127 } __packed;
128 
129 struct eap_mschap_peer {
130 	uint8_t				msp_challenge[EAP_MSCHAP_CHALLENGE_SZ];
131 	uint8_t				msp_reserved[8];
132 	uint8_t				msp_ntresponse[EAP_MSCHAP_NTRESPONSE_SZ];
133 	uint8_t				msp_flags;
134 };
135 
136 struct eap_mschap_response {
137 	uint8_t				msr_opcode;
138 	uint8_t				msr_id;
139 	uint16_t			msr_length;
140 	uint8_t				msr_valuesize;
141 	union {
142 		uint8_t			resp_data[EAP_MSCHAP_RESPONSE_SZ];
143 		struct eap_mschap_peer	resp_peer;
144 	}				msr_response;
145 	/* Followed by variable-size name field */
146 } __packed;
147 
148 struct eap_mschap_success {
149 	uint8_t				mss_opcode;
150 	uint8_t				mss_id;
151 	uint16_t			mss_length;
152 	/* Followed by variable-size success message */
153 } __packed;
154 
155 struct eap_mschap_failure {
156 	uint8_t				msf_opcode;
157 	uint8_t				msf_id;
158 	uint16_t			msf_length;
159 	/* Followed by variable-size message field */
160 } __packed;
161 
162 #define EAP_MSERROR_RESTRICTED_LOGON_HOURS	646	/* eap-mschapv2 */
163 #define EAP_MSERROR_ACCT_DISABLED		647	/* eap-mschapv2 */
164 #define EAP_MSERROR_PASSWD_EXPIRED		648	/* eap-mschapv2 */
165 #define EAP_MSERROR_NO_DIALIN_PERMISSION	649	/* eap-mschapv2 */
166 #define EAP_MSERROR_AUTHENTICATION_FAILURE	691	/* eap-mschapv2 */
167 #define EAP_MSERROR_CHANGING_PASSWORD		709	/* eap-mschapv2 */
168 
169 extern struct iked_constmap eap_mserror_map[];
170 
171 #endif /* IKED_EAP_H */
172