37 #if PPP_SUPPORT && MPPE_SUPPORT 49 #define MPPE_MAX_KEY_LEN 16 52 #define MPPE_OPT_40 0x01 53 #define MPPE_OPT_128 0x02 54 #define MPPE_OPT_STATEFUL 0x04 56 #define MPPE_OPT_56 0x08 57 #define MPPE_OPT_MPPC 0x10 58 #define MPPE_OPT_D 0x20 59 #define MPPE_OPT_UNSUPPORTED (MPPE_OPT_56|MPPE_OPT_MPPC|MPPE_OPT_D) 60 #define MPPE_OPT_UNKNOWN 0x40 69 #define MPPE_C_BIT 0x01 70 #define MPPE_D_BIT 0x10 71 #define MPPE_L_BIT 0x20 72 #define MPPE_S_BIT 0x40 73 #define MPPE_M_BIT 0x80 74 #define MPPE_H_BIT 0x01 77 #define MPPE_ALL_BITS (MPPE_D_BIT|MPPE_L_BIT|MPPE_S_BIT|MPPE_M_BIT|MPPE_H_BIT) 80 #define MPPE_OPTS_TO_CI(opts, ci) \ 85 if (opts & MPPE_OPT_STATEFUL) \ 88 *ptr++ = MPPE_H_BIT; \ 94 if (opts & MPPE_OPT_128) \ 96 if (opts & MPPE_OPT_40) \ 102 #define MPPE_CI_TO_OPTS(ci, opts) \ 104 const u_char *ptr = ci; \ 109 if (!(ptr[0] & MPPE_H_BIT)) \ 110 opts |= MPPE_OPT_STATEFUL; \ 113 if (ptr[3] & MPPE_S_BIT) \ 114 opts |= MPPE_OPT_128; \ 115 if (ptr[3] & MPPE_L_BIT) \ 116 opts |= MPPE_OPT_40; \ 119 if (ptr[3] & MPPE_M_BIT) \ 120 opts |= MPPE_OPT_56; \ 121 if (ptr[3] & MPPE_D_BIT) \ 122 opts |= MPPE_OPT_D; \ 123 if (ptr[3] & MPPE_C_BIT) \ 124 opts |= MPPE_OPT_MPPC; \ 127 if (ptr[0] & ~MPPE_H_BIT) \ 128 opts |= MPPE_OPT_UNKNOWN; \ 129 if (ptr[1] || ptr[2]) \ 130 opts |= MPPE_OPT_UNKNOWN; \ 131 if (ptr[3] & ~MPPE_ALL_BITS) \ 132 opts |= MPPE_OPT_UNKNOWN; \ 136 #define SHA1_PAD_SIZE 40 138 static const u8_t mppe_sha1_pad1[SHA1_PAD_SIZE] = {
139 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
140 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
141 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
142 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
144 static const u8_t mppe_sha1_pad2[SHA1_PAD_SIZE] = {
145 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
146 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
147 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
148 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2
154 typedef struct ppp_mppe_state {
155 ppp_arc4_context arc4;
156 u8_t master_key[MPPE_MAX_KEY_LEN];
157 u8_t session_key[MPPE_MAX_KEY_LEN];
165 unsigned int stateful :1;
166 unsigned int discard :1;
169 void mppe_set_key(ppp_pcb *pcb, ppp_mppe_state *state, u8_t *key);
170 void mppe_init(ppp_pcb *pcb, ppp_mppe_state *state, u8_t options);
171 void mppe_comp_reset(ppp_pcb *pcb, ppp_mppe_state *state);
172 err_t mppe_compress(ppp_pcb *pcb, ppp_mppe_state *state,
struct pbuf **pb, u16_t protocol);
173 void mppe_decomp_reset(ppp_pcb *pcb, ppp_mppe_state *state);
174 err_t mppe_decompress(ppp_pcb *pcb, ppp_mppe_state *state,
struct pbuf **pb);
Main packet buffer struct.