亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? eap_aka.c

?? 最新的Host AP 新添加了許多pcmcia 的驅動
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * hostapd / EAP-AKA (RFC 4187) and EAP-AKA' (draft-arkko-eap-aka-kdf) * Copyright (c) 2005-2008, Jouni Malinen <j@w1.fi> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * Alternatively, this software may be distributed under the terms of BSD * license. * * See README and COPYING for more details. */#include "includes.h"#include "common.h"#include "eap_server/eap_i.h"#include "eap_common/eap_sim_common.h"#include "eap_server/eap_sim_db.h"#include "sha1.h"#include "sha256.h"#include "crypto.h"struct eap_aka_data {	u8 mk[EAP_SIM_MK_LEN];	u8 nonce_s[EAP_SIM_NONCE_S_LEN];	u8 k_aut[EAP_AKA_PRIME_K_AUT_LEN];	u8 k_encr[EAP_SIM_K_ENCR_LEN];	u8 k_re[EAP_AKA_PRIME_K_RE_LEN]; /* EAP-AKA' only */	u8 msk[EAP_SIM_KEYING_DATA_LEN];	u8 emsk[EAP_EMSK_LEN];	u8 rand[EAP_AKA_RAND_LEN];	u8 autn[EAP_AKA_AUTN_LEN];	u8 ck[EAP_AKA_CK_LEN];	u8 ik[EAP_AKA_IK_LEN];	u8 res[EAP_AKA_RES_MAX_LEN];	size_t res_len;	enum {		IDENTITY, CHALLENGE, REAUTH, NOTIFICATION, SUCCESS, FAILURE	} state;	char *next_pseudonym;	char *next_reauth_id;	u16 counter;	struct eap_sim_reauth *reauth;	int auts_reported; /* whether the current AUTS has been reported to the			    * eap_sim_db */	u16 notification;	int use_result_ind;	struct wpabuf *id_msgs;	int pending_id;	u8 eap_method;	u8 *network_name;	size_t network_name_len;	u16 kdf;};static void eap_aka_determine_identity(struct eap_sm *sm,				       struct eap_aka_data *data,				       int before_identity, int after_reauth);static const char * eap_aka_state_txt(int state){	switch (state) {	case IDENTITY:		return "IDENTITY";	case CHALLENGE:		return "CHALLENGE";	case REAUTH:		return "REAUTH";	case SUCCESS:		return "SUCCESS";	case FAILURE:		return "FAILURE";	case NOTIFICATION:		return "NOTIFICATION";	default:		return "Unknown?!";	}}static void eap_aka_state(struct eap_aka_data *data, int state){	wpa_printf(MSG_DEBUG, "EAP-AKA: %s -> %s",		   eap_aka_state_txt(data->state),		   eap_aka_state_txt(state));	data->state = state;}static void * eap_aka_init(struct eap_sm *sm){	struct eap_aka_data *data;	if (sm->eap_sim_db_priv == NULL) {		wpa_printf(MSG_WARNING, "EAP-AKA: eap_sim_db not configured");		return NULL;	}	data = os_zalloc(sizeof(*data));	if (data == NULL)		return NULL;	data->eap_method = EAP_TYPE_AKA;	data->state = IDENTITY;	eap_aka_determine_identity(sm, data, 1, 0);	data->pending_id = -1;	return data;}#ifdef EAP_AKA_PRIMEstatic void * eap_aka_prime_init(struct eap_sm *sm){	struct eap_aka_data *data;	/* TODO: make ANID configurable; see 3GPP TS 24.302 */	char *network_name = "WLAN";	if (sm->eap_sim_db_priv == NULL) {		wpa_printf(MSG_WARNING, "EAP-AKA: eap_sim_db not configured");		return NULL;	}	data = os_zalloc(sizeof(*data));	if (data == NULL)		return NULL;	data->eap_method = EAP_TYPE_AKA_PRIME;	data->network_name = os_malloc(os_strlen(network_name));	if (data->network_name == NULL) {		os_free(data);		return NULL;	}	data->network_name_len = os_strlen(network_name);	os_memcpy(data->network_name, network_name, data->network_name_len);	data->state = IDENTITY;	eap_aka_determine_identity(sm, data, 1, 0);	data->pending_id = -1;	return data;}#endif /* EAP_AKA_PRIME */static void eap_aka_reset(struct eap_sm *sm, void *priv){	struct eap_aka_data *data = priv;	os_free(data->next_pseudonym);	os_free(data->next_reauth_id);	wpabuf_free(data->id_msgs);	os_free(data->network_name);	os_free(data);}static int eap_aka_add_id_msg(struct eap_aka_data *data,			      const struct wpabuf *msg){	if (msg == NULL)		return -1;	if (data->id_msgs == NULL) {		data->id_msgs = wpabuf_dup(msg);		return data->id_msgs == NULL ? -1 : 0;	}	if (wpabuf_resize(&data->id_msgs, wpabuf_len(msg)) < 0)		return -1;	wpabuf_put_buf(data->id_msgs, msg);	return 0;}static void eap_aka_add_checkcode(struct eap_aka_data *data,				  struct eap_sim_msg *msg){	const u8 *addr;	size_t len;	u8 hash[SHA256_MAC_LEN];	wpa_printf(MSG_DEBUG, "   AT_CHECKCODE");	if (data->id_msgs == NULL) {		/*		 * No EAP-AKA/Identity packets were exchanged - send empty		 * checkcode.		 */		eap_sim_msg_add(msg, EAP_SIM_AT_CHECKCODE, 0, NULL, 0);		return;	}	/* Checkcode is SHA1 hash over all EAP-AKA/Identity packets. */	addr = wpabuf_head(data->id_msgs);	len = wpabuf_len(data->id_msgs);	wpa_hexdump(MSG_MSGDUMP, "EAP-AKA: AT_CHECKCODE data", addr, len);	if (data->eap_method == EAP_TYPE_AKA_PRIME)		sha256_vector(1, &addr, &len, hash);	else		sha1_vector(1, &addr, &len, hash);	eap_sim_msg_add(msg, EAP_SIM_AT_CHECKCODE, 0, hash,			data->eap_method == EAP_TYPE_AKA_PRIME ?			EAP_AKA_PRIME_CHECKCODE_LEN : EAP_AKA_CHECKCODE_LEN);}static int eap_aka_verify_checkcode(struct eap_aka_data *data,				    const u8 *checkcode, size_t checkcode_len){	const u8 *addr;	size_t len;	u8 hash[SHA256_MAC_LEN];	size_t hash_len;	if (checkcode == NULL)		return -1;	if (data->id_msgs == NULL) {		if (checkcode_len != 0) {			wpa_printf(MSG_DEBUG, "EAP-AKA: Checkcode from peer "				   "indicates that AKA/Identity messages were "				   "used, but they were not");			return -1;		}		return 0;	}	hash_len = data->eap_method == EAP_TYPE_AKA_PRIME ?		EAP_AKA_PRIME_CHECKCODE_LEN : EAP_AKA_CHECKCODE_LEN;	if (checkcode_len != hash_len) {		wpa_printf(MSG_DEBUG, "EAP-AKA: Checkcode from peer indicates "			   "that AKA/Identity message were not used, but they "			   "were");		return -1;	}	/* Checkcode is SHA1 hash over all EAP-AKA/Identity packets. */	addr = wpabuf_head(data->id_msgs);	len = wpabuf_len(data->id_msgs);	if (data->eap_method == EAP_TYPE_AKA_PRIME)		sha256_vector(1, &addr, &len, hash);	else		sha1_vector(1, &addr, &len, hash);	if (os_memcmp(hash, checkcode, hash_len) != 0) {		wpa_printf(MSG_DEBUG, "EAP-AKA: Mismatch in AT_CHECKCODE");		return -1;	}	return 0;}static struct wpabuf * eap_aka_build_identity(struct eap_sm *sm,					      struct eap_aka_data *data, u8 id){	struct eap_sim_msg *msg;	struct wpabuf *buf;	wpa_printf(MSG_DEBUG, "EAP-AKA: Generating Identity");	msg = eap_sim_msg_init(EAP_CODE_REQUEST, id, data->eap_method,			       EAP_AKA_SUBTYPE_IDENTITY);	if (eap_sim_db_identity_known(sm->eap_sim_db_priv, sm->identity,				      sm->identity_len)) {		wpa_printf(MSG_DEBUG, "   AT_PERMANENT_ID_REQ");		eap_sim_msg_add(msg, EAP_SIM_AT_PERMANENT_ID_REQ, 0, NULL, 0);	} else {		/*		 * RFC 4187, Chap. 4.1.4 recommends that identity from EAP is		 * ignored and the AKA/Identity is used to request the		 * identity.		 */		wpa_printf(MSG_DEBUG, "   AT_ANY_ID_REQ");		eap_sim_msg_add(msg, EAP_SIM_AT_ANY_ID_REQ, 0, NULL, 0);	}	buf = eap_sim_msg_finish(msg, NULL, NULL, 0);	if (eap_aka_add_id_msg(data, buf) < 0) {		wpabuf_free(buf);		return NULL;	}	data->pending_id = id;	return buf;}static int eap_aka_build_encr(struct eap_sm *sm, struct eap_aka_data *data,			      struct eap_sim_msg *msg, u16 counter,			      const u8 *nonce_s){	os_free(data->next_pseudonym);	data->next_pseudonym =		eap_sim_db_get_next_pseudonym(sm->eap_sim_db_priv, 1);	os_free(data->next_reauth_id);	if (data->counter <= EAP_AKA_MAX_FAST_REAUTHS) {		data->next_reauth_id =			eap_sim_db_get_next_reauth_id(sm->eap_sim_db_priv, 1);	} else {		wpa_printf(MSG_DEBUG, "EAP-AKA: Max fast re-authentication "			   "count exceeded - force full authentication");		data->next_reauth_id = NULL;	}	if (data->next_pseudonym == NULL && data->next_reauth_id == NULL &&	    counter == 0 && nonce_s == NULL)		return 0;	wpa_printf(MSG_DEBUG, "   AT_IV");	wpa_printf(MSG_DEBUG, "   AT_ENCR_DATA");	eap_sim_msg_add_encr_start(msg, EAP_SIM_AT_IV, EAP_SIM_AT_ENCR_DATA);	if (counter > 0) {		wpa_printf(MSG_DEBUG, "   *AT_COUNTER (%u)", counter);		eap_sim_msg_add(msg, EAP_SIM_AT_COUNTER, counter, NULL, 0);	}	if (nonce_s) {		wpa_printf(MSG_DEBUG, "   *AT_NONCE_S");		eap_sim_msg_add(msg, EAP_SIM_AT_NONCE_S, 0, nonce_s,				EAP_SIM_NONCE_S_LEN);	}	if (data->next_pseudonym) {		wpa_printf(MSG_DEBUG, "   *AT_NEXT_PSEUDONYM (%s)",			   data->next_pseudonym);		eap_sim_msg_add(msg, EAP_SIM_AT_NEXT_PSEUDONYM,				os_strlen(data->next_pseudonym),				(u8 *) data->next_pseudonym,				os_strlen(data->next_pseudonym));	}	if (data->next_reauth_id) {		wpa_printf(MSG_DEBUG, "   *AT_NEXT_REAUTH_ID (%s)",			   data->next_reauth_id);		eap_sim_msg_add(msg, EAP_SIM_AT_NEXT_REAUTH_ID,				os_strlen(data->next_reauth_id),				(u8 *) data->next_reauth_id,				os_strlen(data->next_reauth_id));	}	if (eap_sim_msg_add_encr_end(msg, data->k_encr, EAP_SIM_AT_PADDING)) {		wpa_printf(MSG_WARNING, "EAP-AKA: Failed to encrypt "			   "AT_ENCR_DATA");		return -1;	}	return 0;}static struct wpabuf * eap_aka_build_challenge(struct eap_sm *sm,					       struct eap_aka_data *data,					       u8 id){	struct eap_sim_msg *msg;	wpa_printf(MSG_DEBUG, "EAP-AKA: Generating Challenge");	msg = eap_sim_msg_init(EAP_CODE_REQUEST, id, data->eap_method,			       EAP_AKA_SUBTYPE_CHALLENGE);	wpa_printf(MSG_DEBUG, "   AT_RAND");	eap_sim_msg_add(msg, EAP_SIM_AT_RAND, 0, data->rand, EAP_AKA_RAND_LEN);	wpa_printf(MSG_DEBUG, "   AT_AUTN");	eap_sim_msg_add(msg, EAP_SIM_AT_AUTN, 0, data->autn, EAP_AKA_AUTN_LEN);	if (data->eap_method == EAP_TYPE_AKA_PRIME) {		if (data->kdf) {			/* Add the selected KDF into the beginning */			wpa_printf(MSG_DEBUG, "   AT_KDF");			eap_sim_msg_add(msg, EAP_SIM_AT_KDF, data->kdf,					NULL, 0);		}		wpa_printf(MSG_DEBUG, "   AT_KDF");		eap_sim_msg_add(msg, EAP_SIM_AT_KDF, EAP_AKA_PRIME_KDF,				NULL, 0);		wpa_printf(MSG_DEBUG, "   AT_KDF_INPUT");		eap_sim_msg_add(msg, EAP_SIM_AT_KDF_INPUT,				data->network_name_len,				data->network_name, data->network_name_len);	}	if (eap_aka_build_encr(sm, data, msg, 0, NULL)) {		eap_sim_msg_free(msg);		return NULL;	}	eap_aka_add_checkcode(data, msg);	if (sm->eap_sim_aka_result_ind) {		wpa_printf(MSG_DEBUG, "   AT_RESULT_IND");		eap_sim_msg_add(msg, EAP_SIM_AT_RESULT_IND, 0, NULL, 0);	}#ifdef EAP_AKA_PRIME	if (data->eap_method == EAP_TYPE_AKA) {		u16 flags = 0;		int i;		int aka_prime_preferred = 0;		i = 0;		while (sm->user && i < EAP_MAX_METHODS &&		       (sm->user->methods[i].vendor != EAP_VENDOR_IETF ||			sm->user->methods[i].method != EAP_TYPE_NONE)) {			if (sm->user->methods[i].vendor == EAP_VENDOR_IETF) {				if (sm->user->methods[i].method ==				    EAP_TYPE_AKA)					break;				if (sm->user->methods[i].method ==				    EAP_TYPE_AKA_PRIME) {					aka_prime_preferred = 1;					break;				}			}			i++;		}		if (aka_prime_preferred)			flags |= EAP_AKA_BIDDING_FLAG_D;		eap_sim_msg_add(msg, EAP_SIM_AT_BIDDING, flags, NULL, 0);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆精品在线播放| 色欧美片视频在线观看 | 国产成人精品一区二区三区网站观看| 国产精品欧美一区二区三区| 欧美一区二区日韩| 91成人国产精品| 欧美午夜寂寞影院| 欧美性视频一区二区三区| 色综合亚洲欧洲| 日本久久电影网| 91久久精品国产91性色tv| 美国av一区二区| 日韩 欧美一区二区三区| 日韩电影一区二区三区四区| 天天影视网天天综合色在线播放| 亚洲国产欧美日韩另类综合| 美女久久久精品| 国产成人8x视频一区二区 | 亚洲欧洲成人精品av97| 精品国产自在久精品国产| 国产午夜精品久久久久久久| 亚洲人成网站色在线观看| 午夜精品免费在线| 国产福利不卡视频| 欧美精品vⅰdeose4hd| 国产欧美日韩三级| 日本欧美一区二区在线观看| 国产福利91精品一区| 色综合久久99| 在线电影欧美成精品| 国产精品嫩草99a| 久久91精品久久久久久秒播| 色94色欧美sute亚洲13| 久久新电视剧免费观看| 美国十次了思思久久精品导航| 色网综合在线观看| 国产欧美日韩一区二区三区在线观看| 亚洲综合区在线| 成人自拍视频在线| 亚洲乱码日产精品bd| av影院午夜一区| 国产精品午夜久久| 国产成a人无v码亚洲福利| 精品国产乱码久久久久久久久| 久草热8精品视频在线观看| 91精品国产综合久久久久久漫画| 亚洲国产一区在线观看| 欧美午夜精品一区二区三区| 日本视频一区二区| 久久久久国产成人精品亚洲午夜| 国产成人综合视频| 日韩理论片一区二区| 一本大道久久a久久精二百| 亚洲免费在线电影| 欧美视频中文一区二区三区在线观看| 日韩午夜在线观看| 国产精品一区二区久久精品爱涩 | 26uuu久久天堂性欧美| 成人深夜福利app| 国产日韩成人精品| 高清不卡一二三区| 亚洲国产精品视频| 精品成人a区在线观看| 成人av中文字幕| 性做久久久久久久久| 国产三级久久久| 欧美一区二区久久| 韩国在线一区二区| 亚洲一区二区精品3399| 久久综合丝袜日本网| 一本久久精品一区二区| 国产一区二区三区最好精华液 | 亚洲图片欧美色图| 国产人久久人人人人爽| 欧美精品第一页| 成人av在线电影| 久久不见久久见免费视频7| 亚洲综合色网站| 亚洲区小说区图片区qvod| 国产女主播视频一区二区| 欧美一级视频精品观看| 欧美色视频在线观看| 99久久精品费精品国产一区二区| 激情综合色丁香一区二区| 亚洲电影中文字幕在线观看| 国产精品视频线看| 久久久不卡网国产精品二区| 日韩一区二区中文字幕| 日韩亚洲欧美高清| 精品久久国产老人久久综合| 欧美人妇做爰xxxⅹ性高电影 | 欧美在线观看视频一区二区三区| 国产成人午夜99999| 国产米奇在线777精品观看| 久久精品国产99| 国产米奇在线777精品观看| 日韩黄色小视频| 免费在线观看一区| 国产精一区二区三区| 国产成人精品亚洲777人妖| proumb性欧美在线观看| 在线亚洲人成电影网站色www| 色噜噜狠狠成人网p站| 欧美精品第1页| 欧美国产日韩a欧美在线观看| 亚洲三级在线看| 午夜av区久久| 成人激情午夜影院| 99re这里都是精品| 日韩免费性生活视频播放| 国产精品久线在线观看| 亚洲在线免费播放| 成人国产亚洲欧美成人综合网| 国产福利91精品一区| 99久久精品国产导航| 欧美岛国在线观看| 亚洲另类在线制服丝袜| 韩国午夜理伦三级不卡影院| 99re8在线精品视频免费播放| 欧美r级电影在线观看| 理论电影国产精品| 色综合色综合色综合| 自拍偷在线精品自拍偷无码专区| 国产综合色在线视频区| 欧美tickling挠脚心丨vk| 国内精品久久久久影院一蜜桃| 欧美一卡二卡三卡| 国产一区二区三区综合| 久久精品人人做人人爽97| 国产99久久精品| ...xxx性欧美| 3751色影院一区二区三区| 亚洲.国产.中文慕字在线| 欧美福利视频导航| 精品一区二区三区香蕉蜜桃| 国产人妖乱国产精品人妖| 91片黄在线观看| 午夜精品福利久久久| 久久影院午夜论| 色综合天天综合网天天看片| 图片区小说区区亚洲影院| 久久久综合网站| 欧洲中文字幕精品| 国产精品影视在线观看| 亚洲国产精品久久久久婷婷884| 日韩一级片在线播放| 不卡的看片网站| 老司机精品视频一区二区三区| 亚洲欧洲色图综合| 精品国产sm最大网站免费看| 91蝌蚪国产九色| 国产乱理伦片在线观看夜一区| 亚洲欧美日韩中文字幕一区二区三区| 欧美老年两性高潮| 91麻豆高清视频| 国产91在线观看丝袜| 亚洲国产精品欧美一二99| 中文字幕一区二| 国产精品美女www爽爽爽| 91精品国产麻豆国产自产在线 | 久久超级碰视频| 日韩国产高清影视| 亚洲成在线观看| 亚洲一区二区在线免费看| 亚洲精品第1页| 亚洲综合一区在线| 亚洲成人1区2区| 亚洲午夜精品久久久久久久久| 亚洲美女屁股眼交3| 亚洲精品成人在线| 亚洲一区二区三区四区五区中文 | 91在线视频观看| 91亚洲男人天堂| 欧美午夜一区二区三区免费大片| 欧美日韩国产小视频| 欧美一级久久久| 国产亚洲欧美日韩在线一区| 欧美精品一区二区三区蜜桃| 久久久精品免费网站| 成人欧美一区二区三区黑人麻豆 | 在线观看亚洲一区| 欧美男生操女生| 欧美一级一区二区| xfplay精品久久| 亚洲另类色综合网站| 日韩综合在线视频| 国产一区 二区| 欧美亚洲自拍偷拍| 久久久91精品国产一区二区精品| 亚洲人成伊人成综合网小说| 亚洲成人在线免费| 丁香亚洲综合激情啪啪综合| 97精品视频在线观看自产线路二| 欧美性猛交xxxx黑人交| 久久青草欧美一区二区三区| 亚洲欧美国产三级| 成人午夜电影小说| 欧美一区二区三级| 亚洲国产成人va在线观看天堂| 福利电影一区二区|