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

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

?? tls_gnutls.c

?? IEEE 802.11a/b/g 服務器端AP
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * WPA Supplicant / SSL/TLS interface functions for openssl * Copyright (c) 2004-2007, 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 <gnutls/gnutls.h>#include <gnutls/x509.h>#ifdef PKCS12_FUNCS#include <gnutls/pkcs12.h>#endif /* PKCS12_FUNCS */#ifdef CONFIG_GNUTLS_EXTRA#if LIBGNUTLS_VERSION_NUMBER >= 0x010302#define GNUTLS_IA#include <gnutls/extra.h>#if LIBGNUTLS_VERSION_NUMBER == 0x010302/* This function is not included in the current gnutls/extra.h even though it * should be, so define it here as a workaround for the time being. */int gnutls_ia_verify_endphase(gnutls_session_t session, char *checksum);#endif /* LIBGNUTLS_VERSION_NUMBER == 0x010302 */#endif /* LIBGNUTLS_VERSION_NUMBER >= 0x010302 */#endif /* CONFIG_GNUTLS_EXTRA */#include "common.h"#include "tls.h"#define TLS_RANDOM_SIZE 32#define TLS_MASTER_SIZE 48#if LIBGNUTLS_VERSION_NUMBER < 0x010302/* GnuTLS 1.3.2 added functions for using master secret. Older versions require * use of internal structures to get the master_secret and * {server,client}_random. */#define GNUTLS_INTERNAL_STRUCTURE_HACK#endif /* LIBGNUTLS_VERSION_NUMBER < 0x010302 */#ifdef GNUTLS_INTERNAL_STRUCTURE_HACK/* * It looks like gnutls does not provide access to client/server_random and * master_key. This is somewhat unfortunate since these are needed for key * derivation in EAP-{TLS,TTLS,PEAP,FAST}. Workaround for now is a horrible * hack that copies the gnutls_session_int definition from gnutls_int.h so that * we can get the needed information. */typedef u8 uint8;typedef unsigned char opaque;typedef struct {    uint8 suite[2];} cipher_suite_st;typedef struct {	gnutls_connection_end_t entity;	gnutls_kx_algorithm_t kx_algorithm;	gnutls_cipher_algorithm_t read_bulk_cipher_algorithm;	gnutls_mac_algorithm_t read_mac_algorithm;	gnutls_compression_method_t read_compression_algorithm;	gnutls_cipher_algorithm_t write_bulk_cipher_algorithm;	gnutls_mac_algorithm_t write_mac_algorithm;	gnutls_compression_method_t write_compression_algorithm;	cipher_suite_st current_cipher_suite;	opaque master_secret[TLS_MASTER_SIZE];	opaque client_random[TLS_RANDOM_SIZE];	opaque server_random[TLS_RANDOM_SIZE];	/* followed by stuff we are not interested in */} security_parameters_st;struct gnutls_session_int {	security_parameters_st security_parameters;	/* followed by things we are not interested in */};#endif /* LIBGNUTLS_VERSION_NUMBER < 0x010302 */static int tls_gnutls_ref_count = 0;struct tls_global {	/* Data for session resumption */	void *session_data;	size_t session_data_size;	int server;	int params_set;	gnutls_certificate_credentials_t xcred;};struct tls_connection {	gnutls_session session;	char *subject_match, *altsubject_match;	int read_alerts, write_alerts, failed;	u8 *pre_shared_secret;	size_t pre_shared_secret_len;	int established;	int verify_peer;	u8 *push_buf, *pull_buf, *pull_buf_offset;	size_t push_buf_len, pull_buf_len;	int params_set;	gnutls_certificate_credentials_t xcred;	int tls_ia;	int final_phase_finished;#ifdef GNUTLS_IA	gnutls_ia_server_credentials_t iacred_srv;	gnutls_ia_client_credentials_t iacred_cli;	/* Session keys generated in the current phase for inner secret	 * permutation before generating/verifying PhaseFinished. */	u8 *session_keys;	size_t session_keys_len;	u8 inner_secret[TLS_MASTER_SIZE];#endif /* GNUTLS_IA */};static void tls_log_func(int level, const char *msg){	char *s, *pos;	if (level == 6 || level == 7) {		/* These levels seem to be mostly I/O debug and msg dumps */		return;	}	s = os_strdup(msg);	if (s == NULL)		return;	pos = s;	while (*pos != '\0') {		if (*pos == '\n') {			*pos = '\0';			break;		}		pos++;	}	wpa_printf(level > 3 ? MSG_MSGDUMP : MSG_DEBUG,		   "gnutls<%d> %s", level, s);	os_free(s);}extern int wpa_debug_show_keys;void * tls_init(const struct tls_config *conf){	struct tls_global *global;#ifdef GNUTLS_INTERNAL_STRUCTURE_HACK	/* Because of the horrible hack to get master_secret and client/server	 * random, we need to make sure that the gnutls version is something	 * that is expected to have same structure definition for the session	 * data.. */	const char *ver;	const char *ok_ver[] = { "1.2.3", "1.2.4", "1.2.5", "1.2.6", "1.2.9",				 "1.3.2",				 NULL };	int i;#endif /* GNUTLS_INTERNAL_STRUCTURE_HACK */	global = os_zalloc(sizeof(*global));	if (global == NULL)		return NULL;	if (tls_gnutls_ref_count == 0 && gnutls_global_init() < 0) {		os_free(global);		return NULL;	}	tls_gnutls_ref_count++;#ifdef GNUTLS_INTERNAL_STRUCTURE_HACK	ver = gnutls_check_version(NULL);	if (ver == NULL) {		tls_deinit(global);		return NULL;	}	wpa_printf(MSG_DEBUG, "%s - gnutls version %s", __func__, ver);	for (i = 0; ok_ver[i]; i++) {		if (strcmp(ok_ver[i], ver) == 0)			break;	}	if (ok_ver[i] == NULL) {		wpa_printf(MSG_INFO, "Untested gnutls version %s - this needs "			   "to be tested and enabled in tls_gnutls.c", ver);		tls_deinit(global);		return NULL;	}#endif /* GNUTLS_INTERNAL_STRUCTURE_HACK */	gnutls_global_set_log_function(tls_log_func);	if (wpa_debug_show_keys)		gnutls_global_set_log_level(11);	return global;}void tls_deinit(void *ssl_ctx){	struct tls_global *global = ssl_ctx;	if (global) {		if (global->params_set)			gnutls_certificate_free_credentials(global->xcred);		os_free(global->session_data);		os_free(global);	}	tls_gnutls_ref_count--;	if (tls_gnutls_ref_count == 0)		gnutls_global_deinit();}int tls_get_errors(void *ssl_ctx){	return 0;}static ssize_t tls_pull_func(gnutls_transport_ptr ptr, void *buf,			     size_t len){	struct tls_connection *conn = (struct tls_connection *) ptr;	u8 *end;	if (conn->pull_buf == NULL) {		errno = EWOULDBLOCK;		return -1;	}	end = conn->pull_buf + conn->pull_buf_len;	if ((size_t) (end - conn->pull_buf_offset) < len)		len = end - conn->pull_buf_offset;	os_memcpy(buf, conn->pull_buf_offset, len);	conn->pull_buf_offset += len;	if (conn->pull_buf_offset == end) {		wpa_printf(MSG_DEBUG, "%s - pull_buf consumed", __func__);		os_free(conn->pull_buf);		conn->pull_buf = conn->pull_buf_offset = NULL;		conn->pull_buf_len = 0;	} else {		wpa_printf(MSG_DEBUG, "%s - %d bytes remaining in pull_buf",			   __func__, end - conn->pull_buf_offset);	}	return len;}static ssize_t tls_push_func(gnutls_transport_ptr ptr, const void *buf,			     size_t len){	struct tls_connection *conn = (struct tls_connection *) ptr;	u8 *nbuf;	nbuf = os_realloc(conn->push_buf, conn->push_buf_len + len);	if (nbuf == NULL) {		errno = ENOMEM;		return -1;	}	os_memcpy(nbuf + conn->push_buf_len, buf, len);	conn->push_buf = nbuf;	conn->push_buf_len += len;	return len;}static int tls_gnutls_init_session(struct tls_global *global,				   struct tls_connection *conn){	const int cert_types[2] = { GNUTLS_CRT_X509, 0 };	const int protos[2] = { GNUTLS_TLS1, 0 };	int ret;	ret = gnutls_init(&conn->session,			  global->server ? GNUTLS_SERVER : GNUTLS_CLIENT);	if (ret < 0) {		wpa_printf(MSG_INFO, "TLS: Failed to initialize new TLS "			   "connection: %s", gnutls_strerror(ret));		return -1;	}	ret = gnutls_set_default_priority(conn->session);	if (ret < 0)		goto fail;	ret = gnutls_certificate_type_set_priority(conn->session, cert_types);	if (ret < 0)		goto fail;	ret = gnutls_protocol_set_priority(conn->session, protos);	if (ret < 0)		goto fail;	gnutls_transport_set_pull_function(conn->session, tls_pull_func);	gnutls_transport_set_push_function(conn->session, tls_push_func);	gnutls_transport_set_ptr(conn->session, (gnutls_transport_ptr) conn);	return 0;fail:	wpa_printf(MSG_INFO, "TLS: Failed to setup new TLS connection: %s",		   gnutls_strerror(ret));	gnutls_deinit(conn->session);	return -1;}struct tls_connection * tls_connection_init(void *ssl_ctx){	struct tls_global *global = ssl_ctx;	struct tls_connection *conn;	int ret;	conn = os_zalloc(sizeof(*conn));	if (conn == NULL)		return NULL;	if (tls_gnutls_init_session(global, conn)) {		os_free(conn);		return NULL;	}	if (global->params_set) {		ret = gnutls_credentials_set(conn->session,					     GNUTLS_CRD_CERTIFICATE,					     global->xcred);		if (ret < 0) {			wpa_printf(MSG_INFO, "Failed to configure "				   "credentials: %s", gnutls_strerror(ret));			os_free(conn);			return NULL;		}	}	if (gnutls_certificate_allocate_credentials(&conn->xcred)) {		os_free(conn);		return NULL;	}	return conn;}void tls_connection_deinit(void *ssl_ctx, struct tls_connection *conn){	if (conn == NULL)		return;#ifdef GNUTLS_IA	if (conn->iacred_srv)		gnutls_ia_free_server_credentials(conn->iacred_srv);	if (conn->iacred_cli)		gnutls_ia_free_client_credentials(conn->iacred_cli);	if (conn->session_keys) {		os_memset(conn->session_keys, 0, conn->session_keys_len);		os_free(conn->session_keys);	}#endif /* GNUTLS_IA */	gnutls_certificate_free_credentials(conn->xcred);	gnutls_deinit(conn->session);	os_free(conn->pre_shared_secret);	os_free(conn->subject_match);	os_free(conn->altsubject_match);	os_free(conn->push_buf);	os_free(conn->pull_buf);	os_free(conn);}int tls_connection_established(void *ssl_ctx, struct tls_connection *conn){	return conn ? conn->established : 0;}int tls_connection_shutdown(void *ssl_ctx, struct tls_connection *conn){	struct tls_global *global = ssl_ctx;	int ret;	if (conn == NULL)		return -1;	/* Shutdown previous TLS connection without notifying the peer	 * because the connection was already terminated in practice	 * and "close notify" shutdown alert would confuse AS. */	gnutls_bye(conn->session, GNUTLS_SHUT_RDWR);	os_free(conn->push_buf);	conn->push_buf = NULL;	conn->push_buf_len = 0;	conn->established = 0;	conn->final_phase_finished = 0;#ifdef GNUTLS_IA	if (conn->session_keys) {		os_memset(conn->session_keys, 0, conn->session_keys_len);		os_free(conn->session_keys);	}	conn->session_keys_len = 0;#endif /* GNUTLS_IA */	gnutls_deinit(conn->session);	if (tls_gnutls_init_session(global, conn)) {		wpa_printf(MSG_INFO, "GnuTLS: Failed to preparare new session "			   "for session resumption use");		return -1;	}	ret = gnutls_credentials_set(conn->session, GNUTLS_CRD_CERTIFICATE,				     conn->params_set ? conn->xcred :				     global->xcred);	if (ret < 0) {		wpa_printf(MSG_INFO, "GnuTLS: Failed to configure credentials "			   "for session resumption: %s", gnutls_strerror(ret));		return -1;	}	if (global->session_data) {		ret = gnutls_session_set_data(conn->session,					      global->session_data,					      global->session_data_size);		if (ret < 0) {			wpa_printf(MSG_INFO, "GnuTLS: Failed to set session "				   "data: %s", gnutls_strerror(ret));			return -1;		}	}	return 0;}#if 0static int tls_match_altsubject(X509 *cert, const char *match){	GENERAL_NAME *gen;	char *field, *tmp;	void *ext;	int i, found = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产麻豆精品在线| 综合色中文字幕| 在线精品视频免费观看| 久久久久久久网| 91国产视频在线观看| 成人av电影在线网| 懂色av一区二区三区免费观看| 日本 国产 欧美色综合| 一区二区三区四区av| 一区二区三区成人| 五月天视频一区| 天堂蜜桃一区二区三区 | 久久―日本道色综合久久| 久草精品在线观看| 国产麻豆9l精品三级站| 国内一区二区视频| 成人晚上爱看视频| 欧美激情综合五月色丁香| 丁香婷婷综合五月| 日韩欧美高清一区| 国产精品午夜久久| 久久精品国产在热久久| 欧美久久一二三四区| 亚洲成人av福利| 欧美性受极品xxxx喷水| 日韩理论在线观看| 一本大道av伊人久久综合| 亚洲另类在线一区| 欧美午夜理伦三级在线观看| 亚洲乱码日产精品bd| 亚洲色欲色欲www在线观看| 国产精品理论片在线观看| 蜜臀av一级做a爰片久久| 色综合久久88色综合天天免费| 在线观看一区不卡| 亚洲欧美怡红院| 在线精品视频一区二区三四| 亚洲少妇30p| 韩国欧美国产一区| 欧美一区二区美女| 三级久久三级久久久| 欧美另类高清zo欧美| 亚洲午夜精品17c| 欧美精品tushy高清| 婷婷中文字幕综合| 久久综合av免费| 99久久久精品| 日韩av不卡一区二区| 欧美一级搡bbbb搡bbbb| 国产乱码一区二区三区| 亚洲日本va午夜在线影院| 欧美三片在线视频观看| 久久99精品久久久久久动态图 | 9191成人精品久久| 久久草av在线| 亚洲裸体xxx| 在线观看国产一区二区| 国产成人av电影在线观看| 综合久久给合久久狠狠狠97色| 91麻豆自制传媒国产之光| 日本视频中文字幕一区二区三区| 亚洲精品在线免费播放| 欧美理论电影在线| 波多野洁衣一区| 极品少妇一区二区三区精品视频| 久久午夜老司机| 欧美性欧美巨大黑白大战| 国产精品亚洲综合一区在线观看| 亚洲成人一区在线| 日韩精品91亚洲二区在线观看| 日韩精品一区二区三区中文精品| 91黄色免费版| 亚洲444eee在线观看| 久久精品国产999大香线蕉| 国产成人无遮挡在线视频| 91麻豆精品秘密| 日韩女优视频免费观看| 精品国产乱子伦一区| 亚洲二区在线观看| 色一情一伦一子一伦一区| 欧美一区三区二区| 午夜视频在线观看一区二区 | 国产一区二区三区四区五区美女 | 色综合中文综合网| www.亚洲色图| 中文在线一区二区| 中文字幕一区二区三区在线观看 | 日韩一区二区三区精品视频| 91精品国产日韩91久久久久久| 国产丝袜美腿一区二区三区| 久久av老司机精品网站导航| 99久久久无码国产精品| 日韩免费观看高清完整版| 亚洲一区二区三区四区五区黄| 成人av动漫网站| 国产精品国产三级国产三级人妇| 国产美女娇喘av呻吟久久| 欧美日韩不卡在线| 久久综合给合久久狠狠狠97色69| 天天操天天色综合| 91蜜桃在线免费视频| 老司机免费视频一区二区三区| 91在线观看美女| 日韩一区二区在线看| 亚洲国产欧美在线人成| 91久久精品网| 国产视频不卡一区| 欧美色爱综合网| 在线电影国产精品| 久久九九久久九九| 欧美美女一区二区在线观看| 成人午夜视频在线观看| 日韩在线一区二区三区| 欧美国产精品一区| 欧美www视频| 日韩亚洲欧美成人一区| 日韩欧美高清一区| 精品国产伦一区二区三区观看体验| 欧美丰满高潮xxxx喷水动漫| 91在线播放网址| 久久精品国产77777蜜臀| 久久精品国产亚洲aⅴ| 三级不卡在线观看| 日韩精彩视频在线观看| 日韩影视精彩在线| 黑人巨大精品欧美一区| 国产一区二区成人久久免费影院 | 风间由美一区二区三区在线观看 | 欧洲av一区二区嗯嗯嗯啊| 欧美天天综合网| 日韩欧美在线123| 国产午夜一区二区三区| 日本成人超碰在线观看| 91麻豆123| 亚洲激情在线激情| 亚洲视频一区二区在线| 国产精品欧美经典| 污片在线观看一区二区| 99精品视频中文字幕| 欧美成人猛片aaaaaaa| 亚洲人妖av一区二区| 一区二区三区精品久久久| 美女mm1313爽爽久久久蜜臀| 国产精品自在在线| 久久久久久亚洲综合| 九九视频精品免费| 6080亚洲精品一区二区| 日韩电影一区二区三区四区| 欧美最猛性xxxxx直播| 伊人开心综合网| 色婷婷精品久久二区二区蜜臀av| 欧美亚洲综合色| 丝袜a∨在线一区二区三区不卡| 日本不卡在线视频| 奇米综合一区二区三区精品视频| 国产不卡在线播放| 欧美亚洲愉拍一区二区| 国产欧美日韩视频在线观看| 婷婷久久综合九色国产成人| 国产aⅴ精品一区二区三区色成熟| 成人久久久精品乱码一区二区三区 | 亚洲欧洲日韩一区二区三区| 精品一区二区三区在线视频| 欧美视频一区二区三区在线观看| 国产偷国产偷精品高清尤物| 麻豆精品国产91久久久久久| 成人精品国产一区二区4080| 久久日一线二线三线suv| 国产一区在线精品| 精品美女一区二区三区| 久久精品国产亚洲5555| 欧美三级视频在线观看| 天天亚洲美女在线视频| 色婷婷av久久久久久久| 一区二区欧美国产| 欧美日韩视频在线观看一区二区三区 | 亚洲午夜视频在线| 欧美丰满美乳xxx高潮www| 亚洲成人av一区二区三区| 日韩欧美激情一区| 亚洲激情综合网| 91精品国产91久久久久久一区二区| 亚洲欧美另类小说| 精品视频全国免费看| 国产一区欧美二区| 亚洲色图在线视频| 91精品国产欧美一区二区成人| 久久99精品一区二区三区| 国产欧美视频一区二区三区| 在线国产电影不卡| 麻豆一区二区99久久久久| 国产精品福利一区| 91社区在线播放| 国产在线国偷精品产拍免费yy| 欧美不卡一区二区三区| 欧美系列一区二区| www.欧美日韩| 国产91精品一区二区| 日韩高清国产一区在线| 337p亚洲精品色噜噜噜|