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