X-Git-Url: https://git.ozlabs.org/?p=ppp.git;a=blobdiff_plain;f=pppd%2Fpeap.h;fp=pppd%2Fpeap.h;h=49e28e8375f321f9d6142b352070dc01dd7d1213;hp=0000000000000000000000000000000000000000;hb=4e895b5d9727fbbbf7c50c6ceedea5139da85f5d;hpb=cefbec14d0b11f854fecb51a6c96d7c296f0f1c6 diff --git a/pppd/peap.h b/pppd/peap.h new file mode 100644 index 0000000..49e28e8 --- /dev/null +++ b/pppd/peap.h @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2011 Rustam Kovhaev. All rights reserved. + * Copyright (c) 2021 Eivind Næss. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef PPP_PEAP_H +#define PPP_PEAP_H + +#define PEAP_PHASE_1 1 +#define PEAP_PHASE_2 2 + +#define PEAP_HEADERLEN 6 +#define PEAP_FRAGMENT_LENGTH_FIELD 4 +#define PEAP_FLAGS_FIELD 1 +#define PEAP_FLAGS_ACK 0 + +#define PEAP_CAPABILITIES_TYPE 254 +#define PEAP_CAPABILITIES_LEN 12 + +#define PEAP_TLV_TYPE 12 +#define PEAP_TLV_LENGTH_FIELD 56 +#define PEAP_TLV_SUBTYPE_REQUEST 0 +#define PEAP_TLV_SUBTYPE_RESPONSE 1 +#define PEAP_TLV_HEADERLEN 8 +#define PEAP_TLV_RESULT_LEN 7 +#define PEAP_TLV_LEN 71 + +/* + * Microsoft PEAP client/server never exchange + * outer TLVs during PEAP authentication + */ +#define PEAP_TLV_DATA_LEN 61 + +#define PEAP_TLV_TK_LEN 60 +#define PEAP_TLV_ISK_LEN 32 +#define PEAP_TLV_IPMKSEED_LEN 59 +#define PEAP_TLV_TEMPKEY_LEN 40 +#define PEAP_TLV_IPMK_LEN 40 +#define PEAP_TLV_CMK_LEN 20 +#define PEAP_TLV_NONCE_LEN 32 +#define PEAP_TLV_COMP_MAC_LEN 20 +#define PEAP_TLV_CSK_LEN 128 +#define PEAP_TLV_TK_SEED_LABEL "client EAP encryption" +#define PEAP_TLV_IPMK_SEED_LABEL "Inner Methods Compound Keys" +#define PEAP_TLV_CSK_SEED_LABEL "Session Key Generating Function" + +#define PEAP_S_FLAG_SET 0x20 +#define PEAP_L_FLAG_SET 0x80 +#define PEAP_LM_FLAG_SET 0xC0 +#define PEAP_M_FLAG_SET 0x40 +#define PEAP_NO_FLAGS 0x00 + +#define EAP_TLS_KEY_LEN 0x40 +#define TLS_RECORD_MAX_SIZE 0x4000 + +struct peap_state; + +/** + * Initialize the PEAP structure + */ +int peap_init(struct peap_state** psm, const char *remote_name); + +/** + * Process a PEAP packet + */ +int peap_process(eap_state *esp, u_char id, u_char *inp, int len); + +/** + * Clean up the PEAP structure + */ +void peap_finish(struct peap_state **psm); + +#endif /* PPP_PEAP_H */