⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 win.c

📁 PeerSec Networks MatrixSSL?is an embedded SSL implementation designed for small footprint applicatio
💻 C
字号:
/* *	win.c *	Release $Name: MATRIXSSL_1_7_3_OPEN $ * *	Microsoft Windows compatibility layer. *//* *	Copyright (c) PeerSec Networks, 2002-2005. All Rights Reserved. *	The latest version of this code is available at http://www.matrixssl.org * *	This software is open source; you can redistribute it and/or modify *	it under the terms of the GNU General Public License as published by *	the Free Software Foundation; either version 2 of the License, or *	(at your option) any later version. * *	This General Public License does NOT permit incorporating this software  *	into proprietary programs.  If you are unable to comply with the GPL, a  *	commercial license for this software may be purchased from PeerSec Networks *	at http://www.peersec.com *	 *	This program is distributed in WITHOUT ANY WARRANTY; without even the  *	implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  *	See the GNU General Public License for more details. *	 *	You should have received a copy of the GNU General Public License *	along with this program; if not, write to the Free Software *	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA *	http://www.gnu.org/copyleft/gpl.html */ /******************************************************************************/#include "../osLayer.h"#include <windows.h>#include <wincrypt.h>#ifndef WINCE#include <process.h>#endif#include <limits.h>#if defined(WIN32) || defined(WINCE)#define	MAX_INT			0x7FFFFFFFstatic LARGE_INTEGER	hiresStart; /* zero-time */static LARGE_INTEGER	hiresFreq; /* tics per second *//* For backwards compatibility */#ifndef CRYPT_SILENT#define CRYPT_SILENT 0#endifstatic HCRYPTPROV		hProv;	/* Crypto context for random bytes */int32 sslOpenOsdep(){	int32		rc;	if ((rc = psOpenMalloc(MAX_MEMORY_USAGE)) < 0) {		return rc;	}/*	Hires time init*/	QueryPerformanceFrequency(&hiresFreq);	QueryPerformanceCounter(&hiresStart);	if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 			CRYPT_VERIFYCONTEXT))  {		return -1;	}	return 0;}int32 sslCloseOsdep(){	CryptReleaseContext(hProv, 0);	psCloseMalloc();	return 0;}int32 sslGetEntropy(unsigned char *bytes, int32 size){	if (CryptGenRandom(hProv, size, bytes)) {		return size;	}	return -1;}#ifdef DEBUGvoid psBreak(){	int32	i = 0; i++;	/* Prevent the compiler optimizing this function away */	DebugBreak();}#endifint32 sslInitMsecs(sslTime_t *t){	__int64		diff;	int32			d;	QueryPerformanceCounter(t);	diff = t->QuadPart - hiresStart.QuadPart;	d = (int32)((diff * 1000) / hiresFreq.QuadPart);	return d;}int32 sslDiffSecs(sslTime_t then, sslTime_t now){	__int64	diff;	diff = now.QuadPart - then.QuadPart;	return (int32)(diff / hiresFreq.QuadPart);}/*	Time comparison.  1 if 'a' is less than or equal.  0 if 'a' is greater*/int32 sslCompareTime(sslTime_t a, sslTime_t b){	if (a.QuadPart <= b.QuadPart) {		return 1;	}	return 0;}#ifdef WINCE/******************************************************************************//* 	Our implementation of wide character stat: get file information.  	NOTES: 		only gets the file size currently */int32 stat(char *filename, struct stat *sbuf){	DWORD	dwAttributes;	HANDLE	hFile;	int32		rc, size;	unsigned short uniFile[512];	rc = 0;	memset(sbuf, 0, sizeof(struct stat));	MultiByteToWideChar(CP_ACP, 0, filename, -1, uniFile, 256);	dwAttributes = GetFileAttributes(uniFile);	if (dwAttributes != 0xFFFFFFFF && dwAttributes & FILE_ATTRIBUTE_DIRECTORY) {		sbuf->st_mode = S_IFDIR;		return 0;	}	sbuf->st_mode = S_IFREG;	if ((hFile = CreateFile(uniFile, GENERIC_READ, FILE_SHARE_READ && FILE_SHARE_WRITE, NULL,		OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) {		return -1;	}	/* *	 Get the file size. */	size = GetFileSize(hFile, NULL);	sbuf->st_size = size;		CloseHandle(hFile);	return rc;}/******************************************************************************//* 	The following functions implement a unixlike time() function. */static FILETIME YearToFileTime(WORD wYear){		SYSTEMTIME sbase;	FILETIME fbase;	sbase.wYear         = wYear;	sbase.wMonth        = 1;	sbase.wDayOfWeek    = 1; //assumed	sbase.wDay          = 1;	sbase.wHour         = 0;	sbase.wMinute       = 0;	sbase.wSecond       = 0;	sbase.wMilliseconds = 0;	SystemTimeToFileTime( &sbase, &fbase );	return fbase;}time_t time() {	__int64 time1, time2, iTimeDiff;	FILETIME fileTime1, fileTime2;	SYSTEMTIME  sysTime;/*	Get 1970's filetime.*/	fileTime1 = YearToFileTime(1970);/*	Get the current filetime time.*/	GetSystemTime(&sysTime);	SystemTimeToFileTime(&sysTime, &fileTime2);/* 	Stuff the 2 FILETIMEs into their own __int64s.*/		time1 = fileTime1.dwHighDateTime;	time1 <<= 32;					time1 |= fileTime1.dwLowDateTime;	time2 = fileTime2.dwHighDateTime;	time2 <<= 32;					time2 |= fileTime2.dwLowDateTime;/*	Get the difference of the two64-bit ints.	This is he number of 100-nanosecond intervals since Jan. 1970.  So	we divide by 10000 to get seconds. */	iTimeDiff = (time2 - time1) / 10000000;	return (int32)iTimeDiff;}#endif /* WINCE */#endif /* WIN32 *//******************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -