提交 0491e058 编写于 作者: A Andy Polyakov

Final(?) WinCE update.

上级 9a1a5b87
...@@ -14,6 +14,9 @@ ...@@ -14,6 +14,9 @@
Changes between 0.9.8 and 0.9.8a [XX xxx XXXX] Changes between 0.9.8 and 0.9.8a [XX xxx XXXX]
*) Extended Windows CE support.
[Satoshi Nakamura and Andy Polyakov]
*) Initialize SSL_METHOD structures at compile time instead of during *) Initialize SSL_METHOD structures at compile time instead of during
runtime, thus removing the need for a lock. runtime, thus removing the need for a lock.
[Steve Henson] [Steve Henson]
......
...@@ -116,6 +116,10 @@ ...@@ -116,6 +116,10 @@
extern "C" { extern "C" {
#endif #endif
#ifdef _
#undef _
#endif
typedef unsigned char _ossl_old_des_cblock[8]; typedef unsigned char _ossl_old_des_cblock[8];
typedef struct _ossl_old_des_ks_struct typedef struct _ossl_old_des_ks_struct
{ {
......
...@@ -95,6 +95,11 @@ int main(int argc, char * argv[]) { puts("Elliptic curves are disabled."); retur ...@@ -95,6 +95,11 @@ int main(int argc, char * argv[]) { puts("Elliptic curves are disabled."); retur
#include <openssl/rand.h> #include <openssl/rand.h>
#include <openssl/bn.h> #include <openssl/bn.h>
#if defined(_MSC_VER) && defined(_MIPS_) && _MSC_VER<1300
/* suppress "too big too optimize" warning */
#pragma warning(disable:4959)
#endif
#define ABORT do { \ #define ABORT do { \
fflush(stdout); \ fflush(stdout); \
fprintf(stderr, "%s:%d: ABORT\n", __FILE__, __LINE__); \ fprintf(stderr, "%s:%d: ABORT\n", __FILE__, __LINE__); \
......
...@@ -156,6 +156,7 @@ typedef struct tagCURSORINFO ...@@ -156,6 +156,7 @@ typedef struct tagCURSORINFO
#define CURSOR_SHOWING 0x00000001 #define CURSOR_SHOWING 0x00000001
#endif /* CURSOR_SHOWING */ #endif /* CURSOR_SHOWING */
#if !defined(OPENSSL_SYS_WINCE)
typedef BOOL (WINAPI *CRYPTACQUIRECONTEXTW)(HCRYPTPROV *, LPCWSTR, LPCWSTR, typedef BOOL (WINAPI *CRYPTACQUIRECONTEXTW)(HCRYPTPROV *, LPCWSTR, LPCWSTR,
DWORD, DWORD); DWORD, DWORD);
typedef BOOL (WINAPI *CRYPTGENRANDOM)(HCRYPTPROV, DWORD, BYTE *); typedef BOOL (WINAPI *CRYPTGENRANDOM)(HCRYPTPROV, DWORD, BYTE *);
...@@ -175,9 +176,7 @@ typedef BOOL (WINAPI *THREAD32)(HANDLE, LPTHREADENTRY32); ...@@ -175,9 +176,7 @@ typedef BOOL (WINAPI *THREAD32)(HANDLE, LPTHREADENTRY32);
typedef BOOL (WINAPI *MODULE32)(HANDLE, LPMODULEENTRY32); typedef BOOL (WINAPI *MODULE32)(HANDLE, LPMODULEENTRY32);
#include <lmcons.h> #include <lmcons.h>
#ifndef OPENSSL_SYS_WINCE
#include <lmstats.h> #include <lmstats.h>
#endif
#if 1 /* The NET API is Unicode only. It requires the use of the UNICODE #if 1 /* The NET API is Unicode only. It requires the use of the UNICODE
* macro. When UNICODE is defined LPTSTR becomes LPWSTR. LMSTR was * macro. When UNICODE is defined LPTSTR becomes LPWSTR. LMSTR was
* was added to the Platform SDK to allow the NET API to be used in * was added to the Platform SDK to allow the NET API to be used in
...@@ -188,12 +187,12 @@ typedef NET_API_STATUS (NET_API_FUNCTION * NETSTATGET) ...@@ -188,12 +187,12 @@ typedef NET_API_STATUS (NET_API_FUNCTION * NETSTATGET)
(LPWSTR, LPWSTR, DWORD, DWORD, LPBYTE*); (LPWSTR, LPWSTR, DWORD, DWORD, LPBYTE*);
typedef NET_API_STATUS (NET_API_FUNCTION * NETFREE)(LPBYTE); typedef NET_API_STATUS (NET_API_FUNCTION * NETFREE)(LPBYTE);
#endif /* 1 */ #endif /* 1 */
#endif /* !OPENSSL_SYS_WINCE */
int RAND_poll(void) int RAND_poll(void)
{ {
MEMORYSTATUS m; MEMORYSTATUS m;
HCRYPTPROV hProvider = 0; HCRYPTPROV hProvider = 0;
BYTE buf[64];
DWORD w; DWORD w;
int good = 0; int good = 0;
...@@ -208,18 +207,18 @@ int RAND_poll(void) ...@@ -208,18 +207,18 @@ int RAND_poll(void)
# if defined(_WIN32_WCE) && _WIN32_WCE>=300 # if defined(_WIN32_WCE) && _WIN32_WCE>=300
/* Even though MSDN says _WIN32_WCE>=210, it doesn't seem to be available /* Even though MSDN says _WIN32_WCE>=210, it doesn't seem to be available
* in commonly available implementations prior 300... */ * in commonly available implementations prior 300... */
# ifndef CryptAcquireContext {
/* reserve for broken header... */ BYTE buf[64];
# define CryptAcquireContext CryptAcquireContextW
# endif
/* poll the CryptoAPI PRNG */ /* poll the CryptoAPI PRNG */
/* The CryptoAPI returns sizeof(buf) bytes of randomness */ /* The CryptoAPI returns sizeof(buf) bytes of randomness */
if (CryptAcquireContext(&hProvider, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) if (CryptAcquireContextW(&hProvider, NULL, NULL, PROV_RSA_FULL,
CRYPT_VERIFYCONTEXT))
{ {
if (CryptGenRandom(hProvider, sizeof(buf), buf)) if (CryptGenRandom(hProvider, sizeof(buf), buf))
RAND_add(buf, sizeof(buf), sizeof(buf)); RAND_add(buf, sizeof(buf), sizeof(buf));
CryptReleaseContext(hProvider, 0); CryptReleaseContext(hProvider, 0);
} }
}
# endif # endif
#else /* OPENSSL_SYS_WINCE */ #else /* OPENSSL_SYS_WINCE */
/* /*
...@@ -246,6 +245,7 @@ int RAND_poll(void) ...@@ -246,6 +245,7 @@ int RAND_poll(void)
CRYPTRELEASECONTEXT release = NULL; CRYPTRELEASECONTEXT release = NULL;
NETSTATGET netstatget = NULL; NETSTATGET netstatget = NULL;
NETFREE netfree = NULL; NETFREE netfree = NULL;
BYTE buf[64];
if (netapi) if (netapi)
{ {
......
...@@ -84,6 +84,10 @@ static unsigned char key_table[256]={ ...@@ -84,6 +84,10 @@ static unsigned char key_table[256]={
0xfe,0x7f,0xc1,0xad, 0xfe,0x7f,0xc1,0xad,
}; };
#if defined(_MSC_VER) && defined(_ARM_)
#pragma optimize("g",off)
#endif
/* It has come to my attention that there are 2 versions of the RC2 /* It has come to my attention that there are 2 versions of the RC2
* key schedule. One which is normal, and anther which has a hook to * key schedule. One which is normal, and anther which has a hook to
* use a reduced key length. * use a reduced key length.
...@@ -136,3 +140,6 @@ void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits) ...@@ -136,3 +140,6 @@ void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits)
*(ki--)=((k[i]<<8)|k[i-1])&0xffff; *(ki--)=((k[i]<<8)|k[i-1])&0xffff;
} }
#if defined(_MSC_VER)
#pragma optimize("",on)
#endif
...@@ -66,6 +66,10 @@ ...@@ -66,6 +66,10 @@
const static unsigned char zeroes[] = {0,0,0,0,0,0,0,0}; const static unsigned char zeroes[] = {0,0,0,0,0,0,0,0};
#if defined(_MSC_VER) && defined(_ARM_)
#pragma optimize("g", off)
#endif
int RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash, int RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash,
const EVP_MD *Hash, const unsigned char *EM, int sLen) const EVP_MD *Hash, const unsigned char *EM, int sLen)
{ {
...@@ -259,3 +263,7 @@ int RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM, ...@@ -259,3 +263,7 @@ int RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM,
return ret; return ret;
} }
#if defined(_MSC_VER)
#pragma optimize("",on)
#endif
...@@ -62,6 +62,10 @@ ...@@ -62,6 +62,10 @@
#include <openssl/ui.h> #include <openssl/ui.h>
#include <openssl/crypto.h> #include <openssl/crypto.h>
#ifdef _
#undef _
#endif
struct ui_method_st struct ui_method_st
{ {
char *name; char *name;
......
...@@ -50,7 +50,7 @@ elsif ($FLAVOR =~ /CE/) ...@@ -50,7 +50,7 @@ elsif ($FLAVOR =~ /CE/)
/^X86/ && do { $wcecdefs.=" -Dx86 -D_X86_"; /^X86/ && do { $wcecdefs.=" -Dx86 -D_X86_";
$wcelflag.=" /machine:X86"; last; }; $wcelflag.=" /machine:X86"; last; };
/^ARM/ && do { $wcecdefs.=" -DARM -D_ARM_"; /^ARM/ && do { $wcecdefs.=" -DARM -D_ARM_";
$wcelflag.=" /machine:$wcetgt"; last; }; $wcelflag.=" /machine:ARM"; last; };
/^R4[0-9]{3}/ && do { $wcecdefs.=" -DMIPS -D_MIPS_ -DMIPS_R4000"; /^R4[0-9]{3}/ && do { $wcecdefs.=" -DMIPS -D_MIPS_ -DMIPS_R4000";
$wcelflag.=" /machine:MIPS"; last; }; $wcelflag.=" /machine:MIPS"; last; };
/^SH[0-9]/ && do { $wcecdefs.=" -D$wcetgt -D_$wcetgt_ -DSHx"; /^SH[0-9]/ && do { $wcecdefs.=" -D$wcetgt -D_$wcetgt_ -DSHx";
...@@ -64,7 +64,6 @@ elsif ($FLAVOR =~ /CE/) ...@@ -64,7 +64,6 @@ elsif ($FLAVOR =~ /CE/)
$base_cflags.=" $wcecdefs"; $base_cflags.=" $wcecdefs";
$base_cflags.=" -Qsh4" if ($wcetgt =~ /^SH4/); $base_cflags.=" -Qsh4" if ($wcetgt =~ /^SH4/);
$opt_cflags=' /MC /O1i'; # optimize for space, but with intrinsics... $opt_cflags=' /MC /O1i'; # optimize for space, but with intrinsics...
$opt_cflags.=' /wd4959'; # disable "too large to optimize" warning...
$dbg_clfags=' /MC /Od -DDEBUG -D_DEBUG'; $dbg_clfags=' /MC /Od -DDEBUG -D_DEBUG';
$lflags="/nologo /opt:ref $wcelflag"; $lflags="/nologo /opt:ref $wcelflag";
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册