Windows build fixes.
Windows doesn't have ssize_t, sadly. There's SSIZE_T, but defining an
OPENSSL_SSIZE_T seems worse than just using an int.
Change-Id: I09bb5aa03f96da78b619e551f92ed52ce24d9f3f
Reviewed-on: https://boringssl-review.googlesource.com/1352
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt
index 2e255b8..cbfcd73 100644
--- a/crypto/CMakeLists.txt
+++ b/crypto/CMakeLists.txt
@@ -4,7 +4,7 @@
set(PERLASM_STYLE macosx)
set(ASM_EXT S)
enable_language(ASM)
-else(UNIX)
+elseif(UNIX)
set(PERLASM_STYLE elf)
set(ASM_EXT S)
enable_language(ASM)
diff --git a/crypto/aes/asm/aes-x86_64.pl b/crypto/aes/asm/aes-x86_64.pl
index 08785fe..4b6e1b4 100644
--- a/crypto/aes/asm/aes-x86_64.pl
+++ b/crypto/aes/asm/aes-x86_64.pl
@@ -587,6 +587,7 @@
$code.=<<___;
.align 16
.globl asm_AES_encrypt
+.type asm_AES_encrypt,\@function,3
.hidden asm_AES_encrypt
asm_AES_encrypt:
push %rbx
@@ -1182,6 +1183,7 @@
$code.=<<___;
.align 16
.globl asm_AES_decrypt
+.type asm_AES_decrypt,\@function,3
.hidden asm_AES_decrypt
asm_AES_decrypt:
push %rbx
@@ -1280,6 +1282,7 @@
$code.=<<___;
.align 16
.globl asm_AES_set_encrypt_key
+.type asm_AES_set_encrypt_key,\@function,3
asm_AES_set_encrypt_key:
push %rbx
push %rbp
@@ -1544,6 +1547,7 @@
$code.=<<___;
.align 16
.globl asm_AES_set_decrypt_key
+.type asm_AES_set_decrypt_key,\@function,3
asm_AES_set_decrypt_key:
push %rbx
push %rbp
@@ -1636,8 +1640,9 @@
$code.=<<___;
.align 16
-.extern OPENSSL_ia32cap_P
.globl asm_AES_cbc_encrypt
+.type asm_AES_cbc_encrypt,\@function,6
+.extern OPENSSL_ia32cap_P
.hidden asm_AES_cbc_encrypt
asm_AES_cbc_encrypt:
cmp \$0,%rdx # check length
@@ -2749,45 +2754,45 @@
.section .pdata
.align 4
- .rva .LSEH_begin_AES_encrypt
- .rva .LSEH_end_AES_encrypt
- .rva .LSEH_info_AES_encrypt
+ .rva .LSEH_begin_asm_AES_encrypt
+ .rva .LSEH_end_asm_AES_encrypt
+ .rva .LSEH_info_asm_AES_encrypt
- .rva .LSEH_begin_AES_decrypt
- .rva .LSEH_end_AES_decrypt
- .rva .LSEH_info_AES_decrypt
+ .rva .LSEH_begin_asm_AES_decrypt
+ .rva .LSEH_end_asm_AES_decrypt
+ .rva .LSEH_info_asm_AES_decrypt
- .rva .LSEH_begin_AES_set_encrypt_key
- .rva .LSEH_end_AES_set_encrypt_key
- .rva .LSEH_info_AES_set_encrypt_key
+ .rva .LSEH_begin_asm_AES_set_encrypt_key
+ .rva .LSEH_end_asm_AES_set_encrypt_key
+ .rva .LSEH_info_asm_AES_set_encrypt_key
- .rva .LSEH_begin_AES_set_decrypt_key
- .rva .LSEH_end_AES_set_decrypt_key
- .rva .LSEH_info_AES_set_decrypt_key
+ .rva .LSEH_begin_asm_AES_set_decrypt_key
+ .rva .LSEH_end_asm_AES_set_decrypt_key
+ .rva .LSEH_info_asm_AES_set_decrypt_key
- .rva .LSEH_begin_AES_cbc_encrypt
- .rva .LSEH_end_AES_cbc_encrypt
- .rva .LSEH_info_AES_cbc_encrypt
+ .rva .LSEH_begin_asm_AES_cbc_encrypt
+ .rva .LSEH_end_asm_AES_cbc_encrypt
+ .rva .LSEH_info_asm_AES_cbc_encrypt
.section .xdata
.align 8
-.LSEH_info_AES_encrypt:
+.LSEH_info_asm_AES_encrypt:
.byte 9,0,0,0
.rva block_se_handler
.rva .Lenc_prologue,.Lenc_epilogue # HandlerData[]
-.LSEH_info_AES_decrypt:
+.LSEH_info_asm_AES_decrypt:
.byte 9,0,0,0
.rva block_se_handler
.rva .Ldec_prologue,.Ldec_epilogue # HandlerData[]
-.LSEH_info_AES_set_encrypt_key:
+.LSEH_info_asm_AES_set_encrypt_key:
.byte 9,0,0,0
.rva key_se_handler
.rva .Lenc_key_prologue,.Lenc_key_epilogue # HandlerData[]
-.LSEH_info_AES_set_decrypt_key:
+.LSEH_info_asm_AES_set_decrypt_key:
.byte 9,0,0,0
.rva key_se_handler
.rva .Ldec_key_prologue,.Ldec_key_epilogue # HandlerData[]
-.LSEH_info_AES_cbc_encrypt:
+.LSEH_info_asm_AES_cbc_encrypt:
.byte 9,0,0,0
.rva cbc_se_handler
___
diff --git a/crypto/base64/base64.c b/crypto/base64/base64.c
index f5525b1..4cd95d6 100644
--- a/crypto/base64/base64.c
+++ b/crypto/base64/base64.c
@@ -57,6 +57,7 @@
#include <openssl/base64.h>
#include <assert.h>
+#include <limits.h>
static const unsigned char data_bin2ascii[65] =
@@ -358,7 +359,7 @@
}
}
-ssize_t EVP_DecodeBlock(uint8_t *dst, const uint8_t *src, size_t src_len) {
+int EVP_DecodeBlock(uint8_t *dst, const uint8_t *src, size_t src_len) {
int a, b, c, d;
uint32_t l;
size_t i, ret = 0;
@@ -395,5 +396,9 @@
ret += 3;
}
+ if (ret > INT_MAX) {
+ return -1;
+ }
+
return ret;
}
diff --git a/crypto/bio/internal.h b/crypto/bio/internal.h
index b0c9c31..dd3d800 100644
--- a/crypto/bio/internal.h
+++ b/crypto/bio/internal.h
@@ -68,6 +68,7 @@
#include <sys/socket.h>
#else
#include <WinSock2.h>
+#include <WS2tcpip.h>
#endif
#if defined(__cplusplus)
diff --git a/crypto/dh/dh.c b/crypto/dh/dh.c
index 3e6ae6d..cee306b 100644
--- a/crypto/dh/dh.c
+++ b/crypto/dh/dh.c
@@ -147,7 +147,7 @@
return DH_default_method.generate_key(dh);
}
-ssize_t DH_compute_key(unsigned char *out, const BIGNUM *peers_key, DH *dh) {
+int DH_compute_key(unsigned char *out, const BIGNUM *peers_key, DH *dh) {
if (dh->meth->compute_key) {
return dh->meth->compute_key(dh, out, peers_key);
}
diff --git a/crypto/dh/dh_impl.c b/crypto/dh/dh_impl.c
index edc3db7..2ad4454 100644
--- a/crypto/dh/dh_impl.c
+++ b/crypto/dh/dh_impl.c
@@ -252,7 +252,7 @@
return ok;
}
-static ssize_t compute_key(DH *dh, unsigned char *out, const BIGNUM *pub_key) {
+static int compute_key(DH *dh, unsigned char *out, const BIGNUM *pub_key) {
BN_CTX *ctx = NULL;
BN_MONT_CTX *mont = NULL;
BIGNUM *shared_key;
diff --git a/crypto/mem.c b/crypto/mem.c
index e35d98b..1eb97c9 100644
--- a/crypto/mem.c
+++ b/crypto/mem.c
@@ -64,6 +64,10 @@
#include <stdio.h>
#include <string.h>
+#if defined(OPENSSL_WINDOWS)
+#include <Windows.h>
+#endif
+
void *OPENSSL_realloc_clean(void *ptr, size_t old_size, size_t new_size) {
void *ret = NULL;
@@ -94,15 +98,15 @@
}
void OPENSSL_cleanse(void *ptr, size_t len) {
- memset(ptr, 0, len);
+#if defined(OPENSSL_WINDOWS)
+ SecureZeroMemory(ptr, len);
+#else
+ memset(ptr, 0, len);
#if !defined(OPENSSL_NO_ASM)
/* As best as we can tell, this is sufficient to break any optimisations that
might try to eliminate "superfluous" memsets. If there's an easy way to
detect memset_s, it would be better to use that. */
-#if defined(OPENSSL_WINDOWS)
- __asm;
-#else
__asm__ __volatile__("" : : "r"(ptr) : "memory");
#endif
#endif /* !OPENSSL_NO_ASM */
@@ -155,7 +159,7 @@
#if defined(OPENSSL_WINDOWS)
int OPENSSL_strcasecmp(const char *a, const char *b) {
- return _stricmp(a, b, n);
+ return _stricmp(a, b);
}
int OPENSSL_strncasecmp(const char *a, const char *b, size_t n) {
diff --git a/crypto/perlasm/x86_64-xlate.pl b/crypto/perlasm/x86_64-xlate.pl
index e0695e0..8018fbd 100755
--- a/crypto/perlasm/x86_64-xlate.pl
+++ b/crypto/perlasm/x86_64-xlate.pl
@@ -918,7 +918,13 @@
}
@args = reverse(@args);
undef $sz if ($nasm && $opcode->mnemonic() eq "lea");
- printf "\t%s\t%s",$insn,join(",",map($_->out($sz),@args));
+
+ if ($insn eq "movq" && $#args == 1 && $args[0]->out($sz) eq "xmm0" && $args[1]->out($sz) eq "rax") {
+ # I have no clue why MASM can't parse this instruction.
+ printf "DB 66h, 48h, 0fh, 6eh, 0c0h";
+ } else {
+ printf "\t%s\t%s",$insn,join(",",map($_->out($sz),@args));
+ }
}
} else {
printf "\t%s",$opcode->out();
diff --git a/crypto/rc4/asm/rc4-x86_64.pl b/crypto/rc4/asm/rc4-x86_64.pl
index 797ae13..c033a41 100644
--- a/crypto/rc4/asm/rc4-x86_64.pl
+++ b/crypto/rc4/asm/rc4-x86_64.pl
@@ -645,20 +645,20 @@
.section .pdata
.align 4
- .rva .LSEH_begin_RC4
- .rva .LSEH_end_RC4
- .rva .LSEH_info_RC4
+ .rva .LSEH_begin_asm_RC4
+ .rva .LSEH_end_asm_RC4
+ .rva .LSEH_info_asm_RC4
- .rva .LSEH_begin_RC4_set_key
- .rva .LSEH_end_RC4_set_key
- .rva .LSEH_info_RC4_set_key
+ .rva .LSEH_begin_asm_RC4_set_key
+ .rva .LSEH_end_asm_RC4_set_key
+ .rva .LSEH_info_asm_RC4_set_key
.section .xdata
.align 8
-.LSEH_info_RC4:
+.LSEH_info_asm_RC4:
.byte 9,0,0,0
.rva stream_se_handler
-.LSEH_info_RC4_set_key:
+.LSEH_info_asm_RC4_set_key:
.byte 9,0,0,0
.rva key_se_handler
___
diff --git a/crypto/thread.c b/crypto/thread.c
index 1c9926c..6472cd3 100644
--- a/crypto/thread.c
+++ b/crypto/thread.c
@@ -163,7 +163,7 @@
return;
}
-#if defined(OPENSSL_SYS_WIN32)
+#if defined(OPENSSL_WINDOWS)
CRYPTO_THREADID_set_numeric(id, (unsigned long)GetCurrentThreadId());
#else
/* For everything else, default to using the address of 'errno' */
diff --git a/crypto/time_support.c b/crypto/time_support.c
index f845e98..5b300b3 100644
--- a/crypto/time_support.c
+++ b/crypto/time_support.c
@@ -65,7 +65,7 @@
struct tm *OPENSSL_gmtime(const time_t *time, struct tm *result) {
#if defined(OPENSSL_WINDOWS)
- if (_gmtime_s(result, time)) {
+ if (gmtime_s(result, time)) {
return NULL;
}
return result;