Home | History | Annotate | Line # | Download | only in pppd
      1 /*
      2  * Copyright (c) 2011 Rustam Kovhaev. All rights reserved.
      3  * Copyright (c) 2021 Eivind Nss. All rights reserved.
      4  *
      5  * Redistribution and use in source and binary forms, with or without
      6  * modification, are permitted provided that the following conditions
      7  * are met:
      8  *
      9  * 1. Redistributions of source code must retain the above copyright
     10  *    notice, this list of conditions and the following disclaimer.
     11  *
     12  * 2. Redistributions in binary form must reproduce the above copyright
     13  *    notice, this list of conditions and the following disclaimer in
     14  *    the documentation and/or other materials provided with the
     15  *    distribution.
     16  *
     17  * 3. The name(s) of the authors of this software must not be used to
     18  *    endorse or promote products derived from this software without
     19  *    prior written permission.
     20  *
     21  * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO
     22  * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
     23  * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
     24  * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     25  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
     26  * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
     27  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     28  */
     29 
     30 #ifndef PPP_PEAP_H
     31 #define	PPP_PEAP_H
     32 
     33 #include "pppdconf.h"
     34 
     35 #define	PEAP_PHASE_1			1
     36 #define	PEAP_PHASE_2			2
     37 
     38 #define	PEAP_HEADERLEN			6
     39 #define	PEAP_FRAGMENT_LENGTH_FIELD	4
     40 #define	PEAP_FLAGS_FIELD		1
     41 #define	PEAP_FLAGS_ACK			0
     42 
     43 #define PEAP_CAPABILITIES_TYPE		254
     44 #define PEAP_CAPABILITIES_LEN		12
     45 
     46 #define PEAP_TLV_TYPE			12
     47 #define PEAP_TLV_LENGTH_FIELD		56
     48 #define PEAP_TLV_SUBTYPE_REQUEST	0
     49 #define PEAP_TLV_SUBTYPE_RESPONSE	1
     50 #define PEAP_TLV_HEADERLEN		8
     51 #define PEAP_TLV_RESULT_LEN		7
     52 #define PEAP_TLV_LEN			71
     53 
     54 /*
     55  * Microsoft PEAP client/server never exchange
     56  * outer TLVs during PEAP authentication
     57  */
     58 #define	PEAP_TLV_DATA_LEN		61
     59 
     60 #define	PEAP_TLV_TK_LEN			60
     61 #define	PEAP_TLV_ISK_LEN		32
     62 #define	PEAP_TLV_IPMKSEED_LEN		59
     63 #define	PEAP_TLV_TEMPKEY_LEN		40
     64 #define	PEAP_TLV_IPMK_LEN		40
     65 #define	PEAP_TLV_CMK_LEN		20
     66 #define	PEAP_TLV_NONCE_LEN		32
     67 #define	PEAP_TLV_COMP_MAC_LEN		20
     68 #define	PEAP_TLV_CSK_LEN		128
     69 #define	PEAP_TLV_TK_SEED_LABEL		"client EAP encryption"
     70 #define	PEAP_TLV_IPMK_SEED_LABEL	"Inner Methods Compound Keys"
     71 #define	PEAP_TLV_CSK_SEED_LABEL		"Session Key Generating Function"
     72 
     73 #define	PEAP_S_FLAG_SET			0x20
     74 #define	PEAP_L_FLAG_SET			0x80
     75 #define	PEAP_LM_FLAG_SET		0xC0
     76 #define	PEAP_M_FLAG_SET			0x40
     77 #define	PEAP_NO_FLAGS			0x00
     78 
     79 #define	EAP_TLS_KEY_LEN			0x40
     80 #define	TLS_RECORD_MAX_SIZE		0x4000
     81 
     82 struct peap_state;
     83 
     84 /**
     85  * Initialize the PEAP structure
     86  */
     87 int peap_init(struct peap_state** psm, const char *remote_name);
     88 
     89 /**
     90  * Process a PEAP packet
     91  */
     92 int peap_process(eap_state *esp, u_char id, u_char *inp, int len);
     93 
     94 /**
     95  * Clean up the PEAP structure
     96  */
     97 void peap_finish(struct peap_state **psm);
     98 
     99 #endif /* PPP_PEAP_H */
    100