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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? eap_fast.c

?? WPA在Linux下實(shí)現(xiàn)的原代碼 WPA在Linux下實(shí)現(xiàn)的原代碼
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
	*pos += snprintf(*pos, *buf + *buf_len - *pos, "%s=", field);	for (i = 0; i < len; i++) {		*pos += snprintf(*pos, *buf + *buf_len - *pos,				 "%02x", data[i]);	}	*pos += snprintf(*pos, *buf + *buf_len - *pos, "\n");	if (txt) {		*pos += snprintf(*pos, *buf + *buf_len - *pos,				 "%s-txt=", field);		for (i = 0; i < len; i++) {			*pos += snprintf(*pos, *buf + *buf_len - *pos,					 "%c", data[i]);		}		*pos += snprintf(*pos, *buf + *buf_len - *pos, "\n");	}}static int eap_fast_save_pac(struct eap_sm *sm, struct eap_fast_data *data,			     const char *pac_file){	FILE *f;	struct eap_fast_pac *pac;	int count = 0;	char *buf, *pos;	size_t buf_len;	if (pac_file == NULL)		return -1;	buf_len = 1024;	pos = buf = malloc(buf_len);	if (buf == NULL)		return -1;	pos += snprintf(pos, buf + buf_len - pos, "%s\n", pac_file_hdr);	pac = data->pac;	while (pac) {		pos += snprintf(pos, buf + buf_len - pos, "START\n");		eap_fast_write(&buf, &pos, &buf_len, "PAC-Key", pac->pac_key,			       EAP_FAST_PAC_KEY_LEN, 0);		eap_fast_write(&buf, &pos, &buf_len, "PAC-Opaque",			       pac->pac_opaque, pac->pac_opaque_len, 0);		eap_fast_write(&buf, &pos, &buf_len, "PAC-Info", pac->pac_info,			       pac->pac_info_len, 0);		eap_fast_write(&buf, &pos, &buf_len, "A-ID", pac->a_id,			       pac->a_id_len, 0);		eap_fast_write(&buf, &pos, &buf_len, "I-ID", pac->i_id,			       pac->i_id_len, 1);		eap_fast_write(&buf, &pos, &buf_len, "A-ID-Info",			       pac->a_id_info, pac->a_id_info_len, 1);		pos += snprintf(pos, buf + buf_len - pos, "END\n");		count++;		pac = pac->next;		if (buf == NULL) {			wpa_printf(MSG_DEBUG, "EAP-FAST: No memory for PAC "				   "data");			return -1;		}	}	if (strncmp(pac_file, "blob://", 7) == 0) {		struct wpa_config_blob *blob;		blob = malloc(sizeof(*blob));		if (blob == NULL) {			free(buf);			return -1;		}		memset(blob, 0, sizeof(*blob));		blob->data = (u8 *) buf;		blob->len = pos - buf;		buf = NULL;		blob->name = strdup(pac_file + 7);		if (blob->name == NULL) {			wpa_config_free_blob(blob);			return -1;		}		eap_set_config_blob(sm, blob);	} else {		f = fopen(pac_file, "w");		if (f == NULL) {			wpa_printf(MSG_INFO, "EAP-FAST: Failed to open PAC "				   "file '%s' for writing", pac_file);			free(buf);			return -1;		}		fprintf(f, "%s", buf);		free(buf);		fclose(f);	}	wpa_printf(MSG_DEBUG, "EAP-FAST: wrote %d PAC entries into '%s'",		   count, pac_file);	return 0;}static void * eap_fast_init(struct eap_sm *sm){	struct eap_fast_data *data;	struct wpa_ssid *config = eap_get_config(sm);	data = malloc(sizeof(*data));	if (data == NULL)		return NULL;	memset(data, 0, sizeof(*data));	data->fast_version = EAP_FAST_VERSION;	if (config && config->phase1) {		if (strstr(config->phase1, "fast_provisioning=1")) {			data->provisioning_allowed = 1;			wpa_printf(MSG_DEBUG, "EAP-FAST: Automatic PAC "				   "provisioning is allowed");		}	}	if (config && config->phase2) {		char *start, *pos, *buf;		u8 method, *methods = NULL, *_methods;		size_t num_methods = 0;		start = buf = strdup(config->phase2);		if (buf == NULL) {			eap_fast_deinit(sm, data);			return NULL;		}		while (start && *start != '\0') {			pos = strstr(start, "auth=");			if (pos == NULL)				break;			if (start != pos && *(pos - 1) != ' ') {				start = pos + 5;				continue;			}			start = pos + 5;			pos = strchr(start, ' ');			if (pos)				*pos++ = '\0';			method = eap_get_phase2_type(start);			if (method == EAP_TYPE_NONE) {				wpa_printf(MSG_ERROR, "EAP-FAST: Unsupported "					   "Phase2 method '%s'", start);			} else {				num_methods++;				_methods = realloc(methods, num_methods);				if (_methods == NULL) {					free(methods);					free(buf);					eap_fast_deinit(sm, data);					return NULL;				}				methods = _methods;				methods[num_methods - 1] = method;			}			start = pos;		}		free(buf);		data->phase2_types = methods;		data->num_phase2_types = num_methods;	}	if (data->phase2_types == NULL) {		data->phase2_types =			eap_get_phase2_types(config, &data->num_phase2_types);	}	if (data->phase2_types == NULL) {		wpa_printf(MSG_ERROR, "EAP-FAST: No Phase2 method available");		eap_fast_deinit(sm, data);		return NULL;	}	wpa_hexdump(MSG_DEBUG, "EAP-FAST: Phase2 EAP types",		    data->phase2_types, data->num_phase2_types);	data->phase2_type = EAP_TYPE_NONE;	if (eap_tls_ssl_init(sm, &data->ssl, config)) {		wpa_printf(MSG_INFO, "EAP-FAST: Failed to initialize SSL.");		eap_fast_deinit(sm, data);		return NULL;	}	/* The local RADIUS server in a Cisco AP does not seem to like empty	 * fragments before data, so disable that workaround for CBC.	 * TODO: consider making this configurable */	tls_connection_enable_workaround(sm->ssl_ctx, data->ssl.conn);	if (eap_fast_load_pac(sm, data, config->pac_file) < 0) {		eap_fast_deinit(sm, data);		return NULL;	}	if (data->pac == NULL && !data->provisioning_allowed) {		wpa_printf(MSG_INFO, "EAP-FAST: No PAC configured and "			   "provisioning disabled");		eap_fast_deinit(sm, data);		return NULL;	}	return data;}static void eap_fast_deinit(struct eap_sm *sm, void *priv){	struct eap_fast_data *data = priv;	struct eap_fast_pac *pac, *prev;	if (data == NULL)		return;	if (data->phase2_priv && data->phase2_method)		data->phase2_method->deinit(sm, data->phase2_priv);	free(data->phase2_types);	free(data->key_block_a);	free(data->key_block_p);	eap_tls_ssl_deinit(sm, &data->ssl);	pac = data->pac;	prev = NULL;	while (pac) {		prev = pac;		pac = pac->next;		eap_fast_free_pac(prev);	}	free(data);}static int eap_fast_encrypt(struct eap_sm *sm, struct eap_fast_data *data,			    int id, const u8 *plain, size_t plain_len,			    u8 **out_data, size_t *out_len){	int res;	u8 *pos;	struct eap_hdr *resp;	/* TODO: add support for fragmentation, if needed. This will need to	 * add TLS Message Length field, if the frame is fragmented. */	resp = malloc(sizeof(struct eap_hdr) + 2 + data->ssl.tls_out_limit);	if (resp == NULL)		return 0;	resp->code = EAP_CODE_RESPONSE;	resp->identifier = id;	pos = (u8 *) (resp + 1);	*pos++ = EAP_TYPE_FAST;	*pos++ = data->fast_version;	res = tls_connection_encrypt(sm->ssl_ctx, data->ssl.conn,				     plain, plain_len,				     pos, data->ssl.tls_out_limit);	if (res < 0) {		wpa_printf(MSG_INFO, "EAP-FAST: Failed to encrypt Phase 2 "			   "data");		free(resp);		return 0;	}	*out_len = sizeof(struct eap_hdr) + 2 + res;	resp->length = host_to_be16(*out_len);	*out_data = (u8 *) resp;	return 0;}static int eap_fast_phase2_nak(struct eap_sm *sm,			       struct eap_fast_data *data,			       struct eap_hdr *hdr,			       u8 **resp, size_t *resp_len){	struct eap_hdr *resp_hdr;	u8 *pos = (u8 *) (hdr + 1);	wpa_printf(MSG_DEBUG, "EAP-FAST: Phase 2 Request: Nak type=%d", *pos);	wpa_hexdump(MSG_DEBUG, "EAP-FAST: Allowed Phase2 EAP types",		    data->phase2_types, data->num_phase2_types);	*resp_len = sizeof(struct eap_hdr) + 1 + data->num_phase2_types;	*resp = malloc(*resp_len);	if (*resp == NULL)		return -1;	resp_hdr = (struct eap_hdr *) (*resp);	resp_hdr->code = EAP_CODE_RESPONSE;	resp_hdr->identifier = hdr->identifier;	resp_hdr->length = host_to_be16(*resp_len);	pos = (u8 *) (resp_hdr + 1);	*pos++ = EAP_TYPE_NAK;	memcpy(pos, data->phase2_types, data->num_phase2_types);	return 0;}static int eap_fast_derive_msk(struct eap_sm *sm, struct eap_fast_data *data){	u8 isk[32];	u8 imck[60];	if (data->key_block_a == NULL)		return -1;	memset(isk, 0, sizeof(isk));	sha1_t_prf(data->key_block_a->session_key_seed,		   sizeof(data->key_block_a->session_key_seed),		   "Inner Methods Compound Keys",		   isk, sizeof(isk), imck, sizeof(imck));	sha1_t_prf(imck, 40, "Session Key Generating Function", (u8 *) "", 0,		   data->key_data, EAP_FAST_KEY_LEN);	wpa_hexdump_key(MSG_DEBUG, "EAP-FAST: Derived key (MSK)",			data->key_data, EAP_FAST_KEY_LEN);	data->success = 1;	return 0;}static int eap_fast_set_tls_master_secret(struct eap_sm *sm,					  struct eap_fast_data *data,					  const u8 *tls, size_t tls_len){	struct tls_keys keys;	u8 master_secret[48], *seed;	const u8 *server_random;	size_t seed_len, server_random_len;	if (data->tls_master_secret_set || !data->current_pac ||	    tls_connection_get_keys(sm->ssl_ctx, data->ssl.conn, &keys)) {		return 0;	}	wpa_hexdump(MSG_DEBUG, "EAP-FAST: client_random",		    keys.client_random, keys.client_random_len);	/* TLS master secret is needed before TLS library has processed this	 * message which includes both ServerHello and an encrypted handshake	 * message, so we need to parse server_random from this message before	 * passing it to TLS library.	 *	 * Example TLS packet header:	 * (16 03 01 00 2a 02 00 00 26 03 01 <32 bytes server_random>)	 * Content Type: Handshake: 0x16	 * Version: TLS 1.0 (0x0301)	 * Lenghth: 42 (0x002a)	 * Handshake Type: Server Hello: 0x02	 * Length: 38 (0x000026)	 * Version TLS 1.0 (0x0301)	 * Random: 32 bytes	 */	if (tls_len < 43 || tls[0] != 0x16 ||	    tls[1] != 0x03 || tls[2] != 0x01 ||	    tls[5] != 0x02 || tls[9] != 0x03 || tls[10] != 0x01) {		wpa_hexdump(MSG_DEBUG, "EAP-FAST: unrecognized TLS "			    "ServerHello", tls, tls_len);		return -1;	}	server_random = tls + 11;	server_random_len = 32;	wpa_hexdump(MSG_DEBUG, "EAP-FAST: server_random",		    server_random, server_random_len);	seed_len = keys.client_random_len + server_random_len;	seed = malloc(seed_len);	if (seed == NULL)		return -1;	memcpy(seed, server_random, server_random_len);	memcpy(seed + server_random_len,	       keys.client_random, keys.client_random_len);	wpa_hexdump(MSG_MSGDUMP, "EAP-FAST: T-PRF seed", seed, seed_len);	wpa_hexdump_key(MSG_MSGDUMP, "EAP-FAST: PAC-Key",			data->current_pac->pac_key, EAP_FAST_PAC_KEY_LEN);	/* master_secret = T-PRF(PAC-Key, "PAC to master secret label hash", 	 * server_random + client_random, 48) */	sha1_t_prf(data->current_pac->pac_key, EAP_FAST_PAC_KEY_LEN,		   "PAC to master secret label hash",		   seed, seed_len, master_secret, sizeof(master_secret));	free(seed);	wpa_hexdump_key(MSG_DEBUG, "EAP-FAST: TLS pre-master-secret",			master_secret, sizeof(master_secret));	data->tls_master_secret_set = 1;	return tls_connection_set_master_key(sm->ssl_ctx, data->ssl.conn,					     master_secret,					     sizeof(master_secret));}static u8 * eap_fast_derive_key(struct eap_sm *sm, struct eap_ssl_data *data,				char *label, size_t len){	struct tls_keys keys;	u8 *rnd;	u8 *out;	int block_size;	if (tls_connection_get_keys(sm->ssl_ctx, data->conn, &keys))		return NULL;	block_size = tls_connection_get_keyblock_size(sm->ssl_ctx, data->conn);	if (block_size < 0)		return NULL;	out = malloc(block_size + len);	rnd = malloc(keys.client_random_len + keys.server_random_len);	if (out == NULL || rnd == NULL) {		free(out);		free(rnd);		return NULL;	}	memcpy(rnd, keys.server_random, keys.server_random_len);	memcpy(rnd + keys.server_random_len, keys.client_random,	       keys.client_random_len);	wpa_hexdump_key(MSG_MSGDUMP, "EAP-FAST: master_secret for key "			"expansion", keys.master_key, keys.master_key_len);	if (tls_prf(keys.master_key, keys.master_key_len,		    label, rnd, keys.client_random_len +		    keys.server_random_len, out, block_size + len)) {		free(rnd);		free(out);		return NULL;	}	free(rnd);	memmove(out, out + block_size, len);	return out;}static void eap_fast_derive_key_auth(struct eap_sm *sm,				     struct eap_fast_data *data){	free(data->key_block_a);	data->key_block_a = (struct eap_fast_key_block_auth *)		eap_fast_derive_key(sm, &data->ssl, "key expansion",				    sizeof(*data->key_block_a));	if (data->key_block_a == NULL) {		wpa_printf(MSG_DEBUG, "EAP-FAST: Failed to derive "			   "session_key_seed");		return;	}	wpa_hexdump_key(MSG_DEBUG, "EAP-FAST: session_key_seed",			data->key_block_a->session_key_seed,			sizeof(data->key_block_a->session_key_seed));}static void eap_fast_derive_key_provisioning(struct eap_sm *sm,					     struct eap_fast_data *data){	free(data->key_block_p);	data->key_block_p = (struct eap_fast_key_block_provisioning *)		eap_fast_derive_key(sm, &data->ssl, "key expansion",				    sizeof(*data->key_block_p));	if (data->key_block_p == NULL) {		wpa_printf(MSG_DEBUG, "EAP-FAST: Failed to derive key block");		return;	}	wpa_hexdump_key(MSG_DEBUG, "EAP-FAST: session_key_seed",			data->key_block_p->session_key_seed,			sizeof(data->key_block_p->session_key_seed));	wpa_hexdump_key(MSG_DEBUG, "EAP-FAST: server_challenge",			data->key_block_p->server_challenge,			sizeof(data->key_block_p->server_challenge));	wpa_hexdump_key(MSG_DEBUG, "EAP-FAST: client_challenge",			data->key_block_p->client_challenge,			sizeof(data->key_block_p->client_challenge));}static void eap_fast_derive_keys(struct eap_sm *sm, struct eap_fast_data *data){	if (data->current_pac) {		eap_fast_derive_key_auth(sm, data);	} else {		eap_fast_derive_key_provisioning(sm, data);	}}static int eap_fast_phase2_request(struct eap_sm *sm,				   struct eap_fast_data *data,				   struct eap_method_ret *ret,				   struct eap_hdr *hdr,				   u8 **resp, size_t *resp_len){	size_t len = be_to_host16(hdr->length);	u8 *pos;	struct eap_method_ret iret;	if (len <= sizeof(struct eap_hdr)) {		wpa_printf(MSG_INFO, "EAP-FAST: too short "			   "Phase 2 request (len=%lu)", (unsigned long) len);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品少妇一区二区三区在线视频| 美国一区二区三区在线播放| 久久精品夜色噜噜亚洲a∨| 91.com在线观看| 欧美美女喷水视频| 欧美美女直播网站| 日韩一区二区三区免费看| 欧美美女一区二区三区| 日韩一区二区三区在线| 日韩一二在线观看| 日韩精品中文字幕在线一区| 精品久久久影院| 久久青草欧美一区二区三区| 久久精品视频在线看| 国产欧美日韩在线观看| 国产精品卡一卡二| 亚洲黄一区二区三区| 亚洲国产aⅴ天堂久久| 秋霞电影一区二区| 精品一区二区久久| 懂色中文一区二区在线播放| 一本久久综合亚洲鲁鲁五月天 | 欧洲国产伦久久久久久久| 欧美性受xxxx黑人xyx性爽| 欧美另类变人与禽xxxxx| 精品精品国产高清a毛片牛牛| 久久精品亚洲麻豆av一区二区| 欧美国产精品专区| 亚洲综合视频网| 麻豆国产精品777777在线| 国产精品456| 欧洲亚洲国产日韩| 日韩精品专区在线影院观看| 国产精品色噜噜| 午夜精品久久久久久久久久久 | 欧美影院一区二区三区| 91精品在线观看入口| 久久蜜臀精品av| 亚洲精品一二三| 日本美女一区二区三区视频| 成人av午夜影院| 欧美另类一区二区三区| 欧美激情一区二区三区| 成人av第一页| 欧美男女性生活在线直播观看| 精品国产区一区| 伊人性伊人情综合网| 黑人巨大精品欧美黑白配亚洲| 99久久免费视频.com| 日韩欧美你懂的| 亚洲日本中文字幕区| 久久精品国产一区二区三| 99精品欧美一区二区蜜桃免费 | 国产精品美女久久久久aⅴ国产馆| 亚洲一卡二卡三卡四卡无卡久久| 精品在线观看视频| 色激情天天射综合网| 久久噜噜亚洲综合| 香蕉成人啪国产精品视频综合网 | 欧美一区二区视频在线观看2020| 国产精品久久夜| 精品在线一区二区三区| 精品视频一区二区三区免费| 欧美激情综合五月色丁香小说| 亚洲国产一区视频| 不卡欧美aaaaa| 26uuu亚洲综合色| 日韩精品每日更新| 色噜噜狠狠成人中文综合| 国产欧美日韩一区二区三区在线观看| 亚洲成a人在线观看| 9久草视频在线视频精品| 精品国产三级电影在线观看| 视频一区二区三区入口| 91美女蜜桃在线| 国产精品麻豆网站| 国产成人亚洲精品狼色在线| 日韩美女一区二区三区四区| 亚洲成av人**亚洲成av**| 91论坛在线播放| 国产精品国产三级国产有无不卡| 韩日精品视频一区| 欧美成人一区二区三区在线观看| 亚洲成人黄色影院| 欧美专区亚洲专区| 亚洲精品一二三| 色悠久久久久综合欧美99| 国产精品国产三级国产aⅴ无密码| 国产精品一区二区免费不卡| 久久综合九色综合欧美就去吻| 日本成人在线电影网| 欧美男人的天堂一二区| 午夜欧美在线一二页| 欧美色图激情小说| 一区二区久久久久久| 色香蕉久久蜜桃| 亚洲精品久久久久久国产精华液| 99久久精品国产网站| 亚洲视频中文字幕| 色偷偷88欧美精品久久久| 亚洲视频1区2区| 色88888久久久久久影院按摩| 亚洲男人的天堂一区二区| 色欧美乱欧美15图片| 亚洲综合在线五月| 欧美三日本三级三级在线播放| 亚洲国产美女搞黄色| 欧美丰满一区二区免费视频| 日韩av一二三| 精品成人私密视频| 国产一区欧美日韩| 国产人成一区二区三区影院| 不卡视频一二三| 亚洲美女偷拍久久| 亚洲国产欧美一区二区三区丁香婷| 在线观看亚洲a| 亚洲成人av在线电影| 欧美一级理论性理论a| 美国十次了思思久久精品导航| 精品国产免费人成在线观看| 国产乱码精品一区二区三区忘忧草| 欧美国产日韩精品免费观看| 99视频精品全部免费在线| 亚洲已满18点击进入久久| 在线91免费看| 国产成人免费视频精品含羞草妖精| 国产精品三级在线观看| 欧美三级乱人伦电影| 麻豆精品新av中文字幕| 中文字幕免费不卡| 色久综合一二码| 久久精品国产亚洲a| 久久久精品综合| 一本久久精品一区二区| 日韩av一级电影| 国产精品情趣视频| 欧美日韩高清影院| 国产高清成人在线| 亚洲激情av在线| 精品国产伦理网| 99国产一区二区三精品乱码| 青青草国产成人av片免费| 欧美国产精品一区二区| 欧美私模裸体表演在线观看| 久久激情五月婷婷| 亚洲欧洲www| 欧美成人一区二区三区片免费| 成人h版在线观看| 青青草成人在线观看| 亚洲欧美怡红院| 日韩三级中文字幕| 91美女精品福利| 国产资源在线一区| 亚洲一二三区不卡| 国产欧美一区二区三区鸳鸯浴| 欧美日韩一二三| 成人精品gif动图一区| 同产精品九九九| 国产精品剧情在线亚洲| 欧美变态tickle挠乳网站| 色婷婷国产精品综合在线观看| 国产麻豆精品一区二区| 亚洲国产精品久久久男人的天堂| 中文字幕乱码久久午夜不卡| 91精品视频网| 欧美在线色视频| 不卡的av在线播放| 韩国成人福利片在线播放| 亚洲国产精品久久久久婷婷884| 国产精品美女久久久久久2018| 日韩亚洲电影在线| 精品视频在线免费看| 99久久国产综合精品色伊| 激情综合一区二区三区| 日韩专区在线视频| 一区二区三区免费| 中文字幕一区在线观看| 国产亚洲成年网址在线观看| 日韩午夜在线观看视频| 欧美日韩在线播放三区四区| 91视频你懂的| 成人网在线免费视频| 国产一区二区中文字幕| 日本aⅴ亚洲精品中文乱码| 亚洲在线中文字幕| 亚洲欧美中日韩| 国产精品色哟哟网站| 国产欧美精品一区aⅴ影院| 日韩午夜电影av| 欧美一区二区三区小说| 欧美精品xxxxbbbb| 在线免费亚洲电影| 一本到不卡免费一区二区| 国产亚洲女人久久久久毛片| 日韩视频在线观看一区二区| 欧美裸体一区二区三区| 在线播放一区二区三区| 欧美日韩久久不卡| 欧美日本视频在线| 欧美日韩三级视频|