aboutsummaryrefslogtreecommitdiff
path: root/crypto
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--crypto/CMakeLists.txt117
-rw-r--r--crypto/Makefile.am73
-rw-r--r--crypto/Makefile.am.elf-arm18
-rw-r--r--crypto/Makefile.am.elf-x86_6417
-rw-r--r--crypto/Makefile.am.macosx-x86_6417
-rw-r--r--crypto/Makefile.am.masm-x86_645
-rw-r--r--crypto/Makefile.am.mingw64-x86_645
-rw-r--r--crypto/arch/aarch64/crypto_cpu_caps_darwin.c60
-rw-r--r--crypto/arch/aarch64/crypto_cpu_caps_linux.c62
-rw-r--r--crypto/arch/aarch64/crypto_cpu_caps_none.c26
-rw-r--r--crypto/arch/aarch64/crypto_cpu_caps_windows.c36
-rw-r--r--crypto/arch/loongarch64/crypto_arch.h21
-rw-r--r--crypto/arch/mips/crypto_arch.h21
-rw-r--r--crypto/bn/arch/loongarch64/bn_arch.h23
-rw-r--r--crypto/compat/.gitignore31
-rw-r--r--crypto/compat/b_win.c5
-rw-r--r--crypto/compat/posix_win.c85
17 files changed, 475 insertions, 147 deletions
diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt
index e642b01..f67d2bd 100644
--- a/crypto/CMakeLists.txt
+++ b/crypto/CMakeLists.txt
@@ -1,30 +1,28 @@
1add_definitions(-DLIBRESSL_CRYPTO_INTERNAL) 1#
2# Copyright (c) 2014 Brent Cook
3#
4# Permission to use, copy, modify, and distribute this software for any
5# purpose with or without fee is hereby granted, provided that the above
6# copyright notice and this permission notice appear in all copies.
7#
8# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
2 15
3if(HOST_ASM_ELF_ARMV4) 16add_definitions(-DLIBRESSL_CRYPTO_INTERNAL)
4 set(
5 ASM_ARMV4_ELF_SRC
6 aes/aes-elf-armv4.S
7 bn/mont-elf-armv4.S
8 sha/sha1-elf-armv4.S
9 sha/sha512-elf-armv4.S
10 sha/sha256-elf-armv4.S
11 modes/ghash-elf-armv4.S
12 armv4cpuid.S
13 armcap.c
14 )
15 add_definitions(-DAES_ASM)
16 add_definitions(-DOPENSSL_BN_ASM_MONT)
17 add_definitions(-DGHASH_ASM)
18 add_definitions(-DOPENSSL_CPUID_OBJ)
19 set(CRYPTO_SRC ${CRYPTO_SRC} ${ASM_ARMV4_ELF_SRC})
20endif()
21 17
22if(HOST_ASM_ELF_X86_64) 18if(HOST_ASM_ELF_X86_64)
19 set(CRYPTO_SRC ${CRYPTO_SRC} aes/aes_amd64.c)
20 set(CRYPTO_SRC ${CRYPTO_SRC} bn/arch/amd64/bn_arch.c)
21 set(CRYPTO_SRC ${CRYPTO_SRC} modes/gcm128_amd64.c)
22
23 set( 23 set(
24 ASM_X86_64_ELF_SRC 24 ASM_X86_64_ELF_SRC
25 aes/aes-elf-x86_64.S 25 aes/aes-elf-x86_64.S
26 aes/bsaes-elf-x86_64.S
27 aes/vpaes-elf-x86_64.S
28 aes/aesni-elf-x86_64.S 26 aes/aesni-elf-x86_64.S
29 bn/modexp512-elf-x86_64.S 27 bn/modexp512-elf-x86_64.S
30 bn/mont-elf-x86_64.S 28 bn/mont-elf-x86_64.S
@@ -35,15 +33,24 @@ if(HOST_ASM_ELF_X86_64)
35 bn/arch/amd64/bignum_add.S 33 bn/arch/amd64/bignum_add.S
36 bn/arch/amd64/bignum_cmadd.S 34 bn/arch/amd64/bignum_cmadd.S
37 bn/arch/amd64/bignum_cmul.S 35 bn/arch/amd64/bignum_cmul.S
36 bn/arch/amd64/bignum_modadd.S
37 bn/arch/amd64/bignum_modsub.S
38 bn/arch/amd64/bignum_mul.S 38 bn/arch/amd64/bignum_mul.S
39 bn/arch/amd64/bignum_mul_4_8.S
39 bn/arch/amd64/bignum_mul_4_8_alt.S 40 bn/arch/amd64/bignum_mul_4_8_alt.S
41 bn/arch/amd64/bignum_mul_6_12.S
42 bn/arch/amd64/bignum_mul_6_12_alt.S
43 bn/arch/amd64/bignum_mul_8_16.S
40 bn/arch/amd64/bignum_mul_8_16_alt.S 44 bn/arch/amd64/bignum_mul_8_16_alt.S
41 bn/arch/amd64/bignum_sqr.S 45 bn/arch/amd64/bignum_sqr.S
46 bn/arch/amd64/bignum_sqr_4_8.S
42 bn/arch/amd64/bignum_sqr_4_8_alt.S 47 bn/arch/amd64/bignum_sqr_4_8_alt.S
48 bn/arch/amd64/bignum_sqr_6_12.S
49 bn/arch/amd64/bignum_sqr_6_12_alt.S
50 bn/arch/amd64/bignum_sqr_8_16.S
43 bn/arch/amd64/bignum_sqr_8_16_alt.S 51 bn/arch/amd64/bignum_sqr_8_16_alt.S
44 bn/arch/amd64/bignum_sub.S 52 bn/arch/amd64/bignum_sub.S
45 bn/arch/amd64/word_clz.S 53 bn/arch/amd64/word_clz.S
46 bn/arch/amd64/bn_arch.c
47 ) 54 )
48 add_definitions(-DAES_ASM) 55 add_definitions(-DAES_ASM)
49 add_definitions(-DBSAES_ASM) 56 add_definitions(-DBSAES_ASM)
@@ -57,11 +64,13 @@ if(HOST_ASM_ELF_X86_64)
57endif() 64endif()
58 65
59if(HOST_ASM_MACOSX_X86_64) 66if(HOST_ASM_MACOSX_X86_64)
67 set(CRYPTO_SRC ${CRYPTO_SRC} aes/aes_amd64.c)
68 set(CRYPTO_SRC ${CRYPTO_SRC} bn/arch/amd64/bn_arch.c)
69 set(CRYPTO_SRC ${CRYPTO_SRC} modes/gcm128_amd64.c)
70
60 set( 71 set(
61 ASM_X86_64_MACOSX_SRC 72 ASM_X86_64_MACOSX_SRC
62 aes/aes-macosx-x86_64.S 73 aes/aes-macosx-x86_64.S
63 aes/bsaes-macosx-x86_64.S
64 aes/vpaes-macosx-x86_64.S
65 aes/aesni-macosx-x86_64.S 74 aes/aesni-macosx-x86_64.S
66 bn/modexp512-macosx-x86_64.S 75 bn/modexp512-macosx-x86_64.S
67 bn/mont-macosx-x86_64.S 76 bn/mont-macosx-x86_64.S
@@ -72,15 +81,24 @@ if(HOST_ASM_MACOSX_X86_64)
72 bn/arch/amd64/bignum_add.S 81 bn/arch/amd64/bignum_add.S
73 bn/arch/amd64/bignum_cmadd.S 82 bn/arch/amd64/bignum_cmadd.S
74 bn/arch/amd64/bignum_cmul.S 83 bn/arch/amd64/bignum_cmul.S
84 bn/arch/amd64/bignum_modadd.S
85 bn/arch/amd64/bignum_modsub.S
75 bn/arch/amd64/bignum_mul.S 86 bn/arch/amd64/bignum_mul.S
87 bn/arch/amd64/bignum_mul_4_8.S
76 bn/arch/amd64/bignum_mul_4_8_alt.S 88 bn/arch/amd64/bignum_mul_4_8_alt.S
89 bn/arch/amd64/bignum_mul_6_12.S
90 bn/arch/amd64/bignum_mul_6_12_alt.S
91 bn/arch/amd64/bignum_mul_8_16.S
77 bn/arch/amd64/bignum_mul_8_16_alt.S 92 bn/arch/amd64/bignum_mul_8_16_alt.S
78 bn/arch/amd64/bignum_sqr.S 93 bn/arch/amd64/bignum_sqr.S
94 bn/arch/amd64/bignum_sqr_4_8.S
79 bn/arch/amd64/bignum_sqr_4_8_alt.S 95 bn/arch/amd64/bignum_sqr_4_8_alt.S
96 bn/arch/amd64/bignum_sqr_6_12.S
97 bn/arch/amd64/bignum_sqr_6_12_alt.S
98 bn/arch/amd64/bignum_sqr_8_16.S
80 bn/arch/amd64/bignum_sqr_8_16_alt.S 99 bn/arch/amd64/bignum_sqr_8_16_alt.S
81 bn/arch/amd64/bignum_sub.S 100 bn/arch/amd64/bignum_sub.S
82 bn/arch/amd64/word_clz.S 101 bn/arch/amd64/word_clz.S
83 bn/arch/amd64/bn_arch.c
84 ) 102 )
85 add_definitions(-DAES_ASM) 103 add_definitions(-DAES_ASM)
86 add_definitions(-DBSAES_ASM) 104 add_definitions(-DBSAES_ASM)
@@ -95,11 +113,12 @@ if(HOST_ASM_MACOSX_X86_64)
95endif() 113endif()
96 114
97if(HOST_ASM_MASM_X86_64) 115if(HOST_ASM_MASM_X86_64)
116 set(CRYPTO_SRC ${CRYPTO_SRC} aes/aes_amd64.c)
117 set(CRYPTO_SRC ${CRYPTO_SRC} modes/gcm128_amd64.c)
118
98 set( 119 set(
99 ASM_X86_64_MASM_SRC 120 ASM_X86_64_MASM_SRC
100 aes/aes-masm-x86_64.S 121 aes/aes-masm-x86_64.S
101 aes/bsaes-masm-x86_64.S
102 aes/vpaes-masm-x86_64.S
103 aes/aesni-masm-x86_64.S 122 aes/aesni-masm-x86_64.S
104 #bn/modexp512-masm-x86_64.S 123 #bn/modexp512-masm-x86_64.S
105 #bn/mont-masm-x86_64.S 124 #bn/mont-masm-x86_64.S
@@ -121,11 +140,12 @@ if(HOST_ASM_MASM_X86_64)
121endif() 140endif()
122 141
123if(HOST_ASM_MINGW64_X86_64) 142if(HOST_ASM_MINGW64_X86_64)
143 set(CRYPTO_SRC ${CRYPTO_SRC} aes/aes_amd64.c)
144 set(CRYPTO_SRC ${CRYPTO_SRC} modes/gcm128_amd64.c)
145
124 set( 146 set(
125 ASM_X86_64_MINGW64_SRC 147 ASM_X86_64_MINGW64_SRC
126 aes/aes-mingw64-x86_64.S 148 aes/aes-mingw64-x86_64.S
127 aes/bsaes-mingw64-x86_64.S
128 aes/vpaes-mingw64-x86_64.S
129 aes/aesni-mingw64-x86_64.S 149 aes/aesni-mingw64-x86_64.S
130 #bn/modexp512-mingw64-x86_64.S 150 #bn/modexp512-mingw64-x86_64.S
131 #bn/mont-mingw64-x86_64.S 151 #bn/mont-mingw64-x86_64.S
@@ -146,7 +166,17 @@ if(HOST_ASM_MINGW64_X86_64)
146endif() 166endif()
147 167
148if(HOST_AARCH64) 168if(HOST_AARCH64)
149 set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps.c) 169 if(APPLE)
170 set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps_darwin.c)
171 elseif(LINUX)
172 set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps_linux.c)
173 elseif(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
174 set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps.c)
175 elseif(WIN32)
176 set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps_windows.c)
177 else()
178 set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps_none.c)
179 endif()
150elseif(HOST_X86_64) 180elseif(HOST_X86_64)
151 set(CRYPTO_SRC ${CRYPTO_SRC} arch/amd64/crypto_cpu_caps.c) 181 set(CRYPTO_SRC ${CRYPTO_SRC} arch/amd64/crypto_cpu_caps.c)
152elseif(HOST_I386) 182elseif(HOST_I386)
@@ -163,7 +193,6 @@ set(
163 crypto_memory.c 193 crypto_memory.c
164 aes/aes.c 194 aes/aes.c
165 aes/aes_core.c 195 aes/aes_core.c
166 aes/aes_ige.c
167 asn1/a_bitstr.c 196 asn1/a_bitstr.c
168 asn1/a_enum.c 197 asn1/a_enum.c
169 asn1/a_int.c 198 asn1/a_int.c
@@ -213,10 +242,8 @@ set(
213 asn1/x_bignum.c 242 asn1/x_bignum.c
214 asn1/x_crl.c 243 asn1/x_crl.c
215 asn1/x_exten.c 244 asn1/x_exten.c
216 asn1/x_info.c
217 asn1/x_long.c 245 asn1/x_long.c
218 asn1/x_name.c 246 asn1/x_name.c
219 asn1/x_pkey.c
220 asn1/x_pubkey.c 247 asn1/x_pubkey.c
221 asn1/x_req.c 248 asn1/x_req.c
222 asn1/x_sig.c 249 asn1/x_sig.c
@@ -245,6 +272,7 @@ set(
245 bio/bss_null.c 272 bio/bss_null.c
246 bio/bss_sock.c 273 bio/bss_sock.c
247 bn/bn_add.c 274 bn/bn_add.c
275 bn/bn_add_sub.c
248 bn/bn_bpsw.c 276 bn/bn_bpsw.c
249 bn/bn_const.c 277 bn/bn_const.c
250 bn/bn_convert.c 278 bn/bn_convert.c
@@ -258,6 +286,7 @@ set(
258 bn/bn_lib.c 286 bn/bn_lib.c
259 bn/bn_mod.c 287 bn/bn_mod.c
260 bn/bn_mod_sqrt.c 288 bn/bn_mod_sqrt.c
289 bn/bn_mod_words.c
261 bn/bn_mont.c 290 bn/bn_mont.c
262 bn/bn_mul.c 291 bn/bn_mul.c
263 bn/bn_prime.c 292 bn/bn_prime.c
@@ -339,11 +368,13 @@ set(
339 ec/ec_convert.c 368 ec/ec_convert.c
340 ec/ec_curve.c 369 ec/ec_curve.c
341 ec/ec_err.c 370 ec/ec_err.c
371 ec/ec_field.c
342 ec/ec_key.c 372 ec/ec_key.c
343 ec/ec_lib.c 373 ec/ec_lib.c
344 ec/ec_mult.c 374 ec/ec_mult.c
345 ec/ec_pmeth.c 375 ec/ec_pmeth.c
346 ec/eck_prn.c 376 ec/eck_prn.c
377 ec/ecp_hp_methods.c
347 ec/ecp_methods.c 378 ec/ecp_methods.c
348 ec/ecx_methods.c 379 ec/ecx_methods.c
349 ecdh/ecdh.c 380 ecdh/ecdh.c
@@ -405,8 +436,10 @@ set(
405 lhash/lhash.c 436 lhash/lhash.c
406 md4/md4.c 437 md4/md4.c
407 md5/md5.c 438 md5/md5.c
408 mlkem/mlkem768.c 439 mlkem/mlkem.c
409 mlkem/mlkem1024.c 440 mlkem/mlkem1024.c
441 mlkem/mlkem768.c
442 mlkem/mlkem_key.c
410 modes/cbc128.c 443 modes/cbc128.c
411 modes/ccm128.c 444 modes/ccm128.c
412 modes/cfb128.c 445 modes/cfb128.c
@@ -464,11 +497,7 @@ set(
464 rand/rand_err.c 497 rand/rand_err.c
465 rand/rand_lib.c 498 rand/rand_lib.c
466 rand/randfile.c 499 rand/randfile.c
467 rc2/rc2_cbc.c 500 rc2/rc2.c
468 rc2/rc2_ecb.c
469 rc2/rc2_skey.c
470 rc2/rc2cfb64.c
471 rc2/rc2ofb64.c
472 rc4/rc4.c 501 rc4/rc4.c
473 ripemd/ripemd.c 502 ripemd/ripemd.c
474 rsa/rsa_ameth.c 503 rsa/rsa_ameth.c
@@ -570,17 +599,17 @@ set(
570 599
571set(COMPAT_SRC empty.c) 600set(COMPAT_SRC empty.c)
572 601
602set(CRYPTO_UNEXPORT ${CRYPTO_UNEXPORT} BIO_s_log)
603
573if(UNIX) 604if(UNIX)
574 set(CRYPTO_SRC ${CRYPTO_SRC} crypto_lock.c) 605 set(CRYPTO_SRC ${CRYPTO_SRC} crypto_lock.c)
575 set(CRYPTO_SRC ${CRYPTO_SRC} bio/b_posix.c) 606 set(CRYPTO_SRC ${CRYPTO_SRC} bio/b_posix.c)
576 set(CRYPTO_SRC ${CRYPTO_SRC} bio/bss_log.c)
577 set(CRYPTO_SRC ${CRYPTO_SRC} ui/ui_openssl.c) 607 set(CRYPTO_SRC ${CRYPTO_SRC} ui/ui_openssl.c)
578endif() 608endif()
579 609
580if(WIN32) 610if(WIN32)
581 set(CRYPTO_SRC ${CRYPTO_SRC} compat/crypto_lock_win.c) 611 set(CRYPTO_SRC ${CRYPTO_SRC} compat/crypto_lock_win.c)
582 set(CRYPTO_SRC ${CRYPTO_SRC} bio/b_win.c) 612 set(CRYPTO_SRC ${CRYPTO_SRC} bio/b_win.c)
583 set(CRYPTO_UNEXPORT ${CRYPTO_UNEXPORT} BIO_s_log)
584 set(CRYPTO_SRC ${CRYPTO_SRC} ui/ui_openssl_win.c) 613 set(CRYPTO_SRC ${CRYPTO_SRC} ui/ui_openssl_win.c)
585endif() 614endif()
586 615
@@ -736,6 +765,7 @@ add_library(crypto_obj OBJECT ${CRYPTO_SRC})
736target_include_directories(crypto_obj 765target_include_directories(crypto_obj
737 PRIVATE 766 PRIVATE
738 . 767 .
768 aes
739 asn1 769 asn1
740 bio 770 bio
741 bn 771 bn
@@ -774,11 +804,14 @@ elseif(HOST_ARM)
774elseif(HOST_I386) 804elseif(HOST_I386)
775 target_include_directories(crypto_obj PRIVATE arch/i386/) 805 target_include_directories(crypto_obj PRIVATE arch/i386/)
776 target_include_directories(crypto_obj PRIVATE bn/arch/i386/) 806 target_include_directories(crypto_obj PRIVATE bn/arch/i386/)
807elseif(HOST_LOONGARCH64)
808 target_include_directories(crypto_obj PRIVATE arch/loongarch64)
809 target_include_directories(crypto_obj PRIVATE bn/arch/loongarch64)
777elseif(HOST_MIPS64) 810elseif(HOST_MIPS64)
778 target_include_directories(crypto_obj PRIVATE arch/mips64) 811 target_include_directories(crypto_obj PRIVATE arch/mips64)
779 target_include_directories(crypto_obj PRIVATE bn/arch/mips64) 812 target_include_directories(crypto_obj PRIVATE bn/arch/mips64)
780elseif(HOST_MIPS) 813elseif(HOST_MIPS)
781 # XXX - can this go away? the directory doesn't exist... 814 target_include_directories(crypto_obj PRIVATE arch/mips)
782 target_include_directories(crypto_obj PRIVATE bn/arch/mips) 815 target_include_directories(crypto_obj PRIVATE bn/arch/mips)
783elseif(HOST_POWERPC) 816elseif(HOST_POWERPC)
784 target_include_directories(crypto_obj PRIVATE arch/powerpc) 817 target_include_directories(crypto_obj PRIVATE arch/powerpc)
diff --git a/crypto/Makefile.am b/crypto/Makefile.am
index 438da8b..610341a 100644
--- a/crypto/Makefile.am
+++ b/crypto/Makefile.am
@@ -1,6 +1,22 @@
1#
2# Copyright (c) 2014 Brent Cook
3#
4# Permission to use, copy, modify, and distribute this software for any
5# purpose with or without fee is hereby granted, provided that the above
6# copyright notice and this permission notice appear in all copies.
7#
8# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15
1include $(top_srcdir)/Makefile.am.common 16include $(top_srcdir)/Makefile.am.common
2 17
3AM_CPPFLAGS += -DLIBRESSL_CRYPTO_INTERNAL 18AM_CPPFLAGS += -DLIBRESSL_CRYPTO_INTERNAL
19AM_CPPFLAGS += -I$(top_srcdir)/crypto/aes
4AM_CPPFLAGS += -I$(top_srcdir)/crypto/asn1 20AM_CPPFLAGS += -I$(top_srcdir)/crypto/asn1
5AM_CPPFLAGS += -I$(top_srcdir)/crypto/bio 21AM_CPPFLAGS += -I$(top_srcdir)/crypto/bio
6AM_CPPFLAGS += -I$(top_srcdir)/crypto/bn 22AM_CPPFLAGS += -I$(top_srcdir)/crypto/bn
@@ -51,20 +67,18 @@ crypto_portable.sym: crypto.sym Makefile
51 -echo "generating crypto_portable.sym ..." 67 -echo "generating crypto_portable.sym ..."
52 -cp $(top_srcdir)/crypto/crypto.sym crypto_portable.sym 68 -cp $(top_srcdir)/crypto/crypto.sym crypto_portable.sym
53 -chmod u+w crypto_portable.sym 69 -chmod u+w crypto_portable.sym
54if HOST_WIN
55 -grep -v BIO_s_log crypto_portable.sym > crypto_portable.sym.tmp 70 -grep -v BIO_s_log crypto_portable.sym > crypto_portable.sym.tmp
56 -mv crypto_portable.sym.tmp crypto_portable.sym 71 -mv crypto_portable.sym.tmp crypto_portable.sym
57endif
58 72
59libcrypto_la_objects.mk: Makefile 73libcrypto_la_objects.mk: Makefile
60 @echo "libcrypto_la_objects= $(libcrypto_la_OBJECTS)" \ 74 @echo "libcrypto_la_objects= $(libcrypto_la_OBJECTS)" \
61 | sed 's/ */ $$\(abs_top_builddir\)\/crypto\//g' \ 75 | sed 's/ */ $$\(top_builddir\)\/crypto\//g' \
62 > libcrypto_la_objects.mk 76 > libcrypto_la_objects.mk
63 @echo "libcompat_la_objects= $(libcompat_la_OBJECTS)" \ 77 @echo "libcompat_la_objects= $(libcompat_la_OBJECTS)" \
64 | sed 's/compat\// $$\(abs_top_builddir\)\/crypto\/&/g' \ 78 | sed 's/compat\// $$\(top_builddir\)\/crypto\/&/g' \
65 >> libcrypto_la_objects.mk 79 >> libcrypto_la_objects.mk
66 @echo "libcompatnoopt_la_objects= $(libcompatnoopt_la_OBJECTS)" \ 80 @echo "libcompatnoopt_la_objects= $(libcompatnoopt_la_OBJECTS)" \
67 | sed 's/compat\// $$\(abs_top_builddir\)\/crypto\/&/g' \ 81 | sed 's/compat\// $$\(top_builddir\)\/crypto\/&/g' \
68 >> libcrypto_la_objects.mk 82 >> libcrypto_la_objects.mk
69 83
70libcrypto_la_LDFLAGS = -version-info @LIBCRYPTO_VERSION@ -no-undefined -export-symbols crypto_portable.sym 84libcrypto_la_LDFLAGS = -version-info @LIBCRYPTO_VERSION@ -no-undefined -export-symbols crypto_portable.sym
@@ -187,7 +201,6 @@ include Makefile.am.arc4random
187libcrypto_la_SOURCES = 201libcrypto_la_SOURCES =
188EXTRA_libcrypto_la_SOURCES = 202EXTRA_libcrypto_la_SOURCES =
189 203
190include Makefile.am.elf-arm
191include Makefile.am.elf-mips 204include Makefile.am.elf-mips
192include Makefile.am.elf-mips64 205include Makefile.am.elf-mips64
193include Makefile.am.elf-x86_64 206include Makefile.am.elf-x86_64
@@ -195,7 +208,6 @@ include Makefile.am.macosx-x86_64
195include Makefile.am.masm-x86_64 208include Makefile.am.masm-x86_64
196include Makefile.am.mingw64-x86_64 209include Makefile.am.mingw64-x86_64
197 210
198if !HOST_ASM_ELF_ARM
199if !HOST_ASM_ELF_MIPS 211if !HOST_ASM_ELF_MIPS
200if !HOST_ASM_ELF_MIPS64 212if !HOST_ASM_ELF_MIPS64
201if !HOST_ASM_ELF_X86_64 213if !HOST_ASM_ELF_X86_64
@@ -209,11 +221,23 @@ endif
209endif 221endif
210endif 222endif
211endif 223endif
212endif
213 224
214if HOST_AARCH64 225if HOST_AARCH64
226if HOST_DARWIN
227libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps_darwin.c
228else
229if HOST_LINUX
230libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps_linux.c
231else
232if HOST_OPENBSD
215libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps.c 233libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps.c
234else
235libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps_none.c
236endif
216endif 237endif
238endif
239endif
240
217if HOST_X86_64 241if HOST_X86_64
218libcrypto_la_SOURCES += arch/amd64/crypto_cpu_caps.c 242libcrypto_la_SOURCES += arch/amd64/crypto_cpu_caps.c
219endif 243endif
@@ -231,7 +255,6 @@ else
231libcrypto_la_SOURCES += compat/crypto_lock_win.c 255libcrypto_la_SOURCES += compat/crypto_lock_win.c
232endif 256endif
233libcrypto_la_SOURCES += crypto_memory.c 257libcrypto_la_SOURCES += crypto_memory.c
234noinst_HEADERS += arm_arch.h
235noinst_HEADERS += constant_time.h 258noinst_HEADERS += constant_time.h
236noinst_HEADERS += crypto_internal.h 259noinst_HEADERS += crypto_internal.h
237noinst_HEADERS += crypto_local.h 260noinst_HEADERS += crypto_local.h
@@ -240,7 +263,6 @@ noinst_HEADERS += x86_arch.h
240# aes 263# aes
241libcrypto_la_SOURCES += aes/aes.c 264libcrypto_la_SOURCES += aes/aes.c
242libcrypto_la_SOURCES += aes/aes_core.c 265libcrypto_la_SOURCES += aes/aes_core.c
243libcrypto_la_SOURCES += aes/aes_ige.c
244noinst_HEADERS += aes/aes_local.h 266noinst_HEADERS += aes/aes_local.h
245 267
246# asn1 268# asn1
@@ -293,10 +315,8 @@ libcrypto_la_SOURCES += asn1/x_attrib.c
293libcrypto_la_SOURCES += asn1/x_bignum.c 315libcrypto_la_SOURCES += asn1/x_bignum.c
294libcrypto_la_SOURCES += asn1/x_crl.c 316libcrypto_la_SOURCES += asn1/x_crl.c
295libcrypto_la_SOURCES += asn1/x_exten.c 317libcrypto_la_SOURCES += asn1/x_exten.c
296libcrypto_la_SOURCES += asn1/x_info.c
297libcrypto_la_SOURCES += asn1/x_long.c 318libcrypto_la_SOURCES += asn1/x_long.c
298libcrypto_la_SOURCES += asn1/x_name.c 319libcrypto_la_SOURCES += asn1/x_name.c
299libcrypto_la_SOURCES += asn1/x_pkey.c
300libcrypto_la_SOURCES += asn1/x_pubkey.c 320libcrypto_la_SOURCES += asn1/x_pubkey.c
301libcrypto_la_SOURCES += asn1/x_req.c 321libcrypto_la_SOURCES += asn1/x_req.c
302libcrypto_la_SOURCES += asn1/x_sig.c 322libcrypto_la_SOURCES += asn1/x_sig.c
@@ -334,9 +354,6 @@ libcrypto_la_SOURCES += bio/bss_conn.c
334libcrypto_la_SOURCES += bio/bss_dgram.c 354libcrypto_la_SOURCES += bio/bss_dgram.c
335libcrypto_la_SOURCES += bio/bss_fd.c 355libcrypto_la_SOURCES += bio/bss_fd.c
336libcrypto_la_SOURCES += bio/bss_file.c 356libcrypto_la_SOURCES += bio/bss_file.c
337if !HOST_WIN
338libcrypto_la_SOURCES += bio/bss_log.c
339endif
340libcrypto_la_SOURCES += bio/bss_mem.c 357libcrypto_la_SOURCES += bio/bss_mem.c
341libcrypto_la_SOURCES += bio/bss_null.c 358libcrypto_la_SOURCES += bio/bss_null.c
342libcrypto_la_SOURCES += bio/bss_sock.c 359libcrypto_la_SOURCES += bio/bss_sock.c
@@ -344,6 +361,7 @@ noinst_HEADERS += bio/bio_local.h
344 361
345# bn 362# bn
346libcrypto_la_SOURCES += bn/bn_add.c 363libcrypto_la_SOURCES += bn/bn_add.c
364libcrypto_la_SOURCES += bn/bn_add_sub.c
347libcrypto_la_SOURCES += bn/bn_bpsw.c 365libcrypto_la_SOURCES += bn/bn_bpsw.c
348libcrypto_la_SOURCES += bn/bn_const.c 366libcrypto_la_SOURCES += bn/bn_const.c
349libcrypto_la_SOURCES += bn/bn_convert.c 367libcrypto_la_SOURCES += bn/bn_convert.c
@@ -357,6 +375,7 @@ libcrypto_la_SOURCES += bn/bn_kron.c
357libcrypto_la_SOURCES += bn/bn_lib.c 375libcrypto_la_SOURCES += bn/bn_lib.c
358libcrypto_la_SOURCES += bn/bn_mod.c 376libcrypto_la_SOURCES += bn/bn_mod.c
359libcrypto_la_SOURCES += bn/bn_mod_sqrt.c 377libcrypto_la_SOURCES += bn/bn_mod_sqrt.c
378libcrypto_la_SOURCES += bn/bn_mod_words.c
360libcrypto_la_SOURCES += bn/bn_mont.c 379libcrypto_la_SOURCES += bn/bn_mont.c
361libcrypto_la_SOURCES += bn/bn_mul.c 380libcrypto_la_SOURCES += bn/bn_mul.c
362libcrypto_la_SOURCES += bn/bn_prime.c 381libcrypto_la_SOURCES += bn/bn_prime.c
@@ -396,10 +415,18 @@ endif
396noinst_HEADERS += arch/i386/crypto_arch.h 415noinst_HEADERS += arch/i386/crypto_arch.h
397noinst_HEADERS += bn/arch/i386/bn_arch.h 416noinst_HEADERS += bn/arch/i386/bn_arch.h
398 417
399# XXX - do we still need this? 418if HOST_LOONGARCH64
419libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/loongarch64/
420libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/loongarch64/
421endif
422noinst_HEADERS += arch/loongarch64/crypto_arch.h
423noinst_HEADERS += bn/arch/loongarch64/bn_arch.h
424
400if HOST_MIPS 425if HOST_MIPS
426libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/mips/
401libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/mips/ 427libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/mips/
402endif 428endif
429noinst_HEADERS += arch/mips/crypto_arch.h
403noinst_HEADERS += bn/arch/mips/bn_arch.h 430noinst_HEADERS += bn/arch/mips/bn_arch.h
404 431
405if HOST_MIPS64 432if HOST_MIPS64
@@ -554,13 +581,16 @@ libcrypto_la_SOURCES += ec/ec_asn1.c
554libcrypto_la_SOURCES += ec/ec_convert.c 581libcrypto_la_SOURCES += ec/ec_convert.c
555libcrypto_la_SOURCES += ec/ec_curve.c 582libcrypto_la_SOURCES += ec/ec_curve.c
556libcrypto_la_SOURCES += ec/ec_err.c 583libcrypto_la_SOURCES += ec/ec_err.c
584libcrypto_la_SOURCES += ec/ec_field.c
557libcrypto_la_SOURCES += ec/ec_key.c 585libcrypto_la_SOURCES += ec/ec_key.c
558libcrypto_la_SOURCES += ec/ec_lib.c 586libcrypto_la_SOURCES += ec/ec_lib.c
559libcrypto_la_SOURCES += ec/ec_mult.c 587libcrypto_la_SOURCES += ec/ec_mult.c
560libcrypto_la_SOURCES += ec/ec_pmeth.c 588libcrypto_la_SOURCES += ec/ec_pmeth.c
561libcrypto_la_SOURCES += ec/eck_prn.c 589libcrypto_la_SOURCES += ec/eck_prn.c
590libcrypto_la_SOURCES += ec/ecp_hp_methods.c
562libcrypto_la_SOURCES += ec/ecp_methods.c 591libcrypto_la_SOURCES += ec/ecp_methods.c
563libcrypto_la_SOURCES += ec/ecx_methods.c 592libcrypto_la_SOURCES += ec/ecx_methods.c
593noinst_HEADERS += ec/ec_internal.h
564noinst_HEADERS += ec/ec_local.h 594noinst_HEADERS += ec/ec_local.h
565 595
566# ecdh 596# ecdh
@@ -708,9 +738,10 @@ libcrypto_la_SOURCES += md4/md4.c
708libcrypto_la_SOURCES += md5/md5.c 738libcrypto_la_SOURCES += md5/md5.c
709 739
710# mlkem 740# mlkem
711libcrypto_la_SOURCES += mlkem/mlkem768.c 741libcrypto_la_SOURCES += mlkem/mlkem.c
712libcrypto_la_SOURCES += mlkem/mlkem1024.c 742libcrypto_la_SOURCES += mlkem/mlkem1024.c
713noinst_HEADERS += mlkem/mlkem.h 743libcrypto_la_SOURCES += mlkem/mlkem768.c
744libcrypto_la_SOURCES += mlkem/mlkem_key.c
714noinst_HEADERS += mlkem/mlkem_internal.h 745noinst_HEADERS += mlkem/mlkem_internal.h
715 746
716# modes 747# modes
@@ -792,11 +823,7 @@ libcrypto_la_SOURCES += rand/rand_lib.c
792libcrypto_la_SOURCES += rand/randfile.c 823libcrypto_la_SOURCES += rand/randfile.c
793 824
794# rc2 825# rc2
795libcrypto_la_SOURCES += rc2/rc2_cbc.c 826libcrypto_la_SOURCES += rc2/rc2.c
796libcrypto_la_SOURCES += rc2/rc2_ecb.c
797libcrypto_la_SOURCES += rc2/rc2_skey.c
798libcrypto_la_SOURCES += rc2/rc2cfb64.c
799libcrypto_la_SOURCES += rc2/rc2ofb64.c
800noinst_HEADERS += rc2/rc2_local.h 827noinst_HEADERS += rc2/rc2_local.h
801 828
802# rc4 829# rc4
diff --git a/crypto/Makefile.am.elf-arm b/crypto/Makefile.am.elf-arm
deleted file mode 100644
index 6a9fa50..0000000
--- a/crypto/Makefile.am.elf-arm
+++ /dev/null
@@ -1,18 +0,0 @@
1ASM_ARM_ELF = aes/aes-elf-armv4.S
2ASM_ARM_ELF += bn/mont-elf-armv4.S
3ASM_ARM_ELF += sha/sha1-elf-armv4.S
4ASM_ARM_ELF += sha/sha512-elf-armv4.S
5ASM_ARM_ELF += sha/sha256-elf-armv4.S
6ASM_ARM_ELF += modes/ghash-elf-armv4.S
7ASM_ARM_ELF += armv4cpuid.S
8ASM_ARM_ELF += armcap.c
9
10EXTRA_DIST += $(ASM_ARM_ELF)
11
12if HOST_ASM_ELF_ARM
13libcrypto_la_CPPFLAGS += -DAES_ASM
14libcrypto_la_CPPFLAGS += -DOPENSSL_BN_ASM_MONT
15libcrypto_la_CPPFLAGS += -DGHASH_ASM
16libcrypto_la_CPPFLAGS += -DOPENSSL_CPUID_OBJ
17libcrypto_la_SOURCES += $(ASM_ARM_ELF)
18endif
diff --git a/crypto/Makefile.am.elf-x86_64 b/crypto/Makefile.am.elf-x86_64
index c62662c..df67ad2 100644
--- a/crypto/Makefile.am.elf-x86_64
+++ b/crypto/Makefile.am.elf-x86_64
@@ -1,7 +1,5 @@
1 1
2ASM_X86_64_ELF = aes/aes-elf-x86_64.S 2ASM_X86_64_ELF = aes/aes-elf-x86_64.S
3ASM_X86_64_ELF += aes/bsaes-elf-x86_64.S
4ASM_X86_64_ELF += aes/vpaes-elf-x86_64.S
5ASM_X86_64_ELF += aes/aesni-elf-x86_64.S 3ASM_X86_64_ELF += aes/aesni-elf-x86_64.S
6ASM_X86_64_ELF += bn/modexp512-elf-x86_64.S 4ASM_X86_64_ELF += bn/modexp512-elf-x86_64.S
7ASM_X86_64_ELF += bn/mont-elf-x86_64.S 5ASM_X86_64_ELF += bn/mont-elf-x86_64.S
@@ -12,19 +10,32 @@ ASM_X86_64_ELF += rc4/rc4-elf-x86_64.S
12ASM_X86_64_ELF += bn/arch/amd64/bignum_add.S 10ASM_X86_64_ELF += bn/arch/amd64/bignum_add.S
13ASM_X86_64_ELF += bn/arch/amd64/bignum_cmadd.S 11ASM_X86_64_ELF += bn/arch/amd64/bignum_cmadd.S
14ASM_X86_64_ELF += bn/arch/amd64/bignum_cmul.S 12ASM_X86_64_ELF += bn/arch/amd64/bignum_cmul.S
13ASM_X86_64_ELF += bn/arch/amd64/bignum_modadd.S
14ASM_X86_64_ELF += bn/arch/amd64/bignum_modsub.S
15ASM_X86_64_ELF += bn/arch/amd64/bignum_mul.S 15ASM_X86_64_ELF += bn/arch/amd64/bignum_mul.S
16ASM_X86_64_ELF += bn/arch/amd64/bignum_mul_4_8.S
16ASM_X86_64_ELF += bn/arch/amd64/bignum_mul_4_8_alt.S 17ASM_X86_64_ELF += bn/arch/amd64/bignum_mul_4_8_alt.S
18ASM_X86_64_ELF += bn/arch/amd64/bignum_mul_6_12.S
19ASM_X86_64_ELF += bn/arch/amd64/bignum_mul_6_12_alt.S
20ASM_X86_64_ELF += bn/arch/amd64/bignum_mul_8_16.S
17ASM_X86_64_ELF += bn/arch/amd64/bignum_mul_8_16_alt.S 21ASM_X86_64_ELF += bn/arch/amd64/bignum_mul_8_16_alt.S
18ASM_X86_64_ELF += bn/arch/amd64/bignum_sqr.S 22ASM_X86_64_ELF += bn/arch/amd64/bignum_sqr.S
23ASM_X86_64_ELF += bn/arch/amd64/bignum_sqr_4_8.S
19ASM_X86_64_ELF += bn/arch/amd64/bignum_sqr_4_8_alt.S 24ASM_X86_64_ELF += bn/arch/amd64/bignum_sqr_4_8_alt.S
25ASM_X86_64_ELF += bn/arch/amd64/bignum_sqr_6_12.S
26ASM_X86_64_ELF += bn/arch/amd64/bignum_sqr_6_12_alt.S
27ASM_X86_64_ELF += bn/arch/amd64/bignum_sqr_8_16.S
20ASM_X86_64_ELF += bn/arch/amd64/bignum_sqr_8_16_alt.S 28ASM_X86_64_ELF += bn/arch/amd64/bignum_sqr_8_16_alt.S
21ASM_X86_64_ELF += bn/arch/amd64/bignum_sub.S 29ASM_X86_64_ELF += bn/arch/amd64/bignum_sub.S
22ASM_X86_64_ELF += bn/arch/amd64/word_clz.S 30ASM_X86_64_ELF += bn/arch/amd64/word_clz.S
23ASM_X86_64_ELF += bn/arch/amd64/bn_arch.c
24 31
25EXTRA_DIST += $(ASM_X86_64_ELF) 32EXTRA_DIST += $(ASM_X86_64_ELF)
26 33
27if HOST_ASM_ELF_X86_64 34if HOST_ASM_ELF_X86_64
35libcrypto_la_SOURCES += aes/aes_amd64.c
36libcrypto_la_SOURCES += bn/arch/amd64/bn_arch.c
37libcrypto_la_SOURCES += modes/gcm128_amd64.c
38
28libcrypto_la_CPPFLAGS += -DAES_ASM 39libcrypto_la_CPPFLAGS += -DAES_ASM
29libcrypto_la_CPPFLAGS += -DBSAES_ASM 40libcrypto_la_CPPFLAGS += -DBSAES_ASM
30libcrypto_la_CPPFLAGS += -DVPAES_ASM 41libcrypto_la_CPPFLAGS += -DVPAES_ASM
diff --git a/crypto/Makefile.am.macosx-x86_64 b/crypto/Makefile.am.macosx-x86_64
index 010e3be..23e27e6 100644
--- a/crypto/Makefile.am.macosx-x86_64
+++ b/crypto/Makefile.am.macosx-x86_64
@@ -1,7 +1,5 @@
1 1
2ASM_X86_64_MACOSX = aes/aes-macosx-x86_64.S 2ASM_X86_64_MACOSX = aes/aes-macosx-x86_64.S
3ASM_X86_64_MACOSX += aes/bsaes-macosx-x86_64.S
4ASM_X86_64_MACOSX += aes/vpaes-macosx-x86_64.S
5ASM_X86_64_MACOSX += aes/aesni-macosx-x86_64.S 3ASM_X86_64_MACOSX += aes/aesni-macosx-x86_64.S
6ASM_X86_64_MACOSX += bn/modexp512-macosx-x86_64.S 4ASM_X86_64_MACOSX += bn/modexp512-macosx-x86_64.S
7ASM_X86_64_MACOSX += bn/mont-macosx-x86_64.S 5ASM_X86_64_MACOSX += bn/mont-macosx-x86_64.S
@@ -12,19 +10,32 @@ ASM_X86_64_MACOSX += rc4/rc4-macosx-x86_64.S
12ASM_X86_64_MACOSX += bn/arch/amd64/bignum_add.S 10ASM_X86_64_MACOSX += bn/arch/amd64/bignum_add.S
13ASM_X86_64_MACOSX += bn/arch/amd64/bignum_cmadd.S 11ASM_X86_64_MACOSX += bn/arch/amd64/bignum_cmadd.S
14ASM_X86_64_MACOSX += bn/arch/amd64/bignum_cmul.S 12ASM_X86_64_MACOSX += bn/arch/amd64/bignum_cmul.S
13ASM_X86_64_MACOSX += bn/arch/amd64/bignum_modadd.S
14ASM_X86_64_MACOSX += bn/arch/amd64/bignum_modsub.S
15ASM_X86_64_MACOSX += bn/arch/amd64/bignum_mul.S 15ASM_X86_64_MACOSX += bn/arch/amd64/bignum_mul.S
16ASM_X86_64_MACOSX += bn/arch/amd64/bignum_mul_4_8.S
16ASM_X86_64_MACOSX += bn/arch/amd64/bignum_mul_4_8_alt.S 17ASM_X86_64_MACOSX += bn/arch/amd64/bignum_mul_4_8_alt.S
18ASM_X86_64_MACOSX += bn/arch/amd64/bignum_mul_6_12.S
19ASM_X86_64_MACOSX += bn/arch/amd64/bignum_mul_6_12_alt.S
20ASM_X86_64_MACOSX += bn/arch/amd64/bignum_mul_8_16.S
17ASM_X86_64_MACOSX += bn/arch/amd64/bignum_mul_8_16_alt.S 21ASM_X86_64_MACOSX += bn/arch/amd64/bignum_mul_8_16_alt.S
18ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sqr.S 22ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sqr.S
23ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sqr_4_8.S
19ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sqr_4_8_alt.S 24ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sqr_4_8_alt.S
25ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sqr_6_12.S
26ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sqr_6_12_alt.S
27ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sqr_8_16.S
20ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sqr_8_16_alt.S 28ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sqr_8_16_alt.S
21ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sub.S 29ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sub.S
22ASM_X86_64_MACOSX += bn/arch/amd64/word_clz.S 30ASM_X86_64_MACOSX += bn/arch/amd64/word_clz.S
23ASM_X86_64_MACOSX += bn/arch/amd64/bn_arch.c
24 31
25EXTRA_DIST += $(ASM_X86_64_MACOSX) 32EXTRA_DIST += $(ASM_X86_64_MACOSX)
26 33
27if HOST_ASM_MACOSX_X86_64 34if HOST_ASM_MACOSX_X86_64
35libcrypto_la_SOURCES += aes/aes_amd64.c
36libcrypto_la_SOURCES += bn/arch/amd64/bn_arch.c
37libcrypto_la_SOURCES += modes/gcm128_amd64.c
38
28libcrypto_la_CPPFLAGS += -DAES_ASM 39libcrypto_la_CPPFLAGS += -DAES_ASM
29libcrypto_la_CPPFLAGS += -DBSAES_ASM 40libcrypto_la_CPPFLAGS += -DBSAES_ASM
30libcrypto_la_CPPFLAGS += -DVPAES_ASM 41libcrypto_la_CPPFLAGS += -DVPAES_ASM
diff --git a/crypto/Makefile.am.masm-x86_64 b/crypto/Makefile.am.masm-x86_64
index 2ef7e1b..bb94e3a 100644
--- a/crypto/Makefile.am.masm-x86_64
+++ b/crypto/Makefile.am.masm-x86_64
@@ -1,7 +1,5 @@
1 1
2ASM_X86_64_MASM = aes/aes-masm-x86_64.S 2ASM_X86_64_MASM = aes/aes-masm-x86_64.S
3ASM_X86_64_MASM += aes/bsaes-masm-x86_64.S
4ASM_X86_64_MASM += aes/vpaes-masm-x86_64.S
5ASM_X86_64_MASM += aes/aesni-masm-x86_64.S 3ASM_X86_64_MASM += aes/aesni-masm-x86_64.S
6ASM_X86_64_MASM += bn/modexp512-masm-x86_64.S 4ASM_X86_64_MASM += bn/modexp512-masm-x86_64.S
7ASM_X86_64_MASM += bn/mont-masm-x86_64.S 5ASM_X86_64_MASM += bn/mont-masm-x86_64.S
@@ -12,6 +10,9 @@ ASM_X86_64_MASM += rc4/rc4-masm-x86_64.S
12EXTRA_DIST += $(ASM_X86_64_MASM) 10EXTRA_DIST += $(ASM_X86_64_MASM)
13 11
14if HOST_ASM_MASM_X86_64 12if HOST_ASM_MASM_X86_64
13libcrypto_la_SOURCES += aes/aes_amd64.c
14libcrypto_la_SOURCES += modes/gcm128_amd64.c
15
15libcrypto_la_CPPFLAGS += -DAES_ASM 16libcrypto_la_CPPFLAGS += -DAES_ASM
16libcrypto_la_CPPFLAGS += -DBSAES_ASM 17libcrypto_la_CPPFLAGS += -DBSAES_ASM
17libcrypto_la_CPPFLAGS += -DVPAES_ASM 18libcrypto_la_CPPFLAGS += -DVPAES_ASM
diff --git a/crypto/Makefile.am.mingw64-x86_64 b/crypto/Makefile.am.mingw64-x86_64
index 8e39e9f..efe2643 100644
--- a/crypto/Makefile.am.mingw64-x86_64
+++ b/crypto/Makefile.am.mingw64-x86_64
@@ -1,7 +1,5 @@
1 1
2ASM_X86_64_MINGW64 = aes/aes-mingw64-x86_64.S 2ASM_X86_64_MINGW64 = aes/aes-mingw64-x86_64.S
3ASM_X86_64_MINGW64 += aes/bsaes-mingw64-x86_64.S
4ASM_X86_64_MINGW64 += aes/vpaes-mingw64-x86_64.S
5ASM_X86_64_MINGW64 += aes/aesni-mingw64-x86_64.S 3ASM_X86_64_MINGW64 += aes/aesni-mingw64-x86_64.S
6#ASM_X86_64_MINGW64 += bn/modexp512-mingw64-x86_64.S 4#ASM_X86_64_MINGW64 += bn/modexp512-mingw64-x86_64.S
7#ASM_X86_64_MINGW64 += bn/mont-mingw64-x86_64.S 5#ASM_X86_64_MINGW64 += bn/mont-mingw64-x86_64.S
@@ -12,6 +10,9 @@ ASM_X86_64_MINGW64 += rc4/rc4-mingw64-x86_64.S
12EXTRA_DIST += $(ASM_X86_64_MINGW64) 10EXTRA_DIST += $(ASM_X86_64_MINGW64)
13 11
14if HOST_ASM_MINGW64_X86_64 12if HOST_ASM_MINGW64_X86_64
13libcrypto_la_SOURCES += aes/aes_amd64.c
14libcrypto_la_SOURCES += modes/gcm128_amd64.c
15
15libcrypto_la_CPPFLAGS += -Dendbr32=endbr64 16libcrypto_la_CPPFLAGS += -Dendbr32=endbr64
16libcrypto_la_CPPFLAGS += -DAES_ASM 17libcrypto_la_CPPFLAGS += -DAES_ASM
17libcrypto_la_CPPFLAGS += -DBSAES_ASM 18libcrypto_la_CPPFLAGS += -DBSAES_ASM
diff --git a/crypto/arch/aarch64/crypto_cpu_caps_darwin.c b/crypto/arch/aarch64/crypto_cpu_caps_darwin.c
new file mode 100644
index 0000000..1dd91b2
--- /dev/null
+++ b/crypto/arch/aarch64/crypto_cpu_caps_darwin.c
@@ -0,0 +1,60 @@
1/* $OpenBSD: crypto_cpu_caps.c,v 1.2 2024/11/12 13:52:31 jsing Exp $ */
2/*
3 * Copyright (c) 2025 Brent Cook <bcook@openbsd.org>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18#include <sys/sysctl.h>
19
20#include "crypto_arch.h"
21
22/* Machine dependent CPU capabilities. */
23uint64_t crypto_cpu_caps_aarch64;
24
25static uint64_t
26check_cpu_cap(const char *cap_name, uint64_t cap_flag)
27{
28 int has_cap = 0;
29 size_t len = sizeof(has_cap);
30
31 sysctlbyname(cap_name, &has_cap, &len, NULL, 0);
32
33 return has_cap ? cap_flag : 0;
34}
35
36void
37crypto_cpu_caps_init(void)
38{
39 crypto_cpu_caps_aarch64 = 0;
40
41 /* from https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics#3918855 */
42
43 crypto_cpu_caps_aarch64 |= check_cpu_cap("hw.optional.arm.FEAT_AES",
44 CRYPTO_CPU_CAPS_AARCH64_AES);
45
46 crypto_cpu_caps_aarch64 |= check_cpu_cap("hw.optional.arm.FEAT_PMULL",
47 CRYPTO_CPU_CAPS_AARCH64_PMULL);
48
49 crypto_cpu_caps_aarch64 |= check_cpu_cap("hw.optional.arm.FEAT_SHA1",
50 CRYPTO_CPU_CAPS_AARCH64_SHA1);
51
52 crypto_cpu_caps_aarch64 |= check_cpu_cap("hw.optional.arm.FEAT_SHA256",
53 CRYPTO_CPU_CAPS_AARCH64_SHA2);
54
55 crypto_cpu_caps_aarch64 |= check_cpu_cap("hw.optional.arm.FEAT_SHA512",
56 CRYPTO_CPU_CAPS_AARCH64_SHA512);
57
58 crypto_cpu_caps_aarch64 |= check_cpu_cap("hw.optional.arm.FEAT_SHA3",
59 CRYPTO_CPU_CAPS_AARCH64_SHA3);
60}
diff --git a/crypto/arch/aarch64/crypto_cpu_caps_linux.c b/crypto/arch/aarch64/crypto_cpu_caps_linux.c
new file mode 100644
index 0000000..ae28120
--- /dev/null
+++ b/crypto/arch/aarch64/crypto_cpu_caps_linux.c
@@ -0,0 +1,62 @@
1/* $OpenBSD: crypto_cpu_caps.c,v 1.2 2024/11/12 13:52:31 jsing Exp $ */
2/*
3 * Copyright (c) 2025 Brent Cook <bcook@openbsd.org>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18#include <sys/auxv.h>
19
20/* from arch/arm64/include/uapi/asm/hwcap.h */
21#define HWCAP_AES (1 << 3)
22#define HWCAP_PMULL (1 << 4)
23#define HWCAP_SHA1 (1 << 5)
24#define HWCAP_SHA2 (1 << 6)
25#define HWCAP_CRC32 (1 << 7)
26#define HWCAP_SHA3 (1 << 17)
27#define HWCAP_SHA512 (1 << 21)
28
29#include "crypto_arch.h"
30
31/* Machine dependent CPU capabilities. */
32uint64_t crypto_cpu_caps_aarch64;
33
34static uint64_t
35check_cpu_cap(unsigned long hwcap, uint64_t cap_flag)
36{
37 return (getauxval(AT_HWCAP) & hwcap) ? cap_flag : 0;
38}
39
40void
41crypto_cpu_caps_init(void)
42{
43 crypto_cpu_caps_aarch64 = 0;
44
45 crypto_cpu_caps_aarch64 |= check_cpu_cap(HWCAP_AES,
46 CRYPTO_CPU_CAPS_AARCH64_AES);
47
48 crypto_cpu_caps_aarch64 |= check_cpu_cap(HWCAP_PMULL,
49 CRYPTO_CPU_CAPS_AARCH64_PMULL);
50
51 crypto_cpu_caps_aarch64 |= check_cpu_cap(HWCAP_SHA1,
52 CRYPTO_CPU_CAPS_AARCH64_SHA1);
53
54 crypto_cpu_caps_aarch64 |= check_cpu_cap(HWCAP_SHA2,
55 CRYPTO_CPU_CAPS_AARCH64_SHA2);
56
57 crypto_cpu_caps_aarch64 |= check_cpu_cap(HWCAP_SHA512,
58 CRYPTO_CPU_CAPS_AARCH64_SHA512);
59
60 crypto_cpu_caps_aarch64 |= check_cpu_cap(HWCAP_SHA3,
61 CRYPTO_CPU_CAPS_AARCH64_SHA3);
62}
diff --git a/crypto/arch/aarch64/crypto_cpu_caps_none.c b/crypto/arch/aarch64/crypto_cpu_caps_none.c
new file mode 100644
index 0000000..dcd96b7
--- /dev/null
+++ b/crypto/arch/aarch64/crypto_cpu_caps_none.c
@@ -0,0 +1,26 @@
1/*
2 * Copyright (c) 2025 Brent Cook <bcook@openbsd.org>
3 *
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17#include "crypto_arch.h"
18
19/* Machine dependent CPU capabilities. */
20uint64_t crypto_cpu_caps_aarch64;
21
22void
23crypto_cpu_caps_init(void)
24{
25 crypto_cpu_caps_aarch64 = 0;
26}
diff --git a/crypto/arch/aarch64/crypto_cpu_caps_windows.c b/crypto/arch/aarch64/crypto_cpu_caps_windows.c
new file mode 100644
index 0000000..e7cdded
--- /dev/null
+++ b/crypto/arch/aarch64/crypto_cpu_caps_windows.c
@@ -0,0 +1,36 @@
1/* $OpenBSD: crypto_cpu_caps.c,v 1.2 2024/11/12 13:52:31 jsing Exp $ */
2/*
3 * Copyright (c) 2025 Brent Cook <bcook@openbsd.org>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18#include <windows.h>
19
20#include "crypto_arch.h"
21
22/* Machine dependent CPU capabilities. */
23uint64_t crypto_cpu_caps_aarch64;
24
25void
26crypto_cpu_caps_init(void)
27{
28 crypto_cpu_caps_aarch64 = 0;
29
30 if (IsProcessorFeaturePresent(PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE)) {
31 crypto_cpu_caps_aarch64 |= CRYPTO_CPU_CAPS_AARCH64_AES;
32 crypto_cpu_caps_aarch64 |= CRYPTO_CPU_CAPS_AARCH64_PMULL;
33 crypto_cpu_caps_aarch64 |= CRYPTO_CPU_CAPS_AARCH64_SHA1;
34 crypto_cpu_caps_aarch64 |= CRYPTO_CPU_CAPS_AARCH64_SHA2;
35 }
36}
diff --git a/crypto/arch/loongarch64/crypto_arch.h b/crypto/arch/loongarch64/crypto_arch.h
new file mode 100644
index 0000000..a3dd98d
--- /dev/null
+++ b/crypto/arch/loongarch64/crypto_arch.h
@@ -0,0 +1,21 @@
1/* $OpenBSD: crypto_arch.h,v 1.1 2024/08/11 13:02:39 jsing Exp $ */
2/*
3 * Copyright (c) 2024 Joel Sing <jsing@openbsd.org>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18#ifndef HEADER_CRYPTO_ARCH_H
19#define HEADER_CRYPTO_ARCH_H
20
21#endif
diff --git a/crypto/arch/mips/crypto_arch.h b/crypto/arch/mips/crypto_arch.h
new file mode 100644
index 0000000..274879c
--- /dev/null
+++ b/crypto/arch/mips/crypto_arch.h
@@ -0,0 +1,21 @@
1/* $OpenBSD$ */
2/*
3 * Copyright (c) 2024 Joel Sing <jsing@openbsd.org>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18#ifndef HEADER_CRYPTO_ARCH_H
19#define HEADER_CRYPTO_ARCH_H
20
21#endif
diff --git a/crypto/bn/arch/loongarch64/bn_arch.h b/crypto/bn/arch/loongarch64/bn_arch.h
new file mode 100644
index 0000000..672ac12
--- /dev/null
+++ b/crypto/bn/arch/loongarch64/bn_arch.h
@@ -0,0 +1,23 @@
1/* $OpenBSD: bn_arch.h,v 1.7 2023/07/09 10:37:32 jsing Exp $ */
2/*
3 * Copyright (c) 2023 Joel Sing <jsing@openbsd.org>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18#include <openssl/bn.h>
19
20#ifndef HEADER_BN_ARCH_H
21#define HEADER_BN_ARCH_H
22
23#endif
diff --git a/crypto/compat/.gitignore b/crypto/compat/.gitignore
new file mode 100644
index 0000000..7f05049
--- /dev/null
+++ b/crypto/compat/.gitignore
@@ -0,0 +1,31 @@
1arc4random.c
2arc4random_aix.h
3arc4random_freebsd.h
4arc4random_hpux.h
5arc4random_linux.h
6arc4random_netbsd.h
7arc4random_osx.h
8arc4random_solaris.h
9arc4random_uniform.c
10arc4random_win.h
11chacha_private.h
12explicit_bzero.c
13getentropy_aix.c
14getentropy_freebsd.c
15getentropy_hpux.c
16getentropy_linux.c
17getentropy_netbsd.c
18getentropy_osx.c
19getentropy_solaris.c
20getentropy_win.c
21reallocarray.c
22recallocarray.c
23strcasecmp.c
24strlcat.c
25strlcpy.c
26strndup.c
27strnlen.c
28strsep.c
29strtonum.c
30timingsafe_bcmp.c
31timingsafe_memcmp.c
diff --git a/crypto/compat/b_win.c b/crypto/compat/b_win.c
index e261cd2..45af839 100644
--- a/crypto/compat/b_win.c
+++ b/crypto/compat/b_win.c
@@ -8,7 +8,8 @@
8#include <ws2tcpip.h> 8#include <ws2tcpip.h>
9 9
10#include <openssl/bio.h> 10#include <openssl/bio.h>
11#include <openssl/err.h> 11
12#include "err_local.h"
12 13
13int 14int
14BIO_sock_init(void) 15BIO_sock_init(void)
@@ -29,7 +30,7 @@ BIO_sock_init(void)
29 } 30 }
30 wsa_init_done = 1; 31 wsa_init_done = 1;
31 } 32 }
32 return (1); 33 return (1);
33} 34}
34 35
35void 36void
diff --git a/crypto/compat/posix_win.c b/crypto/compat/posix_win.c
index 1fbfce1..572e527 100644
--- a/crypto/compat/posix_win.c
+++ b/crypto/compat/posix_win.c
@@ -22,6 +22,25 @@
22#include <string.h> 22#include <string.h>
23#include <unistd.h> 23#include <unistd.h>
24 24
25#include <sys/stat.h>
26
27static int
28is_socket(int fd)
29{
30 // Border case: Don't break std* file descriptors
31 if (fd < 3)
32 return 0;
33
34 // All locally-allocated file descriptors will have the high bit set
35 return (fd & 0x80000000) == 0;
36}
37
38static int
39get_real_fd(int fd)
40{
41 return (fd & 0x7fffffff);
42}
43
25void 44void
26posix_perror(const char *s) 45posix_perror(const char *s)
27{ 46{
@@ -44,6 +63,12 @@ posix_fopen(const char *path, const char *mode)
44} 63}
45 64
46int 65int
66libressl_fstat(int fd, struct stat *statbuf)
67{
68 return fstat(get_real_fd(fd), statbuf);
69}
70
71int
47posix_open(const char *path, ...) 72posix_open(const char *path, ...)
48{ 73{
49 va_list ap; 74 va_list ap;
@@ -62,7 +87,11 @@ posix_open(const char *path, ...)
62 flags |= O_NOINHERIT; 87 flags |= O_NOINHERIT;
63 } 88 }
64 flags &= ~O_NONBLOCK; 89 flags &= ~O_NONBLOCK;
65 return open(path, flags, mode); 90
91 const int fh = open(path, flags, mode);
92
93 // Set high bit to mark file descriptor as a file handle
94 return fh + 0x80000000;
66} 95}
67 96
68char * 97char *
@@ -150,52 +179,6 @@ wsa_errno(int err)
150 return -1; 179 return -1;
151} 180}
152 181
153/*
154 * Employ a similar trick to cpython (pycore_fileutils.h) where the CRT report
155 * handler is disabled while checking if a descriptor is a socket or a file
156 */
157#if defined _MSC_VER && _MSC_VER >= 1900
158
159#include <crtdbg.h>
160#include <stdlib.h>
161
162static void noop_handler(const wchar_t *expression, const wchar_t *function,
163 const wchar_t *file, unsigned int line, uintptr_t pReserved)
164{
165 return;
166}
167
168#define BEGIN_SUPPRESS_IPH \
169 const int old_report_mode = _CrtSetReportMode(_CRT_ASSERT, 0); \
170 const _invalid_parameter_handler old_handler = _set_thread_local_invalid_parameter_handler(noop_handler)
171#define END_SUPPRESS_IPH \
172 (void)old_report_mode; /* Silence warning in release mode when _CrtSetReportMode compiles to void. */ \
173 _CrtSetReportMode(_CRT_ASSERT, old_report_mode); \
174 _set_thread_local_invalid_parameter_handler(old_handler)
175
176#else
177
178#define BEGIN_SUPPRESS_IPH
179#define END_SUPPRESS_IPH
180
181#endif
182
183static int
184is_socket(int fd)
185{
186 intptr_t hd;
187
188 BEGIN_SUPPRESS_IPH;
189 hd = _get_osfhandle(fd);
190 END_SUPPRESS_IPH;
191
192 if (hd == (intptr_t)INVALID_HANDLE_VALUE) {
193 return 1; /* fd is not file descriptor */
194 }
195
196 return 0;
197}
198
199int 182int
200posix_connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen) 183posix_connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
201{ 184{
@@ -209,14 +192,13 @@ int
209posix_close(int fd) 192posix_close(int fd)
210{ 193{
211 int rc; 194 int rc;
212
213 if (is_socket(fd)) { 195 if (is_socket(fd)) {
214 if ((rc = closesocket(fd)) == SOCKET_ERROR) { 196 if ((rc = closesocket(fd)) == SOCKET_ERROR) {
215 int err = WSAGetLastError(); 197 int err = WSAGetLastError();
216 rc = wsa_errno(err); 198 rc = wsa_errno(err);
217 } 199 }
218 } else { 200 } else {
219 rc = close(fd); 201 rc = close(get_real_fd(fd));
220 } 202 }
221 return rc; 203 return rc;
222} 204}
@@ -225,14 +207,13 @@ ssize_t
225posix_read(int fd, void *buf, size_t count) 207posix_read(int fd, void *buf, size_t count)
226{ 208{
227 ssize_t rc; 209 ssize_t rc;
228
229 if (is_socket(fd)) { 210 if (is_socket(fd)) {
230 if ((rc = recv(fd, buf, count, 0)) == SOCKET_ERROR) { 211 if ((rc = recv(fd, buf, count, 0)) == SOCKET_ERROR) {
231 int err = WSAGetLastError(); 212 int err = WSAGetLastError();
232 rc = wsa_errno(err); 213 rc = wsa_errno(err);
233 } 214 }
234 } else { 215 } else {
235 rc = read(fd, buf, count); 216 rc = read(get_real_fd(fd), buf, count);
236 } 217 }
237 return rc; 218 return rc;
238} 219}
@@ -246,7 +227,7 @@ posix_write(int fd, const void *buf, size_t count)
246 rc = wsa_errno(WSAGetLastError()); 227 rc = wsa_errno(WSAGetLastError());
247 } 228 }
248 } else { 229 } else {
249 rc = write(fd, buf, count); 230 rc = write(get_real_fd(fd), buf, count);
250 } 231 }
251 return rc; 232 return rc;
252} 233}