diff options
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/CMakeLists.txt | 88 | ||||
-rw-r--r-- | crypto/Makefile.am | 58 | ||||
-rw-r--r-- | crypto/Makefile.am.elf-arm | 18 | ||||
-rw-r--r-- | crypto/Makefile.am.elf-x86_64 | 7 | ||||
-rw-r--r-- | crypto/Makefile.am.macosx-x86_64 | 7 | ||||
-rw-r--r-- | crypto/Makefile.am.masm-x86_64 | 5 | ||||
-rw-r--r-- | crypto/Makefile.am.mingw64-x86_64 | 5 | ||||
-rw-r--r-- | crypto/arch/aarch64/crypto_cpu_caps_darwin.c | 60 | ||||
-rw-r--r-- | crypto/arch/aarch64/crypto_cpu_caps_linux.c | 62 | ||||
-rw-r--r-- | crypto/arch/aarch64/crypto_cpu_caps_none.c | 26 | ||||
-rw-r--r-- | crypto/arch/aarch64/crypto_cpu_caps_windows.c | 36 | ||||
-rw-r--r-- | crypto/compat/.gitignore | 31 | ||||
-rw-r--r-- | crypto/compat/b_win.c | 5 | ||||
-rw-r--r-- | crypto/compat/posix_win.c | 85 |
14 files changed, 351 insertions, 142 deletions
diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt index 64bccd8..047c228 100644 --- a/crypto/CMakeLists.txt +++ b/crypto/CMakeLists.txt | |||
@@ -1,30 +1,28 @@ | |||
1 | add_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 | ||
3 | if(HOST_ASM_ELF_ARMV4) | 16 | add_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}) | ||
20 | endif() | ||
21 | 17 | ||
22 | if(HOST_ASM_ELF_X86_64) | 18 | if(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 |
@@ -43,7 +41,6 @@ if(HOST_ASM_ELF_X86_64) | |||
43 | bn/arch/amd64/bignum_sqr_8_16_alt.S | 41 | bn/arch/amd64/bignum_sqr_8_16_alt.S |
44 | bn/arch/amd64/bignum_sub.S | 42 | bn/arch/amd64/bignum_sub.S |
45 | bn/arch/amd64/word_clz.S | 43 | bn/arch/amd64/word_clz.S |
46 | bn/arch/amd64/bn_arch.c | ||
47 | ) | 44 | ) |
48 | add_definitions(-DAES_ASM) | 45 | add_definitions(-DAES_ASM) |
49 | add_definitions(-DBSAES_ASM) | 46 | add_definitions(-DBSAES_ASM) |
@@ -57,11 +54,13 @@ if(HOST_ASM_ELF_X86_64) | |||
57 | endif() | 54 | endif() |
58 | 55 | ||
59 | if(HOST_ASM_MACOSX_X86_64) | 56 | if(HOST_ASM_MACOSX_X86_64) |
57 | set(CRYPTO_SRC ${CRYPTO_SRC} aes/aes_amd64.c) | ||
58 | set(CRYPTO_SRC ${CRYPTO_SRC} bn/arch/amd64/bn_arch.c) | ||
59 | set(CRYPTO_SRC ${CRYPTO_SRC} modes/gcm128_amd64.c) | ||
60 | |||
60 | set( | 61 | set( |
61 | ASM_X86_64_MACOSX_SRC | 62 | ASM_X86_64_MACOSX_SRC |
62 | aes/aes-macosx-x86_64.S | 63 | 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 | 64 | aes/aesni-macosx-x86_64.S |
66 | bn/modexp512-macosx-x86_64.S | 65 | bn/modexp512-macosx-x86_64.S |
67 | bn/mont-macosx-x86_64.S | 66 | bn/mont-macosx-x86_64.S |
@@ -80,7 +79,6 @@ if(HOST_ASM_MACOSX_X86_64) | |||
80 | bn/arch/amd64/bignum_sqr_8_16_alt.S | 79 | bn/arch/amd64/bignum_sqr_8_16_alt.S |
81 | bn/arch/amd64/bignum_sub.S | 80 | bn/arch/amd64/bignum_sub.S |
82 | bn/arch/amd64/word_clz.S | 81 | bn/arch/amd64/word_clz.S |
83 | bn/arch/amd64/bn_arch.c | ||
84 | ) | 82 | ) |
85 | add_definitions(-DAES_ASM) | 83 | add_definitions(-DAES_ASM) |
86 | add_definitions(-DBSAES_ASM) | 84 | add_definitions(-DBSAES_ASM) |
@@ -95,11 +93,12 @@ if(HOST_ASM_MACOSX_X86_64) | |||
95 | endif() | 93 | endif() |
96 | 94 | ||
97 | if(HOST_ASM_MASM_X86_64) | 95 | if(HOST_ASM_MASM_X86_64) |
96 | set(CRYPTO_SRC ${CRYPTO_SRC} aes/aes_amd64.c) | ||
97 | set(CRYPTO_SRC ${CRYPTO_SRC} modes/gcm128_amd64.c) | ||
98 | |||
98 | set( | 99 | set( |
99 | ASM_X86_64_MASM_SRC | 100 | ASM_X86_64_MASM_SRC |
100 | aes/aes-masm-x86_64.S | 101 | 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 | 102 | aes/aesni-masm-x86_64.S |
104 | #bn/modexp512-masm-x86_64.S | 103 | #bn/modexp512-masm-x86_64.S |
105 | #bn/mont-masm-x86_64.S | 104 | #bn/mont-masm-x86_64.S |
@@ -121,11 +120,12 @@ if(HOST_ASM_MASM_X86_64) | |||
121 | endif() | 120 | endif() |
122 | 121 | ||
123 | if(HOST_ASM_MINGW64_X86_64) | 122 | if(HOST_ASM_MINGW64_X86_64) |
123 | set(CRYPTO_SRC ${CRYPTO_SRC} aes/aes_amd64.c) | ||
124 | set(CRYPTO_SRC ${CRYPTO_SRC} modes/gcm128_amd64.c) | ||
125 | |||
124 | set( | 126 | set( |
125 | ASM_X86_64_MINGW64_SRC | 127 | ASM_X86_64_MINGW64_SRC |
126 | aes/aes-mingw64-x86_64.S | 128 | 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 | 129 | aes/aesni-mingw64-x86_64.S |
130 | #bn/modexp512-mingw64-x86_64.S | 130 | #bn/modexp512-mingw64-x86_64.S |
131 | #bn/mont-mingw64-x86_64.S | 131 | #bn/mont-mingw64-x86_64.S |
@@ -146,7 +146,17 @@ if(HOST_ASM_MINGW64_X86_64) | |||
146 | endif() | 146 | endif() |
147 | 147 | ||
148 | if(HOST_AARCH64) | 148 | if(HOST_AARCH64) |
149 | set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps.c) | 149 | if(APPLE) |
150 | set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps_darwin.c) | ||
151 | elseif(LINUX) | ||
152 | set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps_linux.c) | ||
153 | elseif(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") | ||
154 | set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps.c) | ||
155 | elseif(WIN32) | ||
156 | set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps_windows.c) | ||
157 | else() | ||
158 | set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps_none.c) | ||
159 | endif() | ||
150 | elseif(HOST_X86_64) | 160 | elseif(HOST_X86_64) |
151 | set(CRYPTO_SRC ${CRYPTO_SRC} arch/amd64/crypto_cpu_caps.c) | 161 | set(CRYPTO_SRC ${CRYPTO_SRC} arch/amd64/crypto_cpu_caps.c) |
152 | elseif(HOST_I386) | 162 | elseif(HOST_I386) |
@@ -163,7 +173,6 @@ set( | |||
163 | crypto_memory.c | 173 | crypto_memory.c |
164 | aes/aes.c | 174 | aes/aes.c |
165 | aes/aes_core.c | 175 | aes/aes_core.c |
166 | aes/aes_ige.c | ||
167 | asn1/a_bitstr.c | 176 | asn1/a_bitstr.c |
168 | asn1/a_enum.c | 177 | asn1/a_enum.c |
169 | asn1/a_int.c | 178 | asn1/a_int.c |
@@ -213,10 +222,8 @@ set( | |||
213 | asn1/x_bignum.c | 222 | asn1/x_bignum.c |
214 | asn1/x_crl.c | 223 | asn1/x_crl.c |
215 | asn1/x_exten.c | 224 | asn1/x_exten.c |
216 | asn1/x_info.c | ||
217 | asn1/x_long.c | 225 | asn1/x_long.c |
218 | asn1/x_name.c | 226 | asn1/x_name.c |
219 | asn1/x_pkey.c | ||
220 | asn1/x_pubkey.c | 227 | asn1/x_pubkey.c |
221 | asn1/x_req.c | 228 | asn1/x_req.c |
222 | asn1/x_sig.c | 229 | asn1/x_sig.c |
@@ -245,6 +252,7 @@ set( | |||
245 | bio/bss_null.c | 252 | bio/bss_null.c |
246 | bio/bss_sock.c | 253 | bio/bss_sock.c |
247 | bn/bn_add.c | 254 | bn/bn_add.c |
255 | bn/bn_add_sub.c | ||
248 | bn/bn_bpsw.c | 256 | bn/bn_bpsw.c |
249 | bn/bn_const.c | 257 | bn/bn_const.c |
250 | bn/bn_convert.c | 258 | bn/bn_convert.c |
@@ -258,6 +266,7 @@ set( | |||
258 | bn/bn_lib.c | 266 | bn/bn_lib.c |
259 | bn/bn_mod.c | 267 | bn/bn_mod.c |
260 | bn/bn_mod_sqrt.c | 268 | bn/bn_mod_sqrt.c |
269 | bn/bn_mod_words.c | ||
261 | bn/bn_mont.c | 270 | bn/bn_mont.c |
262 | bn/bn_mul.c | 271 | bn/bn_mul.c |
263 | bn/bn_prime.c | 272 | bn/bn_prime.c |
@@ -339,11 +348,13 @@ set( | |||
339 | ec/ec_convert.c | 348 | ec/ec_convert.c |
340 | ec/ec_curve.c | 349 | ec/ec_curve.c |
341 | ec/ec_err.c | 350 | ec/ec_err.c |
351 | ec/ec_field.c | ||
342 | ec/ec_key.c | 352 | ec/ec_key.c |
343 | ec/ec_lib.c | 353 | ec/ec_lib.c |
344 | ec/ec_mult.c | 354 | ec/ec_mult.c |
345 | ec/ec_pmeth.c | 355 | ec/ec_pmeth.c |
346 | ec/eck_prn.c | 356 | ec/eck_prn.c |
357 | ec/ecp_hp_methods.c | ||
347 | ec/ecp_methods.c | 358 | ec/ecp_methods.c |
348 | ec/ecx_methods.c | 359 | ec/ecx_methods.c |
349 | ecdh/ecdh.c | 360 | ecdh/ecdh.c |
@@ -464,11 +475,7 @@ set( | |||
464 | rand/rand_err.c | 475 | rand/rand_err.c |
465 | rand/rand_lib.c | 476 | rand/rand_lib.c |
466 | rand/randfile.c | 477 | rand/randfile.c |
467 | rc2/rc2_cbc.c | 478 | 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 | 479 | rc4/rc4.c |
473 | ripemd/ripemd.c | 480 | ripemd/ripemd.c |
474 | rsa/rsa_ameth.c | 481 | rsa/rsa_ameth.c |
@@ -570,17 +577,17 @@ set( | |||
570 | 577 | ||
571 | set(COMPAT_SRC empty.c) | 578 | set(COMPAT_SRC empty.c) |
572 | 579 | ||
580 | set(CRYPTO_UNEXPORT ${CRYPTO_UNEXPORT} BIO_s_log) | ||
581 | |||
573 | if(UNIX) | 582 | if(UNIX) |
574 | set(CRYPTO_SRC ${CRYPTO_SRC} crypto_lock.c) | 583 | set(CRYPTO_SRC ${CRYPTO_SRC} crypto_lock.c) |
575 | set(CRYPTO_SRC ${CRYPTO_SRC} bio/b_posix.c) | 584 | 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) | 585 | set(CRYPTO_SRC ${CRYPTO_SRC} ui/ui_openssl.c) |
578 | endif() | 586 | endif() |
579 | 587 | ||
580 | if(WIN32) | 588 | if(WIN32) |
581 | set(CRYPTO_SRC ${CRYPTO_SRC} compat/crypto_lock_win.c) | 589 | set(CRYPTO_SRC ${CRYPTO_SRC} compat/crypto_lock_win.c) |
582 | set(CRYPTO_SRC ${CRYPTO_SRC} bio/b_win.c) | 590 | 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) | 591 | set(CRYPTO_SRC ${CRYPTO_SRC} ui/ui_openssl_win.c) |
585 | endif() | 592 | endif() |
586 | 593 | ||
@@ -736,6 +743,7 @@ add_library(crypto_obj OBJECT ${CRYPTO_SRC}) | |||
736 | target_include_directories(crypto_obj | 743 | target_include_directories(crypto_obj |
737 | PRIVATE | 744 | PRIVATE |
738 | . | 745 | . |
746 | aes | ||
739 | asn1 | 747 | asn1 |
740 | bio | 748 | bio |
741 | bn | 749 | bn |
diff --git a/crypto/Makefile.am b/crypto/Makefile.am index d1c5b76..ad241ab 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 | |||
1 | include $(top_srcdir)/Makefile.am.common | 16 | include $(top_srcdir)/Makefile.am.common |
2 | 17 | ||
3 | AM_CPPFLAGS += -DLIBRESSL_CRYPTO_INTERNAL | 18 | AM_CPPFLAGS += -DLIBRESSL_CRYPTO_INTERNAL |
19 | AM_CPPFLAGS += -I$(top_srcdir)/crypto/aes | ||
4 | AM_CPPFLAGS += -I$(top_srcdir)/crypto/asn1 | 20 | AM_CPPFLAGS += -I$(top_srcdir)/crypto/asn1 |
5 | AM_CPPFLAGS += -I$(top_srcdir)/crypto/bio | 21 | AM_CPPFLAGS += -I$(top_srcdir)/crypto/bio |
6 | AM_CPPFLAGS += -I$(top_srcdir)/crypto/bn | 22 | AM_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 |
54 | if 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 |
57 | endif | ||
58 | 72 | ||
59 | libcrypto_la_objects.mk: Makefile | 73 | libcrypto_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 | ||
70 | libcrypto_la_LDFLAGS = -version-info @LIBCRYPTO_VERSION@ -no-undefined -export-symbols crypto_portable.sym | 84 | libcrypto_la_LDFLAGS = -version-info @LIBCRYPTO_VERSION@ -no-undefined -export-symbols crypto_portable.sym |
@@ -187,7 +201,6 @@ include Makefile.am.arc4random | |||
187 | libcrypto_la_SOURCES = | 201 | libcrypto_la_SOURCES = |
188 | EXTRA_libcrypto_la_SOURCES = | 202 | EXTRA_libcrypto_la_SOURCES = |
189 | 203 | ||
190 | include Makefile.am.elf-arm | ||
191 | include Makefile.am.elf-mips | 204 | include Makefile.am.elf-mips |
192 | include Makefile.am.elf-mips64 | 205 | include Makefile.am.elf-mips64 |
193 | include Makefile.am.elf-x86_64 | 206 | include Makefile.am.elf-x86_64 |
@@ -195,7 +208,6 @@ include Makefile.am.macosx-x86_64 | |||
195 | include Makefile.am.masm-x86_64 | 208 | include Makefile.am.masm-x86_64 |
196 | include Makefile.am.mingw64-x86_64 | 209 | include Makefile.am.mingw64-x86_64 |
197 | 210 | ||
198 | if !HOST_ASM_ELF_ARM | ||
199 | if !HOST_ASM_ELF_MIPS | 211 | if !HOST_ASM_ELF_MIPS |
200 | if !HOST_ASM_ELF_MIPS64 | 212 | if !HOST_ASM_ELF_MIPS64 |
201 | if !HOST_ASM_ELF_X86_64 | 213 | if !HOST_ASM_ELF_X86_64 |
@@ -209,11 +221,23 @@ endif | |||
209 | endif | 221 | endif |
210 | endif | 222 | endif |
211 | endif | 223 | endif |
212 | endif | ||
213 | 224 | ||
214 | if HOST_AARCH64 | 225 | if HOST_AARCH64 |
226 | if HOST_DARWIN | ||
227 | libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps_darwin.c | ||
228 | else | ||
229 | if HOST_LINUX | ||
230 | libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps_linux.c | ||
231 | else | ||
232 | if HOST_OPENBSD | ||
215 | libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps.c | 233 | libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps.c |
234 | else | ||
235 | libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps_none.c | ||
236 | endif | ||
237 | endif | ||
238 | endif | ||
216 | endif | 239 | endif |
240 | |||
217 | if HOST_X86_64 | 241 | if HOST_X86_64 |
218 | libcrypto_la_SOURCES += arch/amd64/crypto_cpu_caps.c | 242 | libcrypto_la_SOURCES += arch/amd64/crypto_cpu_caps.c |
219 | endif | 243 | endif |
@@ -231,7 +255,6 @@ else | |||
231 | libcrypto_la_SOURCES += compat/crypto_lock_win.c | 255 | libcrypto_la_SOURCES += compat/crypto_lock_win.c |
232 | endif | 256 | endif |
233 | libcrypto_la_SOURCES += crypto_memory.c | 257 | libcrypto_la_SOURCES += crypto_memory.c |
234 | noinst_HEADERS += arm_arch.h | ||
235 | noinst_HEADERS += constant_time.h | 258 | noinst_HEADERS += constant_time.h |
236 | noinst_HEADERS += crypto_internal.h | 259 | noinst_HEADERS += crypto_internal.h |
237 | noinst_HEADERS += crypto_local.h | 260 | noinst_HEADERS += crypto_local.h |
@@ -240,7 +263,6 @@ noinst_HEADERS += x86_arch.h | |||
240 | # aes | 263 | # aes |
241 | libcrypto_la_SOURCES += aes/aes.c | 264 | libcrypto_la_SOURCES += aes/aes.c |
242 | libcrypto_la_SOURCES += aes/aes_core.c | 265 | libcrypto_la_SOURCES += aes/aes_core.c |
243 | libcrypto_la_SOURCES += aes/aes_ige.c | ||
244 | noinst_HEADERS += aes/aes_local.h | 266 | noinst_HEADERS += aes/aes_local.h |
245 | 267 | ||
246 | # asn1 | 268 | # asn1 |
@@ -293,10 +315,8 @@ libcrypto_la_SOURCES += asn1/x_attrib.c | |||
293 | libcrypto_la_SOURCES += asn1/x_bignum.c | 315 | libcrypto_la_SOURCES += asn1/x_bignum.c |
294 | libcrypto_la_SOURCES += asn1/x_crl.c | 316 | libcrypto_la_SOURCES += asn1/x_crl.c |
295 | libcrypto_la_SOURCES += asn1/x_exten.c | 317 | libcrypto_la_SOURCES += asn1/x_exten.c |
296 | libcrypto_la_SOURCES += asn1/x_info.c | ||
297 | libcrypto_la_SOURCES += asn1/x_long.c | 318 | libcrypto_la_SOURCES += asn1/x_long.c |
298 | libcrypto_la_SOURCES += asn1/x_name.c | 319 | libcrypto_la_SOURCES += asn1/x_name.c |
299 | libcrypto_la_SOURCES += asn1/x_pkey.c | ||
300 | libcrypto_la_SOURCES += asn1/x_pubkey.c | 320 | libcrypto_la_SOURCES += asn1/x_pubkey.c |
301 | libcrypto_la_SOURCES += asn1/x_req.c | 321 | libcrypto_la_SOURCES += asn1/x_req.c |
302 | libcrypto_la_SOURCES += asn1/x_sig.c | 322 | libcrypto_la_SOURCES += asn1/x_sig.c |
@@ -334,9 +354,6 @@ libcrypto_la_SOURCES += bio/bss_conn.c | |||
334 | libcrypto_la_SOURCES += bio/bss_dgram.c | 354 | libcrypto_la_SOURCES += bio/bss_dgram.c |
335 | libcrypto_la_SOURCES += bio/bss_fd.c | 355 | libcrypto_la_SOURCES += bio/bss_fd.c |
336 | libcrypto_la_SOURCES += bio/bss_file.c | 356 | libcrypto_la_SOURCES += bio/bss_file.c |
337 | if !HOST_WIN | ||
338 | libcrypto_la_SOURCES += bio/bss_log.c | ||
339 | endif | ||
340 | libcrypto_la_SOURCES += bio/bss_mem.c | 357 | libcrypto_la_SOURCES += bio/bss_mem.c |
341 | libcrypto_la_SOURCES += bio/bss_null.c | 358 | libcrypto_la_SOURCES += bio/bss_null.c |
342 | libcrypto_la_SOURCES += bio/bss_sock.c | 359 | libcrypto_la_SOURCES += bio/bss_sock.c |
@@ -344,6 +361,7 @@ noinst_HEADERS += bio/bio_local.h | |||
344 | 361 | ||
345 | # bn | 362 | # bn |
346 | libcrypto_la_SOURCES += bn/bn_add.c | 363 | libcrypto_la_SOURCES += bn/bn_add.c |
364 | libcrypto_la_SOURCES += bn/bn_add_sub.c | ||
347 | libcrypto_la_SOURCES += bn/bn_bpsw.c | 365 | libcrypto_la_SOURCES += bn/bn_bpsw.c |
348 | libcrypto_la_SOURCES += bn/bn_const.c | 366 | libcrypto_la_SOURCES += bn/bn_const.c |
349 | libcrypto_la_SOURCES += bn/bn_convert.c | 367 | libcrypto_la_SOURCES += bn/bn_convert.c |
@@ -357,6 +375,7 @@ libcrypto_la_SOURCES += bn/bn_kron.c | |||
357 | libcrypto_la_SOURCES += bn/bn_lib.c | 375 | libcrypto_la_SOURCES += bn/bn_lib.c |
358 | libcrypto_la_SOURCES += bn/bn_mod.c | 376 | libcrypto_la_SOURCES += bn/bn_mod.c |
359 | libcrypto_la_SOURCES += bn/bn_mod_sqrt.c | 377 | libcrypto_la_SOURCES += bn/bn_mod_sqrt.c |
378 | libcrypto_la_SOURCES += bn/bn_mod_words.c | ||
360 | libcrypto_la_SOURCES += bn/bn_mont.c | 379 | libcrypto_la_SOURCES += bn/bn_mont.c |
361 | libcrypto_la_SOURCES += bn/bn_mul.c | 380 | libcrypto_la_SOURCES += bn/bn_mul.c |
362 | libcrypto_la_SOURCES += bn/bn_prime.c | 381 | libcrypto_la_SOURCES += bn/bn_prime.c |
@@ -562,13 +581,16 @@ libcrypto_la_SOURCES += ec/ec_asn1.c | |||
562 | libcrypto_la_SOURCES += ec/ec_convert.c | 581 | libcrypto_la_SOURCES += ec/ec_convert.c |
563 | libcrypto_la_SOURCES += ec/ec_curve.c | 582 | libcrypto_la_SOURCES += ec/ec_curve.c |
564 | libcrypto_la_SOURCES += ec/ec_err.c | 583 | libcrypto_la_SOURCES += ec/ec_err.c |
584 | libcrypto_la_SOURCES += ec/ec_field.c | ||
565 | libcrypto_la_SOURCES += ec/ec_key.c | 585 | libcrypto_la_SOURCES += ec/ec_key.c |
566 | libcrypto_la_SOURCES += ec/ec_lib.c | 586 | libcrypto_la_SOURCES += ec/ec_lib.c |
567 | libcrypto_la_SOURCES += ec/ec_mult.c | 587 | libcrypto_la_SOURCES += ec/ec_mult.c |
568 | libcrypto_la_SOURCES += ec/ec_pmeth.c | 588 | libcrypto_la_SOURCES += ec/ec_pmeth.c |
569 | libcrypto_la_SOURCES += ec/eck_prn.c | 589 | libcrypto_la_SOURCES += ec/eck_prn.c |
590 | libcrypto_la_SOURCES += ec/ecp_hp_methods.c | ||
570 | libcrypto_la_SOURCES += ec/ecp_methods.c | 591 | libcrypto_la_SOURCES += ec/ecp_methods.c |
571 | libcrypto_la_SOURCES += ec/ecx_methods.c | 592 | libcrypto_la_SOURCES += ec/ecx_methods.c |
593 | noinst_HEADERS += ec/ec_internal.h | ||
572 | noinst_HEADERS += ec/ec_local.h | 594 | noinst_HEADERS += ec/ec_local.h |
573 | 595 | ||
574 | # ecdh | 596 | # ecdh |
@@ -800,11 +822,7 @@ libcrypto_la_SOURCES += rand/rand_lib.c | |||
800 | libcrypto_la_SOURCES += rand/randfile.c | 822 | libcrypto_la_SOURCES += rand/randfile.c |
801 | 823 | ||
802 | # rc2 | 824 | # rc2 |
803 | libcrypto_la_SOURCES += rc2/rc2_cbc.c | 825 | libcrypto_la_SOURCES += rc2/rc2.c |
804 | libcrypto_la_SOURCES += rc2/rc2_ecb.c | ||
805 | libcrypto_la_SOURCES += rc2/rc2_skey.c | ||
806 | libcrypto_la_SOURCES += rc2/rc2cfb64.c | ||
807 | libcrypto_la_SOURCES += rc2/rc2ofb64.c | ||
808 | noinst_HEADERS += rc2/rc2_local.h | 826 | noinst_HEADERS += rc2/rc2_local.h |
809 | 827 | ||
810 | # rc4 | 828 | # 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 @@ | |||
1 | ASM_ARM_ELF = aes/aes-elf-armv4.S | ||
2 | ASM_ARM_ELF += bn/mont-elf-armv4.S | ||
3 | ASM_ARM_ELF += sha/sha1-elf-armv4.S | ||
4 | ASM_ARM_ELF += sha/sha512-elf-armv4.S | ||
5 | ASM_ARM_ELF += sha/sha256-elf-armv4.S | ||
6 | ASM_ARM_ELF += modes/ghash-elf-armv4.S | ||
7 | ASM_ARM_ELF += armv4cpuid.S | ||
8 | ASM_ARM_ELF += armcap.c | ||
9 | |||
10 | EXTRA_DIST += $(ASM_ARM_ELF) | ||
11 | |||
12 | if HOST_ASM_ELF_ARM | ||
13 | libcrypto_la_CPPFLAGS += -DAES_ASM | ||
14 | libcrypto_la_CPPFLAGS += -DOPENSSL_BN_ASM_MONT | ||
15 | libcrypto_la_CPPFLAGS += -DGHASH_ASM | ||
16 | libcrypto_la_CPPFLAGS += -DOPENSSL_CPUID_OBJ | ||
17 | libcrypto_la_SOURCES += $(ASM_ARM_ELF) | ||
18 | endif | ||
diff --git a/crypto/Makefile.am.elf-x86_64 b/crypto/Makefile.am.elf-x86_64 index c62662c..ad49787 100644 --- a/crypto/Makefile.am.elf-x86_64 +++ b/crypto/Makefile.am.elf-x86_64 | |||
@@ -1,7 +1,5 @@ | |||
1 | 1 | ||
2 | ASM_X86_64_ELF = aes/aes-elf-x86_64.S | 2 | ASM_X86_64_ELF = aes/aes-elf-x86_64.S |
3 | ASM_X86_64_ELF += aes/bsaes-elf-x86_64.S | ||
4 | ASM_X86_64_ELF += aes/vpaes-elf-x86_64.S | ||
5 | ASM_X86_64_ELF += aes/aesni-elf-x86_64.S | 3 | ASM_X86_64_ELF += aes/aesni-elf-x86_64.S |
6 | ASM_X86_64_ELF += bn/modexp512-elf-x86_64.S | 4 | ASM_X86_64_ELF += bn/modexp512-elf-x86_64.S |
7 | ASM_X86_64_ELF += bn/mont-elf-x86_64.S | 5 | ASM_X86_64_ELF += bn/mont-elf-x86_64.S |
@@ -20,11 +18,14 @@ ASM_X86_64_ELF += bn/arch/amd64/bignum_sqr_4_8_alt.S | |||
20 | ASM_X86_64_ELF += bn/arch/amd64/bignum_sqr_8_16_alt.S | 18 | ASM_X86_64_ELF += bn/arch/amd64/bignum_sqr_8_16_alt.S |
21 | ASM_X86_64_ELF += bn/arch/amd64/bignum_sub.S | 19 | ASM_X86_64_ELF += bn/arch/amd64/bignum_sub.S |
22 | ASM_X86_64_ELF += bn/arch/amd64/word_clz.S | 20 | ASM_X86_64_ELF += bn/arch/amd64/word_clz.S |
23 | ASM_X86_64_ELF += bn/arch/amd64/bn_arch.c | ||
24 | 21 | ||
25 | EXTRA_DIST += $(ASM_X86_64_ELF) | 22 | EXTRA_DIST += $(ASM_X86_64_ELF) |
26 | 23 | ||
27 | if HOST_ASM_ELF_X86_64 | 24 | if HOST_ASM_ELF_X86_64 |
25 | libcrypto_la_SOURCES += aes/aes_amd64.c | ||
26 | libcrypto_la_SOURCES += bn/arch/amd64/bn_arch.c | ||
27 | libcrypto_la_SOURCES += modes/gcm128_amd64.c | ||
28 | |||
28 | libcrypto_la_CPPFLAGS += -DAES_ASM | 29 | libcrypto_la_CPPFLAGS += -DAES_ASM |
29 | libcrypto_la_CPPFLAGS += -DBSAES_ASM | 30 | libcrypto_la_CPPFLAGS += -DBSAES_ASM |
30 | libcrypto_la_CPPFLAGS += -DVPAES_ASM | 31 | libcrypto_la_CPPFLAGS += -DVPAES_ASM |
diff --git a/crypto/Makefile.am.macosx-x86_64 b/crypto/Makefile.am.macosx-x86_64 index 010e3be..bbccfd6 100644 --- a/crypto/Makefile.am.macosx-x86_64 +++ b/crypto/Makefile.am.macosx-x86_64 | |||
@@ -1,7 +1,5 @@ | |||
1 | 1 | ||
2 | ASM_X86_64_MACOSX = aes/aes-macosx-x86_64.S | 2 | ASM_X86_64_MACOSX = aes/aes-macosx-x86_64.S |
3 | ASM_X86_64_MACOSX += aes/bsaes-macosx-x86_64.S | ||
4 | ASM_X86_64_MACOSX += aes/vpaes-macosx-x86_64.S | ||
5 | ASM_X86_64_MACOSX += aes/aesni-macosx-x86_64.S | 3 | ASM_X86_64_MACOSX += aes/aesni-macosx-x86_64.S |
6 | ASM_X86_64_MACOSX += bn/modexp512-macosx-x86_64.S | 4 | ASM_X86_64_MACOSX += bn/modexp512-macosx-x86_64.S |
7 | ASM_X86_64_MACOSX += bn/mont-macosx-x86_64.S | 5 | ASM_X86_64_MACOSX += bn/mont-macosx-x86_64.S |
@@ -20,11 +18,14 @@ ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sqr_4_8_alt.S | |||
20 | ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sqr_8_16_alt.S | 18 | ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sqr_8_16_alt.S |
21 | ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sub.S | 19 | ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sub.S |
22 | ASM_X86_64_MACOSX += bn/arch/amd64/word_clz.S | 20 | ASM_X86_64_MACOSX += bn/arch/amd64/word_clz.S |
23 | ASM_X86_64_MACOSX += bn/arch/amd64/bn_arch.c | ||
24 | 21 | ||
25 | EXTRA_DIST += $(ASM_X86_64_MACOSX) | 22 | EXTRA_DIST += $(ASM_X86_64_MACOSX) |
26 | 23 | ||
27 | if HOST_ASM_MACOSX_X86_64 | 24 | if HOST_ASM_MACOSX_X86_64 |
25 | libcrypto_la_SOURCES += aes/aes_amd64.c | ||
26 | libcrypto_la_SOURCES += bn/arch/amd64/bn_arch.c | ||
27 | libcrypto_la_SOURCES += modes/gcm128_amd64.c | ||
28 | |||
28 | libcrypto_la_CPPFLAGS += -DAES_ASM | 29 | libcrypto_la_CPPFLAGS += -DAES_ASM |
29 | libcrypto_la_CPPFLAGS += -DBSAES_ASM | 30 | libcrypto_la_CPPFLAGS += -DBSAES_ASM |
30 | libcrypto_la_CPPFLAGS += -DVPAES_ASM | 31 | libcrypto_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 | ||
2 | ASM_X86_64_MASM = aes/aes-masm-x86_64.S | 2 | ASM_X86_64_MASM = aes/aes-masm-x86_64.S |
3 | ASM_X86_64_MASM += aes/bsaes-masm-x86_64.S | ||
4 | ASM_X86_64_MASM += aes/vpaes-masm-x86_64.S | ||
5 | ASM_X86_64_MASM += aes/aesni-masm-x86_64.S | 3 | ASM_X86_64_MASM += aes/aesni-masm-x86_64.S |
6 | ASM_X86_64_MASM += bn/modexp512-masm-x86_64.S | 4 | ASM_X86_64_MASM += bn/modexp512-masm-x86_64.S |
7 | ASM_X86_64_MASM += bn/mont-masm-x86_64.S | 5 | ASM_X86_64_MASM += bn/mont-masm-x86_64.S |
@@ -12,6 +10,9 @@ ASM_X86_64_MASM += rc4/rc4-masm-x86_64.S | |||
12 | EXTRA_DIST += $(ASM_X86_64_MASM) | 10 | EXTRA_DIST += $(ASM_X86_64_MASM) |
13 | 11 | ||
14 | if HOST_ASM_MASM_X86_64 | 12 | if HOST_ASM_MASM_X86_64 |
13 | libcrypto_la_SOURCES += aes/aes_amd64.c | ||
14 | libcrypto_la_SOURCES += modes/gcm128_amd64.c | ||
15 | |||
15 | libcrypto_la_CPPFLAGS += -DAES_ASM | 16 | libcrypto_la_CPPFLAGS += -DAES_ASM |
16 | libcrypto_la_CPPFLAGS += -DBSAES_ASM | 17 | libcrypto_la_CPPFLAGS += -DBSAES_ASM |
17 | libcrypto_la_CPPFLAGS += -DVPAES_ASM | 18 | libcrypto_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 | ||
2 | ASM_X86_64_MINGW64 = aes/aes-mingw64-x86_64.S | 2 | ASM_X86_64_MINGW64 = aes/aes-mingw64-x86_64.S |
3 | ASM_X86_64_MINGW64 += aes/bsaes-mingw64-x86_64.S | ||
4 | ASM_X86_64_MINGW64 += aes/vpaes-mingw64-x86_64.S | ||
5 | ASM_X86_64_MINGW64 += aes/aesni-mingw64-x86_64.S | 3 | ASM_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 | |||
12 | EXTRA_DIST += $(ASM_X86_64_MINGW64) | 10 | EXTRA_DIST += $(ASM_X86_64_MINGW64) |
13 | 11 | ||
14 | if HOST_ASM_MINGW64_X86_64 | 12 | if HOST_ASM_MINGW64_X86_64 |
13 | libcrypto_la_SOURCES += aes/aes_amd64.c | ||
14 | libcrypto_la_SOURCES += modes/gcm128_amd64.c | ||
15 | |||
15 | libcrypto_la_CPPFLAGS += -Dendbr32=endbr64 | 16 | libcrypto_la_CPPFLAGS += -Dendbr32=endbr64 |
16 | libcrypto_la_CPPFLAGS += -DAES_ASM | 17 | libcrypto_la_CPPFLAGS += -DAES_ASM |
17 | libcrypto_la_CPPFLAGS += -DBSAES_ASM | 18 | libcrypto_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. */ | ||
23 | uint64_t crypto_cpu_caps_aarch64; | ||
24 | |||
25 | static uint64_t | ||
26 | check_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 | |||
36 | void | ||
37 | crypto_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. */ | ||
32 | uint64_t crypto_cpu_caps_aarch64; | ||
33 | |||
34 | static uint64_t | ||
35 | check_cpu_cap(unsigned long hwcap, uint64_t cap_flag) | ||
36 | { | ||
37 | return (getauxval(AT_HWCAP) & hwcap) ? cap_flag : 0; | ||
38 | } | ||
39 | |||
40 | void | ||
41 | crypto_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. */ | ||
20 | uint64_t crypto_cpu_caps_aarch64; | ||
21 | |||
22 | void | ||
23 | crypto_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. */ | ||
23 | uint64_t crypto_cpu_caps_aarch64; | ||
24 | |||
25 | void | ||
26 | crypto_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/compat/.gitignore b/crypto/compat/.gitignore new file mode 100644 index 0000000..7f05049 --- /dev/null +++ b/crypto/compat/.gitignore | |||
@@ -0,0 +1,31 @@ | |||
1 | arc4random.c | ||
2 | arc4random_aix.h | ||
3 | arc4random_freebsd.h | ||
4 | arc4random_hpux.h | ||
5 | arc4random_linux.h | ||
6 | arc4random_netbsd.h | ||
7 | arc4random_osx.h | ||
8 | arc4random_solaris.h | ||
9 | arc4random_uniform.c | ||
10 | arc4random_win.h | ||
11 | chacha_private.h | ||
12 | explicit_bzero.c | ||
13 | getentropy_aix.c | ||
14 | getentropy_freebsd.c | ||
15 | getentropy_hpux.c | ||
16 | getentropy_linux.c | ||
17 | getentropy_netbsd.c | ||
18 | getentropy_osx.c | ||
19 | getentropy_solaris.c | ||
20 | getentropy_win.c | ||
21 | reallocarray.c | ||
22 | recallocarray.c | ||
23 | strcasecmp.c | ||
24 | strlcat.c | ||
25 | strlcpy.c | ||
26 | strndup.c | ||
27 | strnlen.c | ||
28 | strsep.c | ||
29 | strtonum.c | ||
30 | timingsafe_bcmp.c | ||
31 | timingsafe_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 | ||
13 | int | 14 | int |
14 | BIO_sock_init(void) | 15 | BIO_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 | ||
35 | void | 36 | void |
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 | |||
27 | static int | ||
28 | is_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 | |||
38 | static int | ||
39 | get_real_fd(int fd) | ||
40 | { | ||
41 | return (fd & 0x7fffffff); | ||
42 | } | ||
43 | |||
25 | void | 44 | void |
26 | posix_perror(const char *s) | 45 | posix_perror(const char *s) |
27 | { | 46 | { |
@@ -44,6 +63,12 @@ posix_fopen(const char *path, const char *mode) | |||
44 | } | 63 | } |
45 | 64 | ||
46 | int | 65 | int |
66 | libressl_fstat(int fd, struct stat *statbuf) | ||
67 | { | ||
68 | return fstat(get_real_fd(fd), statbuf); | ||
69 | } | ||
70 | |||
71 | int | ||
47 | posix_open(const char *path, ...) | 72 | posix_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 | ||
68 | char * | 97 | char * |
@@ -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 | |||
162 | static 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 | |||
183 | static int | ||
184 | is_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 | |||
199 | int | 182 | int |
200 | posix_connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen) | 183 | posix_connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen) |
201 | { | 184 | { |
@@ -209,14 +192,13 @@ int | |||
209 | posix_close(int fd) | 192 | posix_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 | |||
225 | posix_read(int fd, void *buf, size_t count) | 207 | posix_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 | } |