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

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

?? tls_openssl.c

?? IEEE 802.11a/b/g 服務器端AP
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* * 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"#ifndef CONFIG_SMARTCARD#ifndef OPENSSL_NO_ENGINE#define OPENSSL_NO_ENGINE#endif#endif#include <openssl/ssl.h>#include <openssl/err.h>#include <openssl/pkcs12.h>#include <openssl/x509v3.h>#ifndef OPENSSL_NO_ENGINE#include <openssl/engine.h>#endif /* OPENSSL_NO_ENGINE */#include "common.h"#include "tls.h"#if OPENSSL_VERSION_NUMBER >= 0x0090800fL#define OPENSSL_d2i_TYPE const unsigned char **#else#define OPENSSL_d2i_TYPE unsigned char **#endifstatic int tls_openssl_ref_count = 0;struct tls_connection {	SSL *ssl;	BIO *ssl_in, *ssl_out;#ifndef OPENSSL_NO_ENGINE	ENGINE *engine;        /* functional reference to the engine */	EVP_PKEY *private_key; /* the private key if using engine */#endif /* OPENSSL_NO_ENGINE */	char *subject_match, *altsubject_match;	int read_alerts, write_alerts, failed;	tls_session_ticket_cb session_ticket_cb;	void *session_ticket_cb_ctx;	/* SessionTicket received from OpenSSL hello_extension_cb (server) */	u8 *session_ticket;	size_t session_ticket_len;};#ifdef CONFIG_NO_STDOUT_DEBUGstatic void _tls_show_errors(void){	unsigned long err;	while ((err = ERR_get_error())) {		/* Just ignore the errors, since stdout is disabled */	}}#define tls_show_errors(l, f, t) _tls_show_errors()#else /* CONFIG_NO_STDOUT_DEBUG */static void tls_show_errors(int level, const char *func, const char *txt){	unsigned long err;	wpa_printf(level, "OpenSSL: %s - %s %s",		   func, txt, ERR_error_string(ERR_get_error(), NULL));	while ((err = ERR_get_error())) {		wpa_printf(MSG_INFO, "OpenSSL: pending error: %s",			   ERR_error_string(err, NULL));	}}#endif /* CONFIG_NO_STDOUT_DEBUG */#ifdef CONFIG_NATIVE_WINDOWS/* Windows CryptoAPI and access to certificate stores */#include <wincrypt.h>#ifdef __MINGW32_VERSION/* * MinGW does not yet include all the needed definitions for CryptoAPI, so * define here whatever extra is needed. */#define CALG_SSL3_SHAMD5 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SSL3SHAMD5)#define CERT_SYSTEM_STORE_CURRENT_USER (1 << 16)#define CERT_STORE_READONLY_FLAG 0x00008000#define CERT_STORE_OPEN_EXISTING_FLAG 0x00004000#define CRYPT_ACQUIRE_COMPARE_KEY_FLAG 0x00000004static BOOL WINAPI(*CryptAcquireCertificatePrivateKey)(PCCERT_CONTEXT pCert, DWORD dwFlags,				     void *pvReserved, HCRYPTPROV *phCryptProv,				     DWORD *pdwKeySpec, BOOL *pfCallerFreeProv)= NULL; /* to be loaded from crypt32.dll */static PCCERT_CONTEXT WINAPI(*CertEnumCertificatesInStore)(HCERTSTORE hCertStore,			       PCCERT_CONTEXT pPrevCertContext)= NULL; /* to be loaded from crypt32.dll */static int mingw_load_crypto_func(void){	HINSTANCE dll;	/* MinGW does not yet have full CryptoAPI support, so load the needed	 * function here. */	if (CryptAcquireCertificatePrivateKey)		return 0;	dll = LoadLibrary("crypt32");	if (dll == NULL) {		wpa_printf(MSG_DEBUG, "CryptoAPI: Could not load crypt32 "			   "library");		return -1;	}	CryptAcquireCertificatePrivateKey = GetProcAddress(		dll, "CryptAcquireCertificatePrivateKey");	if (CryptAcquireCertificatePrivateKey == NULL) {		wpa_printf(MSG_DEBUG, "CryptoAPI: Could not get "			   "CryptAcquireCertificatePrivateKey() address from "			   "crypt32 library");		return -1;	}	CertEnumCertificatesInStore = (void *) GetProcAddress(		dll, "CertEnumCertificatesInStore");	if (CertEnumCertificatesInStore == NULL) {		wpa_printf(MSG_DEBUG, "CryptoAPI: Could not get "			   "CertEnumCertificatesInStore() address from "			   "crypt32 library");		return -1;	}	return 0;}#else /* __MINGW32_VERSION */static int mingw_load_crypto_func(void){	return 0;}#endif /* __MINGW32_VERSION */struct cryptoapi_rsa_data {	const CERT_CONTEXT *cert;	HCRYPTPROV crypt_prov;	DWORD key_spec;	BOOL free_crypt_prov;};static void cryptoapi_error(const char *msg){	wpa_printf(MSG_INFO, "CryptoAPI: %s; err=%u",		   msg, (unsigned int) GetLastError());}static int cryptoapi_rsa_pub_enc(int flen, const unsigned char *from,				 unsigned char *to, RSA *rsa, int padding){	wpa_printf(MSG_DEBUG, "%s - not implemented", __func__);	return 0;}static int cryptoapi_rsa_pub_dec(int flen, const unsigned char *from,				 unsigned char *to, RSA *rsa, int padding){	wpa_printf(MSG_DEBUG, "%s - not implemented", __func__);	return 0;}static int cryptoapi_rsa_priv_enc(int flen, const unsigned char *from,				  unsigned char *to, RSA *rsa, int padding){	struct cryptoapi_rsa_data *priv =		(struct cryptoapi_rsa_data *) rsa->meth->app_data;	HCRYPTHASH hash;	DWORD hash_size, len, i;	unsigned char *buf = NULL;	int ret = 0;	if (priv == NULL) {		RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT,		       ERR_R_PASSED_NULL_PARAMETER);		return 0;	}	if (padding != RSA_PKCS1_PADDING) {		RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT,		       RSA_R_UNKNOWN_PADDING_TYPE);		return 0;	}	if (flen != 16 /* MD5 */ + 20 /* SHA-1 */) {		wpa_printf(MSG_INFO, "%s - only MD5-SHA1 hash supported",			   __func__);		RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT,		       RSA_R_INVALID_MESSAGE_LENGTH);		return 0;	}	if (!CryptCreateHash(priv->crypt_prov, CALG_SSL3_SHAMD5, 0, 0, &hash))	{		cryptoapi_error("CryptCreateHash failed");		return 0;	}	len = sizeof(hash_size);	if (!CryptGetHashParam(hash, HP_HASHSIZE, (BYTE *) &hash_size, &len,			       0)) {		cryptoapi_error("CryptGetHashParam failed");		goto err;	}	if ((int) hash_size != flen) {		wpa_printf(MSG_INFO, "CryptoAPI: Invalid hash size (%u != %d)",			   (unsigned) hash_size, flen);		RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT,		       RSA_R_INVALID_MESSAGE_LENGTH);		goto err;	}	if (!CryptSetHashParam(hash, HP_HASHVAL, (BYTE * ) from, 0)) {		cryptoapi_error("CryptSetHashParam failed");		goto err;	}	len = RSA_size(rsa);	buf = os_malloc(len);	if (buf == NULL) {		RSAerr(RSA_F_RSA_EAY_PRIVATE_ENCRYPT, ERR_R_MALLOC_FAILURE);		goto err;	}	if (!CryptSignHash(hash, priv->key_spec, NULL, 0, buf, &len)) {		cryptoapi_error("CryptSignHash failed");		goto err;	}	for (i = 0; i < len; i++)		to[i] = buf[len - i - 1];	ret = len;err:	os_free(buf);	CryptDestroyHash(hash);	return ret;}static int cryptoapi_rsa_priv_dec(int flen, const unsigned char *from,				  unsigned char *to, RSA *rsa, int padding){	wpa_printf(MSG_DEBUG, "%s - not implemented", __func__);	return 0;}static void cryptoapi_free_data(struct cryptoapi_rsa_data *priv){	if (priv == NULL)		return;	if (priv->crypt_prov && priv->free_crypt_prov)		CryptReleaseContext(priv->crypt_prov, 0);	if (priv->cert)		CertFreeCertificateContext(priv->cert);	os_free(priv);}static int cryptoapi_finish(RSA *rsa){	cryptoapi_free_data((struct cryptoapi_rsa_data *) rsa->meth->app_data);	os_free((void *) rsa->meth);	rsa->meth = NULL;	return 1;}static const CERT_CONTEXT * cryptoapi_find_cert(const char *name, DWORD store){	HCERTSTORE cs;	const CERT_CONTEXT *ret = NULL;	cs = CertOpenStore((LPCSTR) CERT_STORE_PROV_SYSTEM, 0, 0,			   store | CERT_STORE_OPEN_EXISTING_FLAG |			   CERT_STORE_READONLY_FLAG, L"MY");	if (cs == NULL) {		cryptoapi_error("Failed to open 'My system store'");		return NULL;	}	if (strncmp(name, "cert://", 7) == 0) {		unsigned short wbuf[255];		MultiByteToWideChar(CP_ACP, 0, name + 7, -1, wbuf, 255);		ret = CertFindCertificateInStore(cs, X509_ASN_ENCODING |						 PKCS_7_ASN_ENCODING,						 0, CERT_FIND_SUBJECT_STR,						 wbuf, NULL);	} else if (strncmp(name, "hash://", 7) == 0) {		CRYPT_HASH_BLOB blob;		int len;		const char *hash = name + 7;		unsigned char *buf;		len = os_strlen(hash) / 2;		buf = os_malloc(len);		if (buf && hexstr2bin(hash, buf, len) == 0) {			blob.cbData = len;			blob.pbData = buf;			ret = CertFindCertificateInStore(cs,							 X509_ASN_ENCODING |							 PKCS_7_ASN_ENCODING,							 0, CERT_FIND_HASH,							 &blob, NULL);		}		os_free(buf);	}	CertCloseStore(cs, 0);	return ret;}static int tls_cryptoapi_cert(SSL *ssl, const char *name){	X509 *cert = NULL;	RSA *rsa = NULL, *pub_rsa;	struct cryptoapi_rsa_data *priv;	RSA_METHOD *rsa_meth;	if (name == NULL ||	    (strncmp(name, "cert://", 7) != 0 &&	     strncmp(name, "hash://", 7) != 0))		return -1;	priv = os_zalloc(sizeof(*priv));	rsa_meth = os_zalloc(sizeof(*rsa_meth));	if (priv == NULL || rsa_meth == NULL) {		wpa_printf(MSG_WARNING, "CryptoAPI: Failed to allocate memory "			   "for CryptoAPI RSA method");		os_free(priv);		os_free(rsa_meth);		return -1;	}	priv->cert = cryptoapi_find_cert(name, CERT_SYSTEM_STORE_CURRENT_USER);	if (priv->cert == NULL) {		priv->cert = cryptoapi_find_cert(			name, CERT_SYSTEM_STORE_LOCAL_MACHINE);	}	if (priv->cert == NULL) {		wpa_printf(MSG_INFO, "CryptoAPI: Could not find certificate "			   "'%s'", name);		goto err;	}	cert = d2i_X509(NULL, (OPENSSL_d2i_TYPE) &priv->cert->pbCertEncoded,			priv->cert->cbCertEncoded);	if (cert == NULL) {		wpa_printf(MSG_INFO, "CryptoAPI: Could not process X509 DER "			   "encoding");		goto err;	}	if (mingw_load_crypto_func())		goto err;	if (!CryptAcquireCertificatePrivateKey(priv->cert,					       CRYPT_ACQUIRE_COMPARE_KEY_FLAG,					       NULL, &priv->crypt_prov,					       &priv->key_spec,					       &priv->free_crypt_prov)) {		cryptoapi_error("Failed to acquire a private key for the "				"certificate");		goto err;	}	rsa_meth->name = "Microsoft CryptoAPI RSA Method";	rsa_meth->rsa_pub_enc = cryptoapi_rsa_pub_enc;	rsa_meth->rsa_pub_dec = cryptoapi_rsa_pub_dec;	rsa_meth->rsa_priv_enc = cryptoapi_rsa_priv_enc;	rsa_meth->rsa_priv_dec = cryptoapi_rsa_priv_dec;	rsa_meth->finish = cryptoapi_finish;	rsa_meth->flags = RSA_METHOD_FLAG_NO_CHECK;	rsa_meth->app_data = (char *) priv;	rsa = RSA_new();	if (rsa == NULL) {		SSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE,		       ERR_R_MALLOC_FAILURE);		goto err;	}	if (!SSL_use_certificate(ssl, cert)) {		RSA_free(rsa);		rsa = NULL;		goto err;	}	pub_rsa = cert->cert_info->key->pkey->pkey.rsa;	X509_free(cert);	cert = NULL;	rsa->n = BN_dup(pub_rsa->n);	rsa->e = BN_dup(pub_rsa->e);	if (!RSA_set_method(rsa, rsa_meth))		goto err;	if (!SSL_use_RSAPrivateKey(ssl, rsa))		goto err;	RSA_free(rsa);	return 0;err:	if (cert)		X509_free(cert);	if (rsa)		RSA_free(rsa);	else {		os_free(rsa_meth);		cryptoapi_free_data(priv);	}	return -1;}static int tls_cryptoapi_ca_cert(SSL_CTX *ssl_ctx, SSL *ssl, const char *name){	HCERTSTORE cs;	PCCERT_CONTEXT ctx = NULL;	X509 *cert;	char buf[128];	const char *store;#ifdef UNICODE	WCHAR *wstore;#endif /* UNICODE */	if (mingw_load_crypto_func())		return -1;	if (name == NULL || strncmp(name, "cert_store://", 13) != 0)		return -1;	store = name + 13;#ifdef UNICODE	wstore = os_malloc((os_strlen(store) + 1) * sizeof(WCHAR));	if (wstore == NULL)		return -1;	wsprintf(wstore, L"%S", store);	cs = CertOpenSystemStore(0, wstore);	os_free(wstore);#else /* UNICODE */	cs = CertOpenSystemStore(0, store);#endif /* UNICODE */	if (cs == NULL) {		wpa_printf(MSG_DEBUG, "%s: failed to open system cert store "			   "'%s': error=%d", __func__, store,			   (int) GetLastError());		return -1;	}	while ((ctx = CertEnumCertificatesInStore(cs, ctx))) {		cert = d2i_X509(NULL, (OPENSSL_d2i_TYPE) &ctx->pbCertEncoded,				ctx->cbCertEncoded);		if (cert == NULL) {			wpa_printf(MSG_INFO, "CryptoAPI: Could not process "				   "X509 DER encoding for CA cert");			continue;		}		X509_NAME_oneline(X509_get_subject_name(cert), buf,				  sizeof(buf));		wpa_printf(MSG_DEBUG, "OpenSSL: Loaded CA certificate for "			   "system certificate store: subject='%s'", buf);		if (!X509_STORE_add_cert(ssl_ctx->cert_store, cert)) {			tls_show_errors(MSG_WARNING, __func__,					"Failed to add ca_cert to OpenSSL "					"certificate store");		}		X509_free(cert);	}	if (!CertCloseStore(cs, 0)) {		wpa_printf(MSG_DEBUG, "%s: failed to close system cert store "			   "'%s': error=%d", __func__, name + 13,			   (int) GetLastError());	}	return 0;}#else /* CONFIG_NATIVE_WINDOWS */static int tls_cryptoapi_cert(SSL *ssl, const char *name){	return -1;}#endif /* CONFIG_NATIVE_WINDOWS */static void ssl_info_cb(const SSL *ssl, int where, int ret){

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品一区二区三区中文字幕| 麻豆精品一二三| 欧美激情一区二区三区四区| 精品99一区二区| 久久综合99re88久久爱| 精品国产污网站| 精品久久五月天| 国产日韩一级二级三级| 国产日韩欧美不卡| 国产精品美女久久久久久2018| 国产精品日韩成人| 亚洲欧洲在线观看av| 亚洲美女视频在线观看| 亚洲一卡二卡三卡四卡无卡久久 | 日韩一区二区电影| 欧美一级高清大全免费观看| 日韩欧美精品三级| 欧美激情中文不卡| 亚洲影院久久精品| 精品一区二区三区的国产在线播放| 久久99久久99小草精品免视看| 国产一区二三区好的| av激情成人网| 日韩一级黄色大片| 久久久久久久精| 夜夜精品视频一区二区| 美女网站色91| 99精品视频一区二区三区| 欧美日免费三级在线| 国产日韩欧美精品一区| 亚洲午夜电影在线观看| 国产乱码精品一区二区三区忘忧草 | 日韩精品自拍偷拍| 国产精品理伦片| 亚洲成人自拍网| 国产一区二区福利| 在线观看日韩一区| 久久久99免费| 视频一区在线播放| 9人人澡人人爽人人精品| 7799精品视频| 亚洲少妇最新在线视频| 美女高潮久久久| 在线看国产一区| 国产精品区一区二区三| 免费高清成人在线| 91成人网在线| 国产精品二三区| 国产在线一区二区综合免费视频| 91九色02白丝porn| 国产精品久久久久aaaa樱花 | 日本美女一区二区| 欧美在线999| 亚洲欧美综合在线精品| 国产精品白丝jk黑袜喷水| 欧美人与性动xxxx| 亚洲在线视频免费观看| 成人av先锋影音| 国产亚洲综合性久久久影院| 日韩av电影免费观看高清完整版在线观看 | 91精品欧美久久久久久动漫| 亚洲黄色在线视频| 99久久综合99久久综合网站| 国产午夜精品一区二区三区四区| 美女视频一区二区| 欧美一级高清片在线观看| 日韩vs国产vs欧美| 欧美丰满嫩嫩电影| 五月婷婷激情综合| 欧美精品丝袜久久久中文字幕| 亚洲欧美日韩中文播放| 99re热这里只有精品视频| 国产精品久久一级| 色综合天天综合| 亚洲精品乱码久久久久久| 日本精品免费观看高清观看| 亚洲日本va在线观看| 91毛片在线观看| 亚洲综合久久久| 精品视频色一区| 美女视频一区二区三区| 亚洲精品一线二线三线| 国产精品99久久久久久有的能看 | 欧美日韩国产高清一区| 偷拍与自拍一区| 久久免费视频色| 成人av电影在线| 亚洲一区二区三区爽爽爽爽爽 | 欧美不卡在线视频| 国产精品一区二区果冻传媒| 欧美激情一区在线观看| 色综合婷婷久久| 丝袜a∨在线一区二区三区不卡| 日韩欧美国产1| 波多野结衣亚洲| 日韩精品一二三| 国产婷婷一区二区| 在线精品视频一区二区三四| 午夜电影一区二区三区| 欧美精品一区二区在线播放 | 日本不卡1234视频| 中文字幕欧美激情一区| 在线一区二区三区四区| 蜜桃av噜噜一区| 国产精品美女一区二区| 欧美日韩国产一级片| 国产一区二区主播在线| 亚洲综合一区二区精品导航| 欧美成人福利视频| 91麻豆自制传媒国产之光| 亚洲主播在线观看| 精品第一国产综合精品aⅴ| 一本一道综合狠狠老| 另类成人小视频在线| 亚洲欧美乱综合| 久久久久久久精| 欧美精品粉嫩高潮一区二区| 制服.丝袜.亚洲.中文.综合| 国产在线精品一区在线观看麻豆| 中文字幕一区二区不卡| 成人激情小说乱人伦| 亚洲一区二区三区视频在线| 久久久久久电影| 91精品国产91久久综合桃花| 成人av网站在线| 国产乱人伦偷精品视频不卡| 香蕉成人伊视频在线观看| 亚洲同性gay激情无套| 久久人人超碰精品| 日韩一区和二区| 欧美喷潮久久久xxxxx| 91久久精品一区二区| 国产不卡在线播放| 久久成人久久爱| 日本美女一区二区三区视频| 一区二区三区高清| 亚洲欧美日韩人成在线播放| 国产午夜精品久久久久久久| 日韩女优av电影| 欧美一级高清片| 欧美精品国产精品| 欧美老女人在线| 51精品久久久久久久蜜臀| 欧美日韩一级片在线观看| 欧美在线啊v一区| 欧美在线色视频| 91久久香蕉国产日韩欧美9色| eeuss鲁片一区二区三区在线观看| 蜜桃在线一区二区三区| 日韩av在线发布| 日本不卡一区二区三区| 亚洲va欧美va人人爽| 亚洲一级二级在线| 午夜精品久久久久久久99樱桃| 一区二区免费在线播放| 亚洲国产日韩a在线播放性色| 亚洲自拍欧美精品| 香蕉久久一区二区不卡无毒影院| 亚洲综合小说图片| 亚洲高清视频在线| 婷婷久久综合九色综合伊人色| 五月天视频一区| 激情综合网天天干| 国产成人精品免费在线| 高清国产一区二区三区| 99麻豆久久久国产精品免费| 91蜜桃视频在线| 欧美日韩一二三区| 日韩美女视频一区二区在线观看| 26uuu国产电影一区二区| 久久精品视频免费| 亚洲男人天堂一区| 日本免费在线视频不卡一不卡二| 激情文学综合丁香| 国产盗摄一区二区三区| 在线视频你懂得一区| 欧美一区二区三区人| 欧美一级高清片在线观看| 欧美高清在线一区二区| 亚洲激情在线播放| 久久国产乱子精品免费女| 国产91精品欧美| 欧美人与禽zozo性伦| 国产亚洲污的网站| 亚洲成人av一区| 国产美女一区二区| 欧美色综合网站| 亚洲国产成人午夜在线一区| 一区二区免费视频| 国产精一品亚洲二区在线视频| 一本大道久久a久久综合| 欧美一级艳片视频免费观看| 亚洲欧洲美洲综合色网| 久久国内精品视频| 欧美影院午夜播放| 国产精品欧美一区二区三区| 日韩av一级电影| 欧洲一区二区三区在线| 国产精品久久久久一区二区三区共| 亚洲一区二区三区中文字幕在线|