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

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

?? tls_gnutls.c

?? WPA在Linux下實現的原代碼 WPA在Linux下實現的原代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * WPA Supplicant / SSL/TLS interface functions for openssl * Copyright (c) 2004-2006, 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 <stdlib.h>#include <stdio.h>#include <string.h>#include <errno.h>#include <gnutls/gnutls.h>#include <gnutls/x509.h>#include "common.h"#include "tls.h"/* * 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;#define TLS_RANDOM_SIZE 32#define TLS_MASTER_SIZE 48typedef 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 */};static int tls_gnutls_ref_count = 0;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;	gnutls_certificate_credentials_t xcred;};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 = 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);	free(s);}extern int wpa_debug_show_keys;void * tls_init(const struct tls_config *conf){	/* 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", NULL };	int i;	if (tls_gnutls_ref_count == 0 && gnutls_global_init() < 0)		return NULL;	tls_gnutls_ref_count++;	ver = gnutls_check_version(NULL);	if (ver == NULL)		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);		return NULL;	}	gnutls_global_set_log_function(tls_log_func);	if (wpa_debug_show_keys)		gnutls_global_set_log_level(11);	return (void *) 1;}void tls_deinit(void *ssl_ctx){	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;	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__);		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 = realloc(conn->push_buf, conn->push_buf_len + len);	if (nbuf == NULL) {		errno = ENOMEM;		return -1;	}	memcpy(nbuf + conn->push_buf_len, buf, len);	conn->push_buf = nbuf;	conn->push_buf_len += len;	return len;}struct tls_connection * tls_connection_init(void *ssl_ctx){	struct tls_connection *conn;	const int cert_types[2] = { GNUTLS_CRT_X509, 0 };	const int protos[2] = { GNUTLS_TLS1, 0 };	conn = malloc(sizeof(*conn));	if (conn == NULL)		return NULL;	memset(conn, 0, sizeof(*conn));	if (gnutls_init(&conn->session, GNUTLS_CLIENT) < 0) {		wpa_printf(MSG_INFO, "TLS: Failed to initialize new TLS "			   "connection");		free(conn);		return NULL;	}	gnutls_set_default_priority(conn->session);	gnutls_certificate_type_set_priority(conn->session, cert_types);	gnutls_protocol_set_priority(conn->session, protos);	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);	gnutls_certificate_allocate_credentials(&conn->xcred);	return conn;}void tls_connection_deinit(void *ssl_ctx, struct tls_connection *conn){	if (conn == NULL)		return;	gnutls_certificate_free_credentials(conn->xcred);	gnutls_deinit(conn->session);	free(conn->pre_shared_secret);	free(conn->subject_match);	free(conn->altsubject_match);	free(conn->push_buf);	free(conn->pull_buf);	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){	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);	free(conn->push_buf);	conn->push_buf = NULL;	conn->push_buf_len = 0;	conn->established = 0;	/* TODO: what to do trigger new handshake for re-auth? */	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;	size_t len;	ext = X509_get_ext_d2i(cert, NID_subject_alt_name, NULL, NULL);	for (i = 0; ext && i < sk_GENERAL_NAME_num(ext); i++) {		gen = sk_GENERAL_NAME_value(ext, i);		switch (gen->type) {		case GEN_EMAIL:			field = "EMAIL";			break;		case GEN_DNS:			field = "DNS";			break;		case GEN_URI:			field = "URI";			break;		default:			field = NULL;			wpa_printf(MSG_DEBUG, "TLS: altSubjectName: "				   "unsupported type=%d", gen->type);			break;		}		if (!field)			continue;		wpa_printf(MSG_DEBUG, "TLS: altSubjectName: %s:%s",			   field, gen->d.ia5->data);		len = strlen(field) + 1 + strlen((char *) gen->d.ia5->data) +			1;		tmp = malloc(len);		if (tmp == NULL)			continue;		snprintf(tmp, len, "%s:%s", field, gen->d.ia5->data);		if (strstr(tmp, match))			found++;		free(tmp);	}	return found;}#endif#if 0static int tls_verify_cb(int preverify_ok, X509_STORE_CTX *x509_ctx){	char buf[256];	X509 *err_cert;	int err, depth;	SSL *ssl;	struct tls_connection *conn;	char *match, *altmatch;	err_cert = X509_STORE_CTX_get_current_cert(x509_ctx);	err = X509_STORE_CTX_get_error(x509_ctx);	depth = X509_STORE_CTX_get_error_depth(x509_ctx);	ssl = X509_STORE_CTX_get_ex_data(x509_ctx,					 SSL_get_ex_data_X509_STORE_CTX_idx());	X509_NAME_oneline(X509_get_subject_name(err_cert), buf, sizeof(buf));	conn = SSL_get_app_data(ssl);	match = conn ? conn->subject_match : NULL;	altmatch = conn ? conn->altsubject_match : NULL;	if (!preverify_ok) {		wpa_printf(MSG_WARNING, "TLS: Certificate verification failed,"			   " error %d (%s) depth %d for '%s'", err,			   X509_verify_cert_error_string(err), depth, buf);	} else {		wpa_printf(MSG_DEBUG, "TLS: tls_verify_cb - "			   "preverify_ok=%d err=%d (%s) depth=%d buf='%s'",			   preverify_ok, err,			   X509_verify_cert_error_string(err), depth, buf);		if (depth == 0 && match && strstr(buf, match) == NULL) {			wpa_printf(MSG_WARNING, "TLS: Subject '%s' did not "				   "match with '%s'", buf, match);			preverify_ok = 0;		} else if (depth == 0 && altmatch &&			   !tls_match_altsubject(err_cert, altmatch)) {			wpa_printf(MSG_WARNING, "TLS: altSubjectName match "				   "'%s' not found", altmatch);			preverify_ok = 0;		}	}	return preverify_ok;}#endifint tls_connection_set_params(void *tls_ctx, struct tls_connection *conn,			      const struct tls_connection_params *params){	int ret;	if (conn == NULL || params == NULL)		return -1;	free(conn->subject_match);	conn->subject_match = NULL;	if (params->subject_match) {		conn->subject_match = strdup(params->subject_match);		if (conn->subject_match == NULL)			return -1;	}	free(conn->altsubject_match);	conn->altsubject_match = NULL;	if (params->altsubject_match) {		conn->altsubject_match = strdup(params->altsubject_match);		if (conn->altsubject_match == NULL)			return -1;	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产精品自在自线| 亚洲国产裸拍裸体视频在线观看乱了| 欧美日韩亚洲综合在线| 成人小视频免费观看| 精一区二区三区| 国内成人精品2018免费看| 精品在线一区二区| 国产成人精品aa毛片| 懂色av中文一区二区三区| 成人性生交大片| 色综合久久中文字幕综合网| 91麻豆免费看片| 欧美三级蜜桃2在线观看| 6080国产精品一区二区| 欧美成人在线直播| 国产精品乱人伦一区二区| 亚洲视频在线一区| 婷婷六月综合网| 国产在线精品不卡| 国产精品77777| 91视视频在线直接观看在线看网页在线看| 91浏览器入口在线观看| 欧美日韩一区二区三区高清| 精品三级在线观看| 中文字幕av一区 二区| 一区二区三区在线影院| 日韩专区一卡二卡| 国产电影一区二区三区| 91在线码无精品| 日韩一区二区精品| 中文字幕亚洲一区二区va在线| 一区二区三区在线影院| 美女视频黄 久久| 91同城在线观看| 国产网红主播福利一区二区| 最新高清无码专区| 蜜桃精品在线观看| 日本精品视频一区二区| 2020国产精品| 午夜久久久影院| 成人精品高清在线| 欧美一区日韩一区| 亚洲欧美日韩国产成人精品影院 | 国产精品99久久久| 欧美无人高清视频在线观看| 久久久久久亚洲综合| 亚洲一区二区三区四区在线| 国产精品 日产精品 欧美精品| 欧美日韩久久一区| 亚洲三级久久久| 成人一级视频在线观看| 日韩女优av电影在线观看| 亚洲一区二区三区视频在线播放 | 91在线视频在线| 久久女同精品一区二区| 日韩高清不卡一区二区三区| 色综合中文字幕国产| 日韩精品一区二区三区视频| 亚洲影视资源网| 色哟哟日韩精品| 亚洲色欲色欲www| av在线播放成人| 国产女人18水真多18精品一级做| 免费视频最近日韩| 在线综合视频播放| 久久精品国产亚洲高清剧情介绍| 色噜噜偷拍精品综合在线| 国产精品国产三级国产aⅴ入口| 黄一区二区三区| 精品粉嫩aⅴ一区二区三区四区| 日本最新不卡在线| 日韩限制级电影在线观看| 日韩精品亚洲一区| 日韩三级视频中文字幕| 男人的天堂亚洲一区| 日韩一区二区三区视频在线观看 | 日韩欧美亚洲国产另类| 日韩高清在线观看| 日韩欧美二区三区| 久久se这里有精品| 国产亚洲va综合人人澡精品| 国产在线精品一区二区夜色 | 国内外精品视频| 久久女同精品一区二区| 国产精品一区二区在线观看不卡 | 色狠狠一区二区三区香蕉| 亚洲欧美另类久久久精品| 日本久久电影网| 日日摸夜夜添夜夜添精品视频 | 制服丝袜日韩国产| 国产福利精品导航| 国产精品视频你懂的| 99re热视频这里只精品| 亚洲一区二区3| 日韩精品中文字幕一区| 国产伦精一区二区三区| 中文字幕一区二区三区精华液 | 久久黄色级2电影| 久久久综合网站| 色综合激情久久| 麻豆中文一区二区| 国产精品色呦呦| 在线观看91精品国产麻豆| 国产一区二区三区综合| 夜夜夜精品看看| 欧美精品一区二区三区一线天视频 | 亚洲国产精品一区二区久久 | 偷拍一区二区三区| 国产亚洲一区二区三区四区| 色噜噜狠狠色综合中国| 国产一区二区三区在线观看免费| 亚洲卡通欧美制服中文| 日韩午夜av电影| 色激情天天射综合网| 国产精品亚洲人在线观看| 亚洲成av人片一区二区| 中文字幕免费不卡| 日韩午夜在线播放| 欧美伊人久久大香线蕉综合69| 国产激情一区二区三区| 日韩av在线播放中文字幕| 亚洲三级电影网站| 精品电影一区二区三区| 欧美日韩精品一区二区三区四区| 国产精品自拍在线| 亚洲综合在线免费观看| 国产欧美一区二区精品婷婷| 欧美一区二区三区视频免费| 色乱码一区二区三区88| 成人免费视频视频| 国产精品91一区二区| 蜜桃视频一区二区| 亚洲国产日韩a在线播放性色| 国产蜜臀97一区二区三区| 日韩精品最新网址| 欧美一级久久久久久久大片| 欧美日韩视频专区在线播放| 91一区二区三区在线播放| 国产成人鲁色资源国产91色综| 久久精品二区亚洲w码| 亚洲成av人片在www色猫咪| 夜夜揉揉日日人人青青一国产精品| 久久精品在线观看| 欧美极品少妇xxxxⅹ高跟鞋| 久久一区二区三区国产精品| 精品久久久久av影院| 欧美电视剧在线观看完整版| 日韩一区和二区| 精品少妇一区二区三区免费观看| 欧美一区二区私人影院日本| 在线观看91av| 欧美xxxx老人做受| 亚洲精品一线二线三线无人区| 日韩丝袜情趣美女图片| 欧美一区二区视频在线观看| 欧美一级片免费看| 久久久久久综合| 中文字幕一区日韩精品欧美| 中文字幕av一区二区三区高| 国产精品短视频| 亚洲精品成人精品456| 美女久久久精品| 久久疯狂做爰流白浆xx| 国产一区二区三区四区五区美女 | 亚洲男人的天堂av| 亚洲一区二区三区四区在线观看| 视频一区在线视频| 免费在线观看不卡| 粉嫩嫩av羞羞动漫久久久 | 久久九九全国免费| 亚洲欧美在线观看| 亚洲国产精品一区二区www在线| 视频一区二区不卡| 国产一区三区三区| 色嗨嗨av一区二区三区| 日韩午夜在线观看| 国产精品日日摸夜夜摸av| 亚洲人成网站精品片在线观看| 午夜不卡在线视频| 国产在线麻豆精品观看| 色综合久久综合网欧美综合网| 555www色欧美视频| 国产偷国产偷亚洲高清人白洁| 一区二区三区自拍| 久久99精品久久久久久动态图 | 亚洲国产成人高清精品| 亚洲影院理伦片| 国产盗摄精品一区二区三区在线 | 中文字幕精品—区二区四季| 日韩精品视频网| 国产成人在线视频播放| 欧美日韩国产高清一区二区 | 欧美一区欧美二区| 亚洲视频每日更新| 精品一区二区三区久久| 在线免费观看一区| 国产精品五月天| 美女一区二区三区| 欧美三级在线视频| 亚洲天堂av一区|