Lines Matching +full:vendor +full:- +full:id

2  * EAP peer method: EAP-GPSK (RFC 5433)
3 * Copyright (c) 2006-2014, Jouni Malinen <j@w1.fi>
32 int vendor; /* CSuite/Specifier */ member
53 return "GPSK-1"; in eap_gpsk_state_txt()
55 return "GPSK-3"; in eap_gpsk_state_txt()
69 wpa_printf(MSG_DEBUG, "EAP-GPSK: %s -> %s", in eap_gpsk_state()
70 eap_gpsk_state_txt(data->state), in eap_gpsk_state()
72 data->state = state; in eap_gpsk_state()
88 wpa_printf(MSG_INFO, "EAP-GPSK: No key (password) configured"); in eap_gpsk_init()
95 data->state = GPSK_1; in eap_gpsk_init()
99 data->id_peer = os_memdup(identity, identity_len); in eap_gpsk_init()
100 if (data->id_peer == NULL) { in eap_gpsk_init()
104 data->id_peer_len = identity_len; in eap_gpsk_init()
113 data->forced_cipher = atoi(pos + 7); in eap_gpsk_init()
114 wpa_printf(MSG_DEBUG, "EAP-GPSK: Forced cipher %u", in eap_gpsk_init()
115 data->forced_cipher); in eap_gpsk_init()
119 data->psk = os_memdup(password, password_len); in eap_gpsk_init()
120 if (data->psk == NULL) { in eap_gpsk_init()
124 data->psk_len = password_len; in eap_gpsk_init()
133 os_free(data->id_server); in eap_gpsk_deinit()
134 os_free(data->id_peer); in eap_gpsk_deinit()
135 if (data->psk) { in eap_gpsk_deinit()
136 os_memset(data->psk, 0, data->psk_len); in eap_gpsk_deinit()
137 os_free(data->psk); in eap_gpsk_deinit()
148 if (end - pos < 2) { in eap_gpsk_process_id_server()
149 wpa_printf(MSG_DEBUG, "EAP-GPSK: Too short GPSK-1 packet"); in eap_gpsk_process_id_server()
154 if (end - pos < alen) { in eap_gpsk_process_id_server()
155 wpa_printf(MSG_DEBUG, "EAP-GPSK: ID_Server overflow"); in eap_gpsk_process_id_server()
158 os_free(data->id_server); in eap_gpsk_process_id_server()
159 data->id_server = os_memdup(pos, alen); in eap_gpsk_process_id_server()
160 if (data->id_server == NULL) { in eap_gpsk_process_id_server()
161 wpa_printf(MSG_DEBUG, "EAP-GPSK: No memory for ID_Server"); in eap_gpsk_process_id_server()
164 data->id_server_len = alen; in eap_gpsk_process_id_server()
165 wpa_hexdump_ascii(MSG_DEBUG, "EAP-GPSK: ID_Server", in eap_gpsk_process_id_server()
166 data->id_server, data->id_server_len); in eap_gpsk_process_id_server()
179 if (end - pos < EAP_GPSK_RAND_LEN) { in eap_gpsk_process_rand_server()
180 wpa_printf(MSG_DEBUG, "EAP-GPSK: RAND_Server overflow"); in eap_gpsk_process_rand_server()
183 os_memcpy(data->rand_server, pos, EAP_GPSK_RAND_LEN); in eap_gpsk_process_rand_server()
184 wpa_hexdump(MSG_DEBUG, "EAP-GPSK: RAND_Server", in eap_gpsk_process_rand_server()
185 data->rand_server, EAP_GPSK_RAND_LEN); in eap_gpsk_process_rand_server()
201 data->vendor = EAP_GPSK_VENDOR_IETF; in eap_gpsk_select_csuite()
202 data->specifier = EAP_GPSK_CIPHER_RESERVED; in eap_gpsk_select_csuite()
205 int vendor, specifier; in eap_gpsk_select_csuite() local
206 vendor = WPA_GET_BE32(csuite->vendor); in eap_gpsk_select_csuite()
207 specifier = WPA_GET_BE16(csuite->specifier); in eap_gpsk_select_csuite()
208 wpa_printf(MSG_DEBUG, "EAP-GPSK: CSuite[%d]: %d:%d", in eap_gpsk_select_csuite()
209 i, vendor, specifier); in eap_gpsk_select_csuite()
210 if (data->vendor == EAP_GPSK_VENDOR_IETF && in eap_gpsk_select_csuite()
211 data->specifier == EAP_GPSK_CIPHER_RESERVED && in eap_gpsk_select_csuite()
212 eap_gpsk_supported_ciphersuite(vendor, specifier) && in eap_gpsk_select_csuite()
213 (!data->forced_cipher || data->forced_cipher == specifier)) in eap_gpsk_select_csuite()
215 data->vendor = vendor; in eap_gpsk_select_csuite()
216 data->specifier = specifier; in eap_gpsk_select_csuite()
220 if (data->vendor == EAP_GPSK_VENDOR_IETF && in eap_gpsk_select_csuite()
221 data->specifier == EAP_GPSK_CIPHER_RESERVED) { in eap_gpsk_select_csuite()
222 wpa_msg(sm->msg_ctx, MSG_INFO, "EAP-GPSK: No supported " in eap_gpsk_select_csuite()
224 return -1; in eap_gpsk_select_csuite()
226 wpa_printf(MSG_DEBUG, "EAP-GPSK: Selected ciphersuite %d:%d", in eap_gpsk_select_csuite()
227 data->vendor, data->specifier); in eap_gpsk_select_csuite()
244 if (end - pos < 2) { in eap_gpsk_process_csuite_list()
245 wpa_printf(MSG_DEBUG, "EAP-GPSK: Too short GPSK-1 packet"); in eap_gpsk_process_csuite_list()
250 if (len > (size_t) (end - pos)) { in eap_gpsk_process_csuite_list()
251 wpa_printf(MSG_DEBUG, "EAP-GPSK: CSuite_List overflow"); in eap_gpsk_process_csuite_list()
255 wpa_printf(MSG_DEBUG, "EAP-GPSK: Invalid CSuite_List len %lu", in eap_gpsk_process_csuite_list()
282 if (data->state != GPSK_1) { in eap_gpsk_process_gpsk_1()
283 ret->ignore = true; in eap_gpsk_process_gpsk_1()
287 wpa_printf(MSG_DEBUG, "EAP-GPSK: Received Request/GPSK-1"); in eap_gpsk_process_gpsk_1()
296 ret->methodState = METHOD_DONE; in eap_gpsk_process_gpsk_1()
322 wpa_printf(MSG_DEBUG, "EAP-GPSK: Sending Response/GPSK-2"); in eap_gpsk_send_gpsk_2()
324 miclen = eap_gpsk_mic_len(data->vendor, data->specifier); in eap_gpsk_send_gpsk_2()
325 len = 1 + 2 + data->id_peer_len + 2 + data->id_server_len + in eap_gpsk_send_gpsk_2()
337 wpa_hexdump_ascii(MSG_DEBUG, "EAP-GPSK: ID_Peer", in eap_gpsk_send_gpsk_2()
338 data->id_peer, data->id_peer_len); in eap_gpsk_send_gpsk_2()
339 wpabuf_put_be16(resp, data->id_peer_len); in eap_gpsk_send_gpsk_2()
340 wpabuf_put_data(resp, data->id_peer, data->id_peer_len); in eap_gpsk_send_gpsk_2()
342 wpabuf_put_be16(resp, data->id_server_len); in eap_gpsk_send_gpsk_2()
343 wpabuf_put_data(resp, data->id_server, data->id_server_len); in eap_gpsk_send_gpsk_2()
345 if (random_get_bytes(data->rand_peer, EAP_GPSK_RAND_LEN)) { in eap_gpsk_send_gpsk_2()
346 wpa_printf(MSG_DEBUG, "EAP-GPSK: Failed to get random data " in eap_gpsk_send_gpsk_2()
352 wpa_hexdump(MSG_DEBUG, "EAP-GPSK: RAND_Peer", in eap_gpsk_send_gpsk_2()
353 data->rand_peer, EAP_GPSK_RAND_LEN); in eap_gpsk_send_gpsk_2()
354 wpabuf_put_data(resp, data->rand_peer, EAP_GPSK_RAND_LEN); in eap_gpsk_send_gpsk_2()
355 wpabuf_put_data(resp, data->rand_server, EAP_GPSK_RAND_LEN); in eap_gpsk_send_gpsk_2()
361 WPA_PUT_BE32(csuite->vendor, data->vendor); in eap_gpsk_send_gpsk_2()
362 WPA_PUT_BE16(csuite->specifier, data->specifier); in eap_gpsk_send_gpsk_2()
364 if (eap_gpsk_derive_keys(data->psk, data->psk_len, in eap_gpsk_send_gpsk_2()
365 data->vendor, data->specifier, in eap_gpsk_send_gpsk_2()
366 data->rand_peer, data->rand_server, in eap_gpsk_send_gpsk_2()
367 data->id_peer, data->id_peer_len, in eap_gpsk_send_gpsk_2()
368 data->id_server, data->id_server_len, in eap_gpsk_send_gpsk_2()
369 data->msk, data->emsk, in eap_gpsk_send_gpsk_2()
370 data->sk, &data->sk_len, in eap_gpsk_send_gpsk_2()
371 data->pk, &data->pk_len) < 0) { in eap_gpsk_send_gpsk_2()
372 wpa_printf(MSG_DEBUG, "EAP-GPSK: Failed to derive keys"); in eap_gpsk_send_gpsk_2()
378 if (eap_gpsk_derive_session_id(data->psk, data->psk_len, in eap_gpsk_send_gpsk_2()
379 data->vendor, data->specifier, in eap_gpsk_send_gpsk_2()
380 data->rand_peer, data->rand_server, in eap_gpsk_send_gpsk_2()
381 data->id_peer, data->id_peer_len, in eap_gpsk_send_gpsk_2()
382 data->id_server, data->id_server_len, in eap_gpsk_send_gpsk_2()
384 data->session_id, &data->id_len) < 0) { in eap_gpsk_send_gpsk_2()
385 wpa_printf(MSG_DEBUG, "EAP-GPSK: Failed to derive Session-Id"); in eap_gpsk_send_gpsk_2()
390 wpa_hexdump(MSG_DEBUG, "EAP-GPSK: Derived Session-Id", in eap_gpsk_send_gpsk_2()
391 data->session_id, data->id_len); in eap_gpsk_send_gpsk_2()
397 if (eap_gpsk_compute_mic(data->sk, data->sk_len, data->vendor, in eap_gpsk_send_gpsk_2()
398 data->specifier, start, rpos - start, rpos) < in eap_gpsk_send_gpsk_2()
412 if (end - pos < EAP_GPSK_RAND_LEN) { in eap_gpsk_validate_rand()
413 wpa_printf(MSG_DEBUG, "EAP-GPSK: Message too short for " in eap_gpsk_validate_rand()
417 if (os_memcmp(pos, data->rand_peer, EAP_GPSK_RAND_LEN) != 0) { in eap_gpsk_validate_rand()
418 wpa_printf(MSG_DEBUG, "EAP-GPSK: RAND_Peer in GPSK-2 and " in eap_gpsk_validate_rand()
419 "GPSK-3 did not match"); in eap_gpsk_validate_rand()
420 wpa_hexdump(MSG_DEBUG, "EAP-GPSK: RAND_Peer in GPSK-2", in eap_gpsk_validate_rand()
421 data->rand_peer, EAP_GPSK_RAND_LEN); in eap_gpsk_validate_rand()
422 wpa_hexdump(MSG_DEBUG, "EAP-GPSK: RAND_Peer in GPSK-3", in eap_gpsk_validate_rand()
428 if (end - pos < EAP_GPSK_RAND_LEN) { in eap_gpsk_validate_rand()
429 wpa_printf(MSG_DEBUG, "EAP-GPSK: Message too short for " in eap_gpsk_validate_rand()
433 if (os_memcmp(pos, data->rand_server, EAP_GPSK_RAND_LEN) != 0) { in eap_gpsk_validate_rand()
434 wpa_printf(MSG_DEBUG, "EAP-GPSK: RAND_Server in GPSK-1 and " in eap_gpsk_validate_rand()
435 "GPSK-3 did not match"); in eap_gpsk_validate_rand()
436 wpa_hexdump(MSG_DEBUG, "EAP-GPSK: RAND_Server in GPSK-1", in eap_gpsk_validate_rand()
437 data->rand_server, EAP_GPSK_RAND_LEN); in eap_gpsk_validate_rand()
438 wpa_hexdump(MSG_DEBUG, "EAP-GPSK: RAND_Server in GPSK-3", in eap_gpsk_validate_rand()
456 if (end - pos < (int) 2) { in eap_gpsk_validate_id_server()
457 wpa_printf(MSG_DEBUG, "EAP-GPSK: Message too short for " in eap_gpsk_validate_id_server()
465 if (end - pos < (int) len) { in eap_gpsk_validate_id_server()
466 wpa_printf(MSG_DEBUG, "EAP-GPSK: Message too short for " in eap_gpsk_validate_id_server()
471 if (len != data->id_server_len || in eap_gpsk_validate_id_server()
472 os_memcmp(pos, data->id_server, len) != 0) { in eap_gpsk_validate_id_server()
473 wpa_printf(MSG_INFO, "EAP-GPSK: ID_Server did not match with " in eap_gpsk_validate_id_server()
474 "the one used in GPSK-1"); in eap_gpsk_validate_id_server()
475 wpa_hexdump_ascii(MSG_DEBUG, "EAP-GPSK: ID_Server in GPSK-1", in eap_gpsk_validate_id_server()
476 data->id_server, data->id_server_len); in eap_gpsk_validate_id_server()
477 wpa_hexdump_ascii(MSG_DEBUG, "EAP-GPSK: ID_Server in GPSK-3", in eap_gpsk_validate_id_server()
491 int vendor, specifier; in eap_gpsk_validate_csuite() local
497 if (end - pos < (int) sizeof(*csuite)) { in eap_gpsk_validate_csuite()
498 wpa_printf(MSG_DEBUG, "EAP-GPSK: Message too short for " in eap_gpsk_validate_csuite()
503 vendor = WPA_GET_BE32(csuite->vendor); in eap_gpsk_validate_csuite()
504 specifier = WPA_GET_BE16(csuite->specifier); in eap_gpsk_validate_csuite()
506 if (vendor != data->vendor || specifier != data->specifier) { in eap_gpsk_validate_csuite()
507 wpa_printf(MSG_DEBUG, "EAP-GPSK: CSuite_Sel (%d:%d) does not " in eap_gpsk_validate_csuite()
508 "match with the one sent in GPSK-2 (%d:%d)", in eap_gpsk_validate_csuite()
509 vendor, specifier, data->vendor, data->specifier); in eap_gpsk_validate_csuite()
525 if (end - pos < 2) { in eap_gpsk_validate_pd_payload_2()
526 wpa_printf(MSG_DEBUG, "EAP-GPSK: Message too short for " in eap_gpsk_validate_pd_payload_2()
532 if (end - pos < alen) { in eap_gpsk_validate_pd_payload_2()
533 wpa_printf(MSG_DEBUG, "EAP-GPSK: Message too short for " in eap_gpsk_validate_pd_payload_2()
534 "%d-octet PD_Payload_2", alen); in eap_gpsk_validate_pd_payload_2()
537 wpa_hexdump(MSG_DEBUG, "EAP-GPSK: PD_Payload_2", pos, alen); in eap_gpsk_validate_pd_payload_2()
554 miclen = eap_gpsk_mic_len(data->vendor, data->specifier); in eap_gpsk_validate_gpsk_3_mic()
555 if (end - pos < (int) miclen) { in eap_gpsk_validate_gpsk_3_mic()
556 wpa_printf(MSG_DEBUG, "EAP-GPSK: Message too short for MIC " in eap_gpsk_validate_gpsk_3_mic()
558 (unsigned long) (end - pos), in eap_gpsk_validate_gpsk_3_mic()
562 if (eap_gpsk_compute_mic(data->sk, data->sk_len, data->vendor, in eap_gpsk_validate_gpsk_3_mic()
563 data->specifier, payload, pos - payload, mic) in eap_gpsk_validate_gpsk_3_mic()
565 wpa_printf(MSG_DEBUG, "EAP-GPSK: Failed to compute MIC"); in eap_gpsk_validate_gpsk_3_mic()
569 wpa_printf(MSG_INFO, "EAP-GPSK: Incorrect MIC in GPSK-3"); in eap_gpsk_validate_gpsk_3_mic()
570 wpa_hexdump(MSG_DEBUG, "EAP-GPSK: Received MIC", pos, miclen); in eap_gpsk_validate_gpsk_3_mic()
571 wpa_hexdump(MSG_DEBUG, "EAP-GPSK: Computed MIC", mic, miclen); in eap_gpsk_validate_gpsk_3_mic()
590 if (data->state != GPSK_3) { in eap_gpsk_process_gpsk_3()
591 ret->ignore = true; in eap_gpsk_process_gpsk_3()
595 wpa_printf(MSG_DEBUG, "EAP-GPSK: Received Request/GPSK-3"); in eap_gpsk_process_gpsk_3()
610 wpa_printf(MSG_DEBUG, "EAP-GPSK: Ignored %lu bytes of extra " in eap_gpsk_process_gpsk_3()
611 "data in the end of GPSK-2", in eap_gpsk_process_gpsk_3()
612 (unsigned long) (end - pos)); in eap_gpsk_process_gpsk_3()
620 ret->methodState = METHOD_DONE; in eap_gpsk_process_gpsk_3()
621 ret->decision = DECISION_UNCOND_SUCC; in eap_gpsk_process_gpsk_3()
634 wpa_printf(MSG_DEBUG, "EAP-GPSK: Sending Response/GPSK-4"); in eap_gpsk_send_gpsk_4()
636 mlen = eap_gpsk_mic_len(data->vendor, data->specifier); in eap_gpsk_send_gpsk_4()
650 if (eap_gpsk_compute_mic(data->sk, data->sk_len, data->vendor, in eap_gpsk_send_gpsk_4()
651 data->specifier, start, rpos - start, rpos) < in eap_gpsk_send_gpsk_4()
670 u8 opcode, id; in eap_gpsk_process() local
674 ret->ignore = true; in eap_gpsk_process()
678 id = eap_get_id(reqData); in eap_gpsk_process()
680 len--; in eap_gpsk_process()
681 wpa_printf(MSG_DEBUG, "EAP-GPSK: Received frame: opcode %d", opcode); in eap_gpsk_process()
683 ret->ignore = false; in eap_gpsk_process()
684 ret->methodState = METHOD_MAY_CONT; in eap_gpsk_process()
685 ret->decision = DECISION_FAIL; in eap_gpsk_process()
686 ret->allowNotifications = false; in eap_gpsk_process()
690 resp = eap_gpsk_process_gpsk_1(sm, data, ret, id, pos, len); in eap_gpsk_process()
693 resp = eap_gpsk_process_gpsk_3(sm, data, ret, id, pos, len); in eap_gpsk_process()
697 "EAP-GPSK: Ignoring message with unknown opcode %d", in eap_gpsk_process()
699 ret->ignore = true; in eap_gpsk_process()
710 return data->state == SUCCESS; in eap_gpsk_isKeyAvailable()
719 if (data->state != SUCCESS) in eap_gpsk_getKey()
722 key = os_memdup(data->msk, EAP_MSK_LEN); in eap_gpsk_getKey()
736 if (data->state != SUCCESS) in eap_gpsk_get_emsk()
739 key = os_memdup(data->emsk, EAP_EMSK_LEN); in eap_gpsk_get_emsk()
753 if (data->state != SUCCESS) in eap_gpsk_get_session_id()
756 sid = os_memdup(data->session_id, data->id_len); in eap_gpsk_get_session_id()
759 *len = data->id_len; in eap_gpsk_get_session_id()
772 return -1; in eap_peer_gpsk_register()
774 eap->init = eap_gpsk_init; in eap_peer_gpsk_register()
775 eap->deinit = eap_gpsk_deinit; in eap_peer_gpsk_register()
776 eap->process = eap_gpsk_process; in eap_peer_gpsk_register()
777 eap->isKeyAvailable = eap_gpsk_isKeyAvailable; in eap_peer_gpsk_register()
778 eap->getKey = eap_gpsk_getKey; in eap_peer_gpsk_register()
779 eap->get_emsk = eap_gpsk_get_emsk; in eap_peer_gpsk_register()
780 eap->getSessionId = eap_gpsk_get_session_id; in eap_peer_gpsk_register()