Home | History | Annotate | Download | only in eap_peer

Lines Matching full:data

55 static void eap_ikev2_state(struct eap_ikev2_data *data, int state)
58 eap_ikev2_state_txt(data->state),
60 data->state = state;
66 struct eap_ikev2_data *data;
76 data = os_zalloc(sizeof(*data));
77 if (data == NULL)
79 data->state = WAIT_START;
80 data->fragment_size = IKEV2_FRAGMENT_SIZE;
81 data->ikev2.state = SA_INIT;
82 data->ikev2.peer_auth = PEER_AUTH_SECRET;
83 data->ikev2.key_pad = (u8 *) os_strdup("Key Pad for EAP-IKEv2");
84 if (data->ikev2.key_pad == NULL)
86 data->ikev2.key_pad_len = 21;
87 data->ikev2.IDr = os_malloc(identity_len);
88 if (data->ikev2.IDr == NULL)
90 os_memcpy(data->ikev2.IDr, identity, identity_len);
91 data->ikev2.IDr_len = identity_len;
95 data->ikev2.shared_secret = os_malloc(password_len);
96 if (data->ikev2.shared_secret == NULL)
98 os_memcpy(data->ikev2.shared_secret, password, password_len);
99 data->ikev2.shared_secret_len = password_len;
102 return data;
105 ikev2_responder_deinit(&data->ikev2);
106 os_free(data);
113 struct eap_ikev2_data *data = priv;
114 wpabuf_free(data->in_buf);
115 wpabuf_free(data->out_buf);
116 ikev2_responder_deinit(&data->ikev2);
117 os_free(data);
121 static int eap_ikev2_peer_keymat(struct eap_ikev2_data *data)
124 data->ikev2.proposal.prf, &data->ikev2.keys,
125 data->ikev2.i_nonce, data->ikev2.i_nonce_len,
126 data->ikev2.r_nonce, data->ikev2.r_nonce_len,
127 data->keymat) < 0) {
132 data->keymat_ok = 1;
137 static struct wpabuf * eap_ikev2_build_msg(struct eap_ikev2_data *data,
149 send_len = wpabuf_len(data->out_buf) - data->out_used;
150 if (1 + send_len > data->fragment_size) {
151 send_len = data->fragment_size - 1;
153 if (data->out_used == 0) {
168 if (data->keys_ready) {
171 "Data");
173 integ = ikev2_get_integ(data->ikev2.proposal.integ);
190 wpabuf_put_be32(resp, wpabuf_len(data->out_buf));
192 wpabuf_put_data(resp, wpabuf_head_u8(data->out_buf) + data->out_used,
194 data->out_used += send_len;
199 ikev2_integ_hash(data->ikev2.proposal.integ,
200 data->ikev2.keys.SK_ar,
201 data->ikev2.keys.SK_integ_len,
208 if (data->out_used == wpabuf_len(data->out_buf)) {
212 wpabuf_free(data->out_buf);
213 data->out_buf = NULL;
214 data->out_used = 0;
215 switch (data->ikev2.state) {
219 data->keys_ready = 1;
223 if (data->state == FAIL)
228 if (eap_ikev2_peer_keymat(data))
230 eap_ikev2_state(data, DONE);
244 (unsigned long) wpabuf_len(data->out_buf) -
245 data->out_used);
246 eap_ikev2_state(data, WAIT_FRAG_ACK);
253 static int eap_ikev2_process_icv(struct eap_ikev2_data *data,
259 data->ikev2.proposal.integ, &data->ikev2.keys, 1,
263 /* Hide Integrity Checksum Data from further processing */
265 } else if (data->keys_ready) {
275 static int eap_ikev2_process_cont(struct eap_ikev2_data *data,
279 if (len > wpabuf_tailroom(data->in_buf)) {
281 eap_ikev2_state(data, FAIL);
285 wpabuf_put_data(data->in_buf, buf, len);
288 (unsigned long) wpabuf_tailroom(data->in_buf));
294 static struct wpabuf * eap_ikev2_process_fragment(struct eap_ikev2_data *data,
301 if (data->in_buf == NULL && !(flags & IKEV2_FLAGS_LENGTH_INCLUDED)) {
308 if (data->in_buf == NULL) {
310 data->in_buf = wpabuf_alloc(message_length);
311 if (data->in_buf == NULL) {
317 wpabuf_put_data(data->in_buf, buf, len);
321 (unsigned long) wpabuf_tailroom(data->in_buf));
332 struct eap_ikev2_data *data = priv;
355 if (eap_ikev2_process_icv(data, reqData, flags, pos, &end) < 0) {
381 if (data->state == WAIT_FRAG_ACK) {
394 eap_ikev2_state(data, PROC_MSG);
395 return eap_ikev2_build_msg(data, ret, id);
398 if (data->in_buf && eap_ikev2_process_cont(data, pos, end - pos) < 0) {
404 return eap_ikev2_process_fragment(data, ret, id, flags,
409 if (data->in_buf == NULL) {
412 data->in_buf = &tmpbuf;
415 if (ikev2_responder_process(&data->ikev2, data->in_buf) < 0) {
416 if (data->in_buf == &tmpbuf)
417 data->in_buf = NULL;
418 eap_ikev2_state(data, FAIL);
422 if (data->in_buf != &tmpbuf)
423 wpabuf_free(data->in_buf);
424 data->in_buf = NULL;
426 if (data->out_buf == NULL) {
427 data->out_buf = ikev2_responder_build(&data->ikev2);
428 if (data->out_buf == NULL) {
433 data->out_used = 0;
436 eap_ikev2_state(data, PROC_MSG);
437 return eap_ikev2_build_msg(data, ret, id);
443 struct eap_ikev2_data *data = priv;
444 return data->state == DONE && data->keymat_ok;
450 struct eap_ikev2_data *data = priv;
453 if (data->state != DONE || !data->keymat_ok)
458 os_memcpy(key, data->keymat, EAP_MSK_LEN);
468 struct eap_ikev2_data *data = priv;
471 if (data->state != DONE || !data->keymat_ok)
476 os_memcpy(key, data->keymat + EAP_MSK_LEN, EAP_EMSK_LEN);