diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2015-01-09 09:46:07 +0100 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2015-01-09 09:46:07 +0100 |
commit | 5ac03256db0fe4ca7e3ad1117d096c3a76368b76 (patch) | |
tree | c767808892cc7f013b87174ad3b31c23508b5fa5 /release/src/router/matrixssl/src/os | |
parent | d89b5dc1509c66ccbed1dbc7ed0e09264ea3179e (diff) | |
download | tomato-5ac03256db0fe4ca7e3ad1117d096c3a76368b76.tar.gz tomato-5ac03256db0fe4ca7e3ad1117d096c3a76368b76.tar.bz2 |
backported CyaSSL/OpenSSL support for internal webserver instead of MatrixSSL
Diffstat (limited to 'release/src/router/matrixssl/src/os')
-rw-r--r-- | release/src/router/matrixssl/src/os/debug.c | 62 | ||||
-rw-r--r-- | release/src/router/matrixssl/src/os/linux/linux.c | 381 | ||||
-rw-r--r-- | release/src/router/matrixssl/src/os/osLayer.h | 200 | ||||
-rw-r--r-- | release/src/router/matrixssl/src/os/psMalloc.h | 63 | ||||
-rw-r--r-- | release/src/router/matrixssl/src/os/vxworks/vxworks.c | 219 | ||||
-rw-r--r-- | release/src/router/matrixssl/src/os/win/win.c | 241 |
6 files changed, 0 insertions, 1166 deletions
diff --git a/release/src/router/matrixssl/src/os/debug.c b/release/src/router/matrixssl/src/os/debug.c deleted file mode 100644 index 4ca0f9f5..00000000 --- a/release/src/router/matrixssl/src/os/debug.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * debug.c - * Release $Name: MATRIXSSL_1_8_8_OPEN $ - */ -/* - * Copyright (c) PeerSec Networks, 2002-2009. 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" - -/******************************************************************************/ -/* - Debugging APIs -*/ -#ifdef DEBUG - -/* message should contain one %s, unless value is NULL */ -void matrixStrDebugMsg(char *message, char *value) -{ - if (value) { - printf(message, value); - } else { - printf(message); - } -} - -/* message should contain one %d */ -void matrixIntDebugMsg(char *message, int32 value) -{ - printf(message, value); -} - -/* message should contain one %p */ -void matrixPtrDebugMsg(char *message, void *value) -{ - printf(message, value); -} - -#endif /* DEBUG */ - -/******************************************************************************/ - diff --git a/release/src/router/matrixssl/src/os/linux/linux.c b/release/src/router/matrixssl/src/os/linux/linux.c deleted file mode 100644 index a01297d6..00000000 --- a/release/src/router/matrixssl/src/os/linux/linux.c +++ /dev/null @@ -1,381 +0,0 @@ -/* - * linux.c - * Release $Name: MATRIXSSL_1_8_8_OPEN $ - * - * Linux compatibility layer - * Other UNIX like operating systems should also be able to use this - * implementation without change. - */ -/* - * Copyright (c) PeerSec Networks, 2002-2009. 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 - */ -/******************************************************************************/ -#ifdef LINUX -#include <unistd.h> -#include <fcntl.h> -#include <errno.h> -#include <sys/times.h> -#include <time.h> - -#include "../osLayer.h" - -#if defined(USE_RDTSCLL_TIME) || defined(RDTSC) -#include <asm/timex.h> -/* - As defined in asm/timex.h for x386: -*/ -#ifndef rdtscll - #define rdtscll(val) __asm__ __volatile__("rdtsc" : "=A" (val)) -#endif - -static sslTime_t hiresStart; /* zero-time */ -static sslTime_t hiresFreq; /* tics per second */ -#else /* USE_RDTSCLL_TIME */ -static uint32 prevTicks; /* Check wrap */ -static sslTime_t elapsedTime; /* Last elapsed time */ -#endif - -#ifdef USE_MULTITHREADING -#include <pthread.h> -static pthread_mutexattr_t attr; -#endif - -/* max sure we don't retry reads forever */ -#define MAX_RAND_READS 1024 - -static int32 urandfd = -1; -static int32 randfd = -1; - -int32 sslOpenOsdep(void) -{ -#if defined(USE_RDTSCLL_TIME) || defined(RDTSC) - FILE *cpuInfo; - double mhz; - char line[80] = ""; - char *tmpstr; - int32 c; -#endif -/* - Open /dev/random access non-blocking. -*/ - if ((randfd = open("/dev/random", O_RDONLY | O_NONBLOCK)) < 0) { - return -1; - } - if ((urandfd = open("/dev/urandom", O_RDONLY)) < 0) { - close(randfd); - return -1; - } -/* - Initialize times -*/ -#if defined(USE_RDTSCLL_TIME) || defined(RDTSC) - if ((cpuInfo = fopen ("/proc/cpuinfo","r")) == NULL) { - matrixStrDebugMsg("Error opening /proc/cpuinfo\n", NULL); - return -2; - } - - while ((!feof(cpuInfo)) && (strncasecmp(line,"cpu MHz",7) != 0)){ - fgets(line,79,cpuInfo); - } - - if (strncasecmp(line,"cpu MHz",7) == 0){ - tmpstr = strchr(line,':'); - tmpstr++; - c = strspn(tmpstr, " \t"); - tmpstr +=c; - c = strcspn(tmpstr, " \t\n\r"); - tmpstr[c] = '\0'; - mhz = 1000000 * atof(tmpstr); - hiresFreq = (sslTime_t)mhz; - fclose (cpuInfo); - } else { - fclose (cpuInfo); - hiresStart = 0; - return -3; - } - rdtscll(hiresStart); -#endif /* USE_RDTSCLL_TIME */ -/* - FUTURE - Solaris doesn't support recursive mutexes! - We don't use them internally anyway, so this is not an issue, - but we like to set this if we can because it's silly for a thread to lock - itself, rather than error or recursive lock -*/ -#ifdef USE_MULTITHREADING - pthread_mutexattr_init(&attr); -#ifndef OSX - pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP); -#endif /* !OSX */ -#endif /* USE_MULTITHREADING */ - return psOpenMalloc(MAX_MEMORY_USAGE); -} - -int32 sslCloseOsdep(void) -{ - psCloseMalloc(); -#ifdef USE_MULTITHREADING - pthread_mutexattr_destroy(&attr); -#endif - close(randfd); - close(urandfd); - return 0; -} - -/* - Read from /dev/random non-blocking first, then from urandom if it would - block. Also, handle file closure case and re-open. -*/ - -int32 sslGetEntropy(unsigned char *bytes, int32 size) -{ - int32 rc, sanity, retry, readBytes; - unsigned char *where = bytes; - - sanity = retry = rc = readBytes = 0; - - while (size) { - if ((rc = read(randfd, where, size)) < 0 || sanity > MAX_RAND_READS) { - if (errno == EINTR) { - if (sanity > MAX_RAND_READS) { - return -1; - } - sanity++; - continue; - } else if (errno == EAGAIN) { - break; - } else if (errno == EBADF && retry == 0) { - close(randfd); - if ((randfd = open("/dev/random", O_RDONLY | O_NONBLOCK)) < 0) { - break; - } - retry++; - continue; - } else { - break; - } - } - readBytes += rc; - where += rc; - size -= rc; - } - - - sanity = retry = 0; - while (size) { - if ((rc = read(urandfd, where, size)) < 0 || sanity > MAX_RAND_READS) { - if (errno == EINTR) { - if (sanity > MAX_RAND_READS) { - return -1; - } - sanity++; - continue; - } else if (errno == EBADF && retry == 0) { - close(urandfd); - if ((urandfd = - open("/dev/urandom", O_RDONLY | O_NONBLOCK)) < 0) { - return -1; - } - retry++; - continue; - } else { - return -1; - } - } - readBytes += rc; - where += rc; - size -= rc; - } - return readBytes; -} - -#ifdef DEBUG -void psBreak(void) -{ - abort(); -} -#endif - -/******************************************************************************/ - -#ifdef USE_MULTITHREADING - -int32 sslCreateMutex(sslMutex_t *mutex) -{ - - if (pthread_mutex_init(mutex, &attr) != 0) { - return -1; - } - return 0; -} - -int32 sslLockMutex(sslMutex_t *mutex) -{ - if (pthread_mutex_lock(mutex) != 0) { - return -1; - } - return 0; -} - -int32 sslUnlockMutex(sslMutex_t *mutex) -{ - if (pthread_mutex_unlock(mutex) != 0) { - return -1; - } - return 0; -} - -void sslDestroyMutex(sslMutex_t *mutex) -{ - pthread_mutex_destroy(mutex); -} -#endif /* USE_MULTITHREADING */ - -/*****************************************************************************/ -/* - Use a platform specific high resolution timer -*/ -#if defined(USE_RDTSCLL_TIME) || defined(RDTSC) - -int32 sslInitMsecs(sslTime_t *t) -{ - unsigned long long diff; - int32 d; - - rdtscll(*t); - diff = *t - hiresStart; - d = (int32)((diff * 1000) / hiresFreq); - return d; -} - -/* - Return the delta in seconds between two time values -*/ -long sslDiffMsecs(sslTime_t then, sslTime_t now) -{ - unsigned long long diff; - - diff = now - then; - return (long)((diff * 1000) / hiresFreq); -} - -/* - Return the delta in seconds between two time values -*/ -int32 sslDiffSecs(sslTime_t then, sslTime_t now) -{ - unsigned long long diff; - - diff = now - then; - return (int32)(diff / hiresFreq); -} - -/* - 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 <= b) { - return 1; - } - return 0; -} - -#else /* USE_RDTSCLL_TIME */ - -int32 sslInitMsecs(sslTime_t *timePtr) -{ - struct tms tbuff; - uint32 t, deltat, deltaticks; - -/* - * times() returns the number of clock ticks since the system - * was booted. If it is less than the last time we did this, the - * clock has wrapped around 0xFFFFFFFF, so compute the delta, otherwise - * the delta is just the difference between the new ticks and the last - * ticks. Convert the elapsed ticks to elapsed msecs using rounding. - */ - if ((t = times(&tbuff)) >= prevTicks) { - deltaticks = t - prevTicks; - } else { - deltaticks = (0xFFFFFFFF - prevTicks) + 1 + t; - } - deltat = ((deltaticks * 1000) + (CLK_TCK / 2)) / CLK_TCK; - -/* - * Add the delta to the previous elapsed time. - */ - elapsedTime.usec += ((deltat % 1000) * 1000); - if (elapsedTime.usec >= 1000000) { - elapsedTime.usec -= 1000000; - deltat += 1000; - } - elapsedTime.sec += (deltat / 1000); - prevTicks = t; - -/* - * Return the current elapsed time. - */ - timePtr->usec = elapsedTime.usec; - timePtr->sec = elapsedTime.sec; - return (timePtr->usec / 1000) + timePtr->sec * 1000; -} - -/* - Return the delta in seconds between two time values -*/ -long sslDiffMsecs(sslTime_t then, sslTime_t now) -{ - return (long)((now.sec - then.sec) * 1000); -} - -/* - Return the delta in seconds between two time values -*/ -int32 sslDiffSecs(sslTime_t then, sslTime_t now) -{ - return (int32)(now.sec - then.sec); -} - -/* - 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.sec < b.sec) { - return 1; - } else if (a.sec == b.sec) { - if (a.usec <= b.usec) { - return 1; - } else { - return 0; - } - } - return 0; -} - -#endif /* USE_RDTSCLL_TIME */ - - -#endif /* LINUX */ - -/******************************************************************************/ diff --git a/release/src/router/matrixssl/src/os/osLayer.h b/release/src/router/matrixssl/src/os/osLayer.h deleted file mode 100644 index 00872198..00000000 --- a/release/src/router/matrixssl/src/os/osLayer.h +++ /dev/null @@ -1,200 +0,0 @@ -/* - * osLayer.h - * Release $Name: MATRIXSSL_1_8_8_OPEN $ - * - * Layered header for OS specific functions - * Contributors adding new OS support must implement all functions - * externed below. - */ -/* - * Copyright (c) PeerSec Networks, 2002-2009. 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 - */ -/******************************************************************************/ - -#ifndef _h_OS_LAYER -#define _h_OS_LAYER -#define _h_EXPORT_SYMBOLS - -#include <stdio.h> -#include <stdlib.h> - -#ifndef WINCE -#include <time.h> -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/******************************************************************************/ - -#include "../../matrixCommon.h" -#include "psMalloc.h" - -/* - Functions defined at OS level -*/ -extern int32 sslOpenOsdep(void); -extern int32 sslCloseOsdep(void); -extern int32 sslGetEntropy(unsigned char *bytes, int32 size); - -/* - Defines to make library multithreading safe -*/ -#ifdef USE_MULTITHREADING - -#if WIN32 || WINCE -#include <windows.h> - -typedef CRITICAL_SECTION sslMutex_t; -#define sslCreateMutex(M) InitializeCriticalSection((CRITICAL_SECTION *) M); -#define sslLockMutex(M) EnterCriticalSection((CRITICAL_SECTION *) M); -#define sslUnlockMutex(M) LeaveCriticalSection((CRITICAL_SECTION *) M); -#define sslDestroyMutex(M) DeleteCriticalSection((CRITICAL_SECTION *) M); - -#elif LINUX -#include <pthread.h> -#include <string.h> - -typedef pthread_mutex_t sslMutex_t; -extern int32 sslCreateMutex(sslMutex_t *mutex); -extern int32 sslLockMutex(sslMutex_t *mutex); -extern int32 sslUnlockMutex(sslMutex_t *mutex); -extern void sslDestroyMutex(sslMutex_t *mutex); -#elif VXWORKS -#include "semLib.h" - -typedef SEM_ID sslMutex_t; -extern int32 sslCreateMutex(sslMutex_t *mutex); -extern int32 sslLockMutex(sslMutex_t *mutex); -extern int32 sslUnlockMutex(sslMutex_t *mutex); -extern void sslDestroyMutex(sslMutex_t *mutex); -#endif /* WIN32 || CE */ - -#else /* USE_MULTITHREADING */ -typedef int32 sslMutex_t; -#define sslCreateMutex(M) -#define sslLockMutex(M) -#define sslUnlockMutex(M) -#define sslDestroyMutex(M) - -#endif /* USE_MULTITHREADING */ - -/* - Make sslTime_t an opaque time value. - FUTURE - use high res time instead of time_t -*/ -#ifdef LINUX -/* - On some *NIX versions such as MAC OS X 10.4, CLK_TCK has been deprecated -*/ -#ifndef CLK_TCK -#define CLK_TCK CLOCKS_PER_SEC -#endif /* CLK_TCK */ -#endif /* LINUX */ - -#if defined(WIN32) -#include <windows.h> -typedef LARGE_INTEGER sslTime_t; -#elif VXWORKS -typedef struct { - long sec; - long usec; - } sslTime_t; -#elif (defined(USE_RDTSCLL_TIME) || defined(RDTSC)) -typedef unsigned long long LARGE_INTEGER; -typedef LARGE_INTEGER sslTime_t; -#elif WINCE -#include <windows.h> - -typedef LARGE_INTEGER sslTime_t; -#else -typedef struct { - long sec; - long usec; - } sslTime_t; -#endif - -/******************************************************************************/ -/* - We define our own stat for CE. -*/ -#if WINCE - -extern int32 stat(char *filename, struct stat *sbuf); - -struct stat { - unsigned long st_size; /* file size in bytes */ - unsigned long st_mode; - time_t st_atime; /* time of last access */ - time_t st_mtime; /* time of last data modification */ - time_t st_ctime; /* time of last file status change */ -}; - -#define S_IFREG 0100000 -#define S_IFDIR 0040000 - -extern time_t time(); - -#endif /* WINCE */ - -extern int32 sslInitMsecs(sslTime_t *t); -extern int32 sslCompareTime(sslTime_t a, sslTime_t b); -extern int32 sslDiffSecs(sslTime_t then, sslTime_t now); -extern long sslDiffMsecs(sslTime_t then, sslTime_t now); - - -/******************************************************************************/ -/* - Debugging functionality. - - If DEBUG is defined matrixStrDebugMsg and matrixIntDebugMsg messages are - output to stdout, sslAsserts go to stderror and call psBreak. - - In non-DEBUG builds matrixStrDebugMsg and matrixIntDebugMsg are - compiled out. sslAsserts still go to stderr, but psBreak is not called. - -*/ - -#if DEBUG -extern void psBreak(void); -extern void matrixStrDebugMsg(char *message, char *arg); -extern void matrixIntDebugMsg(char *message, int32 arg); -extern void matrixPtrDebugMsg(char *message, void *arg); -#define sslAssert(C) if (C) ; else \ - {fprintf(stderr, "%s:%d sslAssert(%s)\n",__FILE__, __LINE__, #C); psBreak(); } -#else -#define matrixStrDebugMsg(x, y) -#define matrixIntDebugMsg(x, y) -#define matrixPtrDebugMsg(x, y) -#define sslAssert(C) if (C) ; else \ - {fprintf(stderr, "%s:%d sslAssert(%s)\n",__FILE__, __LINE__, #C); } -#endif /* DEBUG */ - -#ifdef __cplusplus -} -#endif - -#endif /* _h_OS_LAYER */ - -/******************************************************************************/ diff --git a/release/src/router/matrixssl/src/os/psMalloc.h b/release/src/router/matrixssl/src/os/psMalloc.h deleted file mode 100644 index 3ba4bec5..00000000 --- a/release/src/router/matrixssl/src/os/psMalloc.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * psMalloc.h - * Release $Name: MATRIXSSL_1_8_8_OPEN $ - * - * Header for psMalloc functions - */ -/* - * Copyright (c) PeerSec Networks, 2002-2009. 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 - */ -/******************************************************************************/ - -#ifndef _h_PS_MALLOC -#define _h_PS_MALLOC - -#define PEERSEC_BASE_POOL 0 -#define PEERSEC_NO_POOL (void *)0x00001 - -/******************************************************************************/ -/* - Because a set of public APIs are exposed here there is a dependence on - the package. The config layer header must be parsed to determine what - defines are configured -*/ -#include "../../matrixCommon.h" - -/* - Native memory routines -*/ -#define MAX_MEMORY_USAGE 0 -#define psOpenMalloc(A) 0 -#define psCloseMalloc() -#define psMalloc(A, B) malloc(B) -#define psCalloc(A, B, C) calloc(B, C) -#define psRealloc realloc -#define psFree free -#define psMemset memset -#define psMemcpy memcpy -typedef int32 psPool_t; - -#endif /* _h_PS_MALLOC */ - - - diff --git a/release/src/router/matrixssl/src/os/vxworks/vxworks.c b/release/src/router/matrixssl/src/os/vxworks/vxworks.c deleted file mode 100644 index 68f99e95..00000000 --- a/release/src/router/matrixssl/src/os/vxworks/vxworks.c +++ /dev/null @@ -1,219 +0,0 @@ -/* - * vxworks.c - * Release $Name: MATRIXSSL_1_8_8_OPEN $ - * - * VXWORKS compatibility layer - * Other UNIX like operating systems should also be able to use this - * implementation without change. - */ -/* - * Copyright (c) PeerSec Networks, 2002-2009. 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 - */ -/******************************************************************************/ - -#ifdef VXWORKS -#include <fcntl.h> -#include <errno.h> - -#include "../../matrixInternal.h" - -#include <sys/times.h> -#include <time.h> - -static unsigned int prevTicks; /* Check wrap */ -static int tickspersec; /* system clock rate */ -static sslTime_t elapsedTime; /* Last elapsed time */ - -/******************************************************************************/ -/* - OS dependent Open. - */ -int sslOpenOsdep(void) -{ - tickspersec = sysClkRateGet(); - - psOpenMalloc(MAX_MEMORY_USAGE); - return 0; -} - -/******************************************************************************/ -/* - sslClose - */ -int sslCloseOsdep(void) -{ - psCloseMalloc(); - return 0; -} - -/******************************************************************************/ -/* - TODO: hardware dependent entropy function. Implement - depending on platform. - */ - -int sslGetEntropy(unsigned char *bytes, int size) -{ - return 0; -} - -/******************************************************************************/ -/* - debug break. - */ -void sslBreak(void) -{ - abort(); -} - -/******************************************************************************/ -/* - Init a time structure. - */ -int sslInitMsecs(sslTime_t *timePtr) -{ - unsigned int t, deltat, deltaticks; - -/* - tickGet returns the number of clock ticks since the system - was booted. If it is less than the last time we did this, the - clock has wrapped around 0xFFFFFFFF, so compute the delta, otherwise - the delta is just the difference between the new ticks and the last - ticks. Convert the elapsed ticks to elapsed msecs using rounding. - */ - if ((t = tickGet()) >= prevTicks) { - deltaticks = t - prevTicks; - } else { - deltaticks = (0xFFFFFFFF - prevTicks) + 1 + t; - } - deltat = ((deltaticks * 1000) + (tickspersec / 2)) / tickspersec; - -/* - * Add the delta to the previous elapsed time. - */ - elapsedTime.usec += ((deltat % 1000) * 1000); - if (elapsedTime.usec >= 1000000) { - elapsedTime.usec -= 1000000; - deltat += 1000; - } - elapsedTime.sec += (deltat / 1000); - prevTicks = t; - -/* - * Return the current elapsed time. - */ - timePtr->usec = elapsedTime.usec; - timePtr->sec = elapsedTime.sec; -} - -int sslDiffSecs(sslTime_t then, sslTime_t now) -{ - return (int)(now.sec - then.sec); -} - -/******************************************************************************/ -/* - Time comparison. 1 if 'a' is less than or equal. 0 if 'a' is greater -*/ -int sslCompareTime(sslTime_t a, sslTime_t b) -{ - - if (a.sec < b.sec) { - return 1; - } else if (a.sec == b.sec) { - if (a.usec <= b.usec) { - return 1; - } else { - return 0; - } - } - return 0; -} - -/******************************************************************************/ -/* - Initialize a mutex structure. - */ - -int sslCreateMutex(sslMutex_t *mutex) -{ - memset (mutex,0x0,sizeof(sslMutex_t)); - -/* - * Create and initialize a mutual-exclusion semaphore - */ - *mutex = semMCreate(SEM_Q_PRIORITY | SEM_DELETE_SAFE | SEM_INVERSION_SAFE); - return 0; -} - -/******************************************************************************/ -/* - Lock a mutex structure. - */ - -int sslLockMutex(sslMutex_t *mutex) -{ - STATUS stat; - int err; - -/* - Currently waits forever until semaphore is released. -*/ - if ((stat = semTake((SEM_ID) mutex, WAIT_FOREVER)) == ERROR) { - return -1; - } - return stat; -} - -/******************************************************************************/ -/* - Unlock a mutex structure. - */ - -int sslUnlockMutex(sslMutex_t *mutex) -{ - if (mutex != NULL) { - if (semGive((SEM_ID) mutex) == ERROR) { - return -1; - } - } - return 0; -} - -/******************************************************************************/ -/* - Destroy mutex. - */ - -void sslDestroyMutex(sslMutex_t *mutex) -{ - if (mutex == NULL) { - return; - } - sslLockMutex(mutex); - semDelete((SEM_ID) mutex); -} - -#endif /* VXWORKS */ - -/******************************************************************************/ diff --git a/release/src/router/matrixssl/src/os/win/win.c b/release/src/router/matrixssl/src/os/win/win.c deleted file mode 100644 index b4d9afa6..00000000 --- a/release/src/router/matrixssl/src/os/win/win.c +++ /dev/null @@ -1,241 +0,0 @@ -/* - * win.c - * Release $Name: MATRIXSSL_1_8_8_OPEN $ - * - * Microsoft Windows compatibility layer. - */ -/* - * Copyright (c) PeerSec Networks, 2002-2009. 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 0x7FFFFFFF - -static LARGE_INTEGER hiresStart; /* zero-time */ -static LARGE_INTEGER hiresFreq; /* tics per second */ - -/* For backwards compatibility */ -#ifndef CRYPT_SILENT -#define CRYPT_SILENT 0 -#endif - -static 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 DEBUG -void psBreak() -{ - int32 i = 0; i++; /* Prevent the compiler optimizing this function away */ - - DebugBreak(); -} -#endif - -int32 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 */ - -/******************************************************************************/ |