diff options
-rw-r--r-- | .github/workflows/linux.yml | 7 | ||||
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | CMakeLists.txt | 8 | ||||
-rw-r--r-- | ChangeLog | 23 | ||||
-rw-r--r-- | configure.ac | 21 | ||||
-rw-r--r-- | crypto/CMakeLists.txt | 5 | ||||
-rw-r--r-- | crypto/Makefile.am | 10 | ||||
-rw-r--r-- | crypto/arch/loongarch64/crypto_arch.h | 21 | ||||
-rw-r--r-- | crypto/arch/mips/crypto_arch.h | 21 | ||||
-rw-r--r-- | crypto/bn/arch/loongarch64/bn_arch.h | 23 | ||||
-rw-r--r-- | include/CMakeLists.txt | 2 | ||||
-rw-r--r-- | include/arch/loongarch64/opensslconf.h | 154 | ||||
-rw-r--r-- | include/arch/mips/opensslconf.h | 22 | ||||
-rw-r--r-- | include/openssl/Makefile.am.tpl | 3 | ||||
-rwxr-xr-x | scripts/test | 15 | ||||
-rw-r--r-- | ssl/CMakeLists.txt | 4 | ||||
-rw-r--r-- | ssl/Makefile.am | 8 | ||||
-rw-r--r-- | tests/CMakeLists.txt | 4 | ||||
-rw-r--r-- | tests/Makefile.am | 6 |
19 files changed, 317 insertions, 42 deletions
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index d57e3bc..8334ae6 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml | |||
@@ -23,7 +23,7 @@ jobs: | |||
23 | fail-fast: false | 23 | fail-fast: false |
24 | matrix: | 24 | matrix: |
25 | os: ["ubuntu-22.04", "ubuntu-24.04"] | 25 | os: ["ubuntu-22.04", "ubuntu-24.04"] |
26 | arch: ["native", "arm32", "arm64", "mingw32", "mingw64", "mips64"] | 26 | arch: ["native", "arm32", "arm64", "mingw32", "mingw64", "mips32", "mips64"] |
27 | compiler: ["gcc"] | 27 | compiler: ["gcc"] |
28 | include: | 28 | include: |
29 | - os: "ubuntu-22.04" | 29 | - os: "ubuntu-22.04" |
@@ -32,12 +32,15 @@ jobs: | |||
32 | - os: "ubuntu-24.04" | 32 | - os: "ubuntu-24.04" |
33 | arch: "native" | 33 | arch: "native" |
34 | compiler: "clang" | 34 | compiler: "clang" |
35 | - os: "ubuntu-24.04" # loong64 | ||
36 | arch: "loong64" | ||
37 | compiler: "gcc" | ||
35 | steps: | 38 | steps: |
36 | - name: "Checkout repository" | 39 | - name: "Checkout repository" |
37 | uses: actions/checkout@v4 | 40 | uses: actions/checkout@v4 |
38 | 41 | ||
39 | - name: "Run tests" | 42 | - name: "Run tests" |
40 | run: ./scripts/test | 43 | run: ./scripts/test || (status=$?; cat tests/test-suite.log; exit $status) |
41 | env: | 44 | env: |
42 | ARCH: "${{ matrix.arch }}" | 45 | ARCH: "${{ matrix.arch }}" |
43 | CC: "${{ matrix.compiler }}" | 46 | CC: "${{ matrix.compiler }}" |
@@ -239,6 +239,8 @@ include/openssl/*.h | |||
239 | 239 | ||
240 | /crypto/* | 240 | /crypto/* |
241 | !/crypto/Makefile.am.* | 241 | !/crypto/Makefile.am.* |
242 | !/crypto/arch/ | ||
243 | !/crypto/arch/mips/* | ||
242 | !/crypto/compat/ | 244 | !/crypto/compat/ |
243 | /crypto/compat/* | 245 | /crypto/compat/* |
244 | !/crypto/compat/arc4random.h | 246 | !/crypto/compat/arc4random.h |
diff --git a/CMakeLists.txt b/CMakeLists.txt index 437570b..8437e02 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt | |||
@@ -72,10 +72,6 @@ endforeach() | |||
72 | 72 | ||
73 | set(BUILD_NC true) | 73 | set(BUILD_NC true) |
74 | 74 | ||
75 | if(CMAKE_SYSTEM_NAME MATCHES "Darwin") | ||
76 | add_definitions(-fno-common) | ||
77 | endif() | ||
78 | |||
79 | if(CMAKE_SYSTEM_NAME MATCHES "OpenBSD") | 75 | if(CMAKE_SYSTEM_NAME MATCHES "OpenBSD") |
80 | add_definitions(-DHAVE_ATTRIBUTE__BOUNDED__) | 76 | add_definitions(-DHAVE_ATTRIBUTE__BOUNDED__) |
81 | add_definitions(-DHAVE_ATTRIBUTE__DEAD__) | 77 | add_definitions(-DHAVE_ATTRIBUTE__DEAD__) |
@@ -131,7 +127,7 @@ add_definitions(-D__END_HIDDEN_DECLS=) | |||
131 | set(CMAKE_POSITION_INDEPENDENT_CODE true) | 127 | set(CMAKE_POSITION_INDEPENDENT_CODE true) |
132 | 128 | ||
133 | if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") | 129 | if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") |
134 | add_definitions(-Wno-pointer-sign) | 130 | add_compile_options(-Wno-pointer-sign) |
135 | endif() | 131 | endif() |
136 | 132 | ||
137 | if(WIN32) | 133 | if(WIN32) |
@@ -389,6 +385,8 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64|amd64|AMD64)") | |||
389 | elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(i[3-6]86|[xX]86)") | 385 | elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(i[3-6]86|[xX]86)") |
390 | set(ENABLE_ASM false) | 386 | set(ENABLE_ASM false) |
391 | set(HOST_I386 true) | 387 | set(HOST_I386 true) |
388 | elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "loongarch64") | ||
389 | set(HOST_LOONGARCH64 true) | ||
392 | elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips64") | 390 | elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips64") |
393 | set(HOST_MIPS64 true) | 391 | set(HOST_MIPS64 true) |
394 | elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips") | 392 | elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips") |
@@ -31,6 +31,8 @@ LibreSSL Portable Release Notes: | |||
31 | 4.1.0 - In development | 31 | 4.1.0 - In development |
32 | 32 | ||
33 | * Portable changes | 33 | * Portable changes |
34 | - Added initial experimental support for loongarch64. | ||
35 | - Fixed compilation for mips32 and reenable CI. | ||
34 | - Fixed CMake builds on FreeBSD. | 36 | - Fixed CMake builds on FreeBSD. |
35 | - Fixed the --prefix option for cmake --install. | 37 | - Fixed the --prefix option for cmake --install. |
36 | - Fixed tests for MinGW due to missing sh(1). | 38 | - Fixed tests for MinGW due to missing sh(1). |
@@ -63,6 +65,10 @@ LibreSSL Portable Release Notes: | |||
63 | - Replaced BN_bn2hex() reimplementation in openssl(1) ca with | 65 | - Replaced BN_bn2hex() reimplementation in openssl(1) ca with |
64 | a poper API call. | 66 | a poper API call. |
65 | - Fixed integer overflows due to signed shift in obj_dat.c. | 67 | - Fixed integer overflows due to signed shift in obj_dat.c. |
68 | - Fixed a few memory leaks in legacy code. | ||
69 | - Improved some X509_VERIFY_PARAM internals and avoid an out of | ||
70 | bounds read from public API. | ||
71 | - Imported ML-KEM 768 and 1024 from BoringSSL (not yet public API). | ||
66 | * Compatibility changes | 72 | * Compatibility changes |
67 | - Added an OPENSSL_INIT_NO_ATEXIT flag for OPENSSL_init_crypto(). | 73 | - Added an OPENSSL_INIT_NO_ATEXIT flag for OPENSSL_init_crypto(). |
68 | It has no effect since LibreSSL doesn't call atexit(). | 74 | It has no effect since LibreSSL doesn't call atexit(). |
@@ -71,6 +77,9 @@ LibreSSL Portable Release Notes: | |||
71 | - EC_METHOD is no longer public and the API exposing it has been | 77 | - EC_METHOD is no longer public and the API exposing it has been |
72 | removed. This includes EC_GROUP_new(), EC_GFp_mont_method(), | 78 | removed. This includes EC_GROUP_new(), EC_GFp_mont_method(), |
73 | EC_GROUP_method_of() and EC_METHOD_get_field_type(). | 79 | EC_GROUP_method_of() and EC_METHOD_get_field_type(). |
80 | - The precomputation stubs for EC_GROUP were removed. | ||
81 | - The API setting Jacobian projective coordinates for a point was | ||
82 | removed as were EC_POINTs_{mul,make_affine}(). | ||
74 | - All elliptic curves over fields with less than 224 bits and a | 83 | - All elliptic curves over fields with less than 224 bits and a |
75 | few more were removed from the built-in curves. This includes | 84 | few more were removed from the built-in curves. This includes |
76 | all WTLS curves and P-192. | 85 | all WTLS curves and P-192. |
@@ -79,26 +88,24 @@ LibreSSL Portable Release Notes: | |||
79 | - Removed the -C option to generate "C code" from the openssl(1) | 88 | - Removed the -C option to generate "C code" from the openssl(1) |
80 | dh, dhparam, dsaparam, ecparam, and x509 subcommands. | 89 | dh, dhparam, dsaparam, ecparam, and x509 subcommands. |
81 | - Removed #error in headers when OPENSSL_NO_* is defined. | 90 | - Removed #error in headers when OPENSSL_NO_* is defined. |
82 | - EC_METHOD is no longer public and all public API directly using | ||
83 | it was removed. This includes EC_GROUP_new(), EC_GFp_mont_method() | ||
84 | EC_{GROUP,POINT}_method_of() and EC_METHOD_get_field_type(). | ||
85 | - The precomputation stubs for EC_GROUP were removed. | ||
86 | - The API setting Jacobian projective coordinates for a point was | ||
87 | removed as were EC_POINTs_{mul,make_affine}(). | ||
88 | - CRYPTO_set_mem_functions() now matches OpenSSL 1.1 and | 91 | - CRYPTO_set_mem_functions() now matches OpenSSL 1.1 and |
89 | CRYPTO_set_mem_ex_functions() was removed. | 92 | CRYPTO_set_mem_ex_functions() was removed. |
90 | - X509_NAME_print() and X509_OBJECT_up_ref_count() are no longer public. | 93 | - The tls_session_secret_cb_fn type now matches OpenSSL 1.1. |
94 | - Unexport X509_NAME_print() and X509_OBJECT_up_ref_count(). | ||
91 | - const corrected UI_OpenSSL() and BN_MONT_CTX_copy(). | 95 | - const corrected UI_OpenSSL() and BN_MONT_CTX_copy(). |
92 | - Support OPENSSL_NO_FILENAMES. | 96 | - Support OPENSSL_NO_FILENAMES. |
93 | - Support SSL_OP_NO_RENEGOTIATION and SSL_OP_ALLOW_CLIENT_RENEGOTIATION. | 97 | - Support SSL_OP_NO_RENEGOTIATION and SSL_OP_ALLOW_CLIENT_RENEGOTIATION. |
98 | - Export PKCS12_key_gen_uni() again. | ||
94 | * New features | 99 | * New features |
95 | - libtls has a new tls_peer_cert_common_name() API call to retrieve | 100 | - libtls has a new tls_peer_cert_common_name() API call to retrieve |
96 | the peer's common name without having to inspect the PEM. | 101 | the peer's common name without having to inspect the PEM. |
97 | - Imported ML-KEM 768 and 1024 from BoringSSL (not yet public API). | ||
98 | * Bug fixes | 102 | * Bug fixes |
99 | - Plugged a leak in eckey_compute_pubkey(). | 103 | - Plugged a leak in eckey_compute_pubkey(). |
100 | - Again allow the magic values -1, -2 and -3 for the salt length | 104 | - Again allow the magic values -1, -2 and -3 for the salt length |
101 | of an RSA-PSS key in the EVP_PKEY_CTX_ctrl_str() interface. | 105 | of an RSA-PSS key in the EVP_PKEY_CTX_ctrl_str() interface. |
106 | * Documentation | ||
107 | - The remaining undocumented public EVP API is now documented. | ||
108 | Reorganization of existing documentation for clarity and accuracy. | ||
102 | * Testing and proactive security | 109 | * Testing and proactive security |
103 | - Improved regress coverage of the EC code. | 110 | - Improved regress coverage of the EC code. |
104 | 111 | ||
diff --git a/configure.ac b/configure.ac index 864a4ad..7a88f27 100644 --- a/configure.ac +++ b/configure.ac | |||
@@ -86,16 +86,17 @@ AS_CASE([$host_cpu], | |||
86 | ) | 86 | ) |
87 | AM_CONDITIONAL([HOST_CPU_IS_INTEL], [test "x$HOSTARCH" = "xintel"]) | 87 | AM_CONDITIONAL([HOST_CPU_IS_INTEL], [test "x$HOSTARCH" = "xintel"]) |
88 | 88 | ||
89 | AM_CONDITIONAL([HOST_AARCH64], [test "$host_cpu" = "aarch64"]) | 89 | AM_CONDITIONAL([HOST_AARCH64], [test "$host_cpu" = "aarch64"]) |
90 | AM_CONDITIONAL([HOST_ARM], [test "$host_cpu" = "arm"]) | 90 | AM_CONDITIONAL([HOST_ARM], [test "$host_cpu" = "arm"]) |
91 | AM_CONDITIONAL([HOST_I386], [test "$host_cpu" = "i386"]) | 91 | AM_CONDITIONAL([HOST_I386], [test "$host_cpu" = "i386"]) |
92 | AM_CONDITIONAL([HOST_MIPS], [test "$host_cpu" = "mips"]) | 92 | AM_CONDITIONAL([HOST_LOONGARCH64], [test "$host_cpu" = "loongarch64"]) |
93 | AM_CONDITIONAL([HOST_MIPS64], [test "$host_cpu" = "mips64"]) | 93 | AM_CONDITIONAL([HOST_MIPS], [test "$host_cpu" = "mips"]) |
94 | AM_CONDITIONAL([HOST_POWERPC], [test "$host_cpu" = "powerpc"]) | 94 | AM_CONDITIONAL([HOST_MIPS64], [test "$host_cpu" = "mips64"]) |
95 | AM_CONDITIONAL([HOST_POWERPC64], [test "$host_cpu" = "ppc64"]) | 95 | AM_CONDITIONAL([HOST_POWERPC], [test "$host_cpu" = "powerpc"]) |
96 | AM_CONDITIONAL([HOST_RISCV64], [test "$host_cpu" = "riscv64"]) | 96 | AM_CONDITIONAL([HOST_POWERPC64], [test "$host_cpu" = "ppc64"]) |
97 | AM_CONDITIONAL([HOST_SPARC64], [test "$host_cpu" = "sparc64"]) | 97 | AM_CONDITIONAL([HOST_RISCV64], [test "$host_cpu" = "riscv64"]) |
98 | AM_CONDITIONAL([HOST_X86_64], [test "$host_cpu" = "x86_64"]) | 98 | AM_CONDITIONAL([HOST_SPARC64], [test "$host_cpu" = "sparc64"]) |
99 | AM_CONDITIONAL([HOST_X86_64], [test "$host_cpu" = "x86_64"]) | ||
99 | 100 | ||
100 | AC_MSG_CHECKING([if .gnu.warning accepts long strings]) | 101 | AC_MSG_CHECKING([if .gnu.warning accepts long strings]) |
101 | AC_LINK_IFELSE([AC_LANG_SOURCE([[ | 102 | AC_LINK_IFELSE([AC_LANG_SOURCE([[ |
diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt index e642b01..64bccd8 100644 --- a/crypto/CMakeLists.txt +++ b/crypto/CMakeLists.txt | |||
@@ -774,11 +774,14 @@ elseif(HOST_ARM) | |||
774 | elseif(HOST_I386) | 774 | elseif(HOST_I386) |
775 | target_include_directories(crypto_obj PRIVATE arch/i386/) | 775 | target_include_directories(crypto_obj PRIVATE arch/i386/) |
776 | target_include_directories(crypto_obj PRIVATE bn/arch/i386/) | 776 | target_include_directories(crypto_obj PRIVATE bn/arch/i386/) |
777 | elseif(HOST_LOONGARCH64) | ||
778 | target_include_directories(crypto_obj PRIVATE arch/loongarch64) | ||
779 | target_include_directories(crypto_obj PRIVATE bn/arch/loongarch64) | ||
777 | elseif(HOST_MIPS64) | 780 | elseif(HOST_MIPS64) |
778 | target_include_directories(crypto_obj PRIVATE arch/mips64) | 781 | target_include_directories(crypto_obj PRIVATE arch/mips64) |
779 | target_include_directories(crypto_obj PRIVATE bn/arch/mips64) | 782 | target_include_directories(crypto_obj PRIVATE bn/arch/mips64) |
780 | elseif(HOST_MIPS) | 783 | elseif(HOST_MIPS) |
781 | # XXX - can this go away? the directory doesn't exist... | 784 | target_include_directories(crypto_obj PRIVATE arch/mips) |
782 | target_include_directories(crypto_obj PRIVATE bn/arch/mips) | 785 | target_include_directories(crypto_obj PRIVATE bn/arch/mips) |
783 | elseif(HOST_POWERPC) | 786 | elseif(HOST_POWERPC) |
784 | target_include_directories(crypto_obj PRIVATE arch/powerpc) | 787 | target_include_directories(crypto_obj PRIVATE arch/powerpc) |
diff --git a/crypto/Makefile.am b/crypto/Makefile.am index 438da8b..d1c5b76 100644 --- a/crypto/Makefile.am +++ b/crypto/Makefile.am | |||
@@ -396,10 +396,18 @@ endif | |||
396 | noinst_HEADERS += arch/i386/crypto_arch.h | 396 | noinst_HEADERS += arch/i386/crypto_arch.h |
397 | noinst_HEADERS += bn/arch/i386/bn_arch.h | 397 | noinst_HEADERS += bn/arch/i386/bn_arch.h |
398 | 398 | ||
399 | # XXX - do we still need this? | 399 | if HOST_LOONGARCH64 |
400 | libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/loongarch64/ | ||
401 | libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/loongarch64/ | ||
402 | endif | ||
403 | noinst_HEADERS += arch/loongarch64/crypto_arch.h | ||
404 | noinst_HEADERS += bn/arch/loongarch64/bn_arch.h | ||
405 | |||
400 | if HOST_MIPS | 406 | if HOST_MIPS |
407 | libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/mips/ | ||
401 | libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/mips/ | 408 | libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/mips/ |
402 | endif | 409 | endif |
410 | noinst_HEADERS += arch/mips/crypto_arch.h | ||
403 | noinst_HEADERS += bn/arch/mips/bn_arch.h | 411 | noinst_HEADERS += bn/arch/mips/bn_arch.h |
404 | 412 | ||
405 | if HOST_MIPS64 | 413 | if HOST_MIPS64 |
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/include/CMakeLists.txt b/include/CMakeLists.txt index 59f5b62..11ab7c2 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt | |||
@@ -24,6 +24,8 @@ elseif(HOST_ARM) | |||
24 | file(READ arch/arm/opensslconf.h OPENSSLCONF) | 24 | file(READ arch/arm/opensslconf.h OPENSSLCONF) |
25 | elseif(HOST_I386) | 25 | elseif(HOST_I386) |
26 | file(READ arch/i386/opensslconf.h OPENSSLCONF) | 26 | file(READ arch/i386/opensslconf.h OPENSSLCONF) |
27 | elseif(HOST_LOONGARCH64) | ||
28 | file(READ arch/loongarch64/opensslconf.h OPENSSLCONF) | ||
27 | elseif(HOST_MIPS) | 29 | elseif(HOST_MIPS) |
28 | file(READ arch/mips/opensslconf.h OPENSSLCONF) | 30 | file(READ arch/mips/opensslconf.h OPENSSLCONF) |
29 | elseif(HOST_MIPS64) | 31 | elseif(HOST_MIPS64) |
diff --git a/include/arch/loongarch64/opensslconf.h b/include/arch/loongarch64/opensslconf.h new file mode 100644 index 0000000..731b06a --- /dev/null +++ b/include/arch/loongarch64/opensslconf.h | |||
@@ -0,0 +1,154 @@ | |||
1 | #include <openssl/opensslfeatures.h> | ||
2 | /* crypto/opensslconf.h.in */ | ||
3 | |||
4 | #if defined(HEADER_CRYPTO_LOCAL_H) && !defined(OPENSSLDIR) | ||
5 | #define OPENSSLDIR "/etc/ssl" | ||
6 | #endif | ||
7 | |||
8 | #undef OPENSSL_EXPORT_VAR_AS_FUNCTION | ||
9 | |||
10 | #ifndef OPENSSL_FILE | ||
11 | #ifdef OPENSSL_NO_FILENAMES | ||
12 | #define OPENSSL_FILE "" | ||
13 | #define OPENSSL_LINE 0 | ||
14 | #else | ||
15 | #define OPENSSL_FILE __FILE__ | ||
16 | #define OPENSSL_LINE __LINE__ | ||
17 | #endif | ||
18 | #endif | ||
19 | |||
20 | #if defined(HEADER_IDEA_H) && !defined(IDEA_INT) | ||
21 | #define IDEA_INT unsigned int | ||
22 | #endif | ||
23 | |||
24 | #if defined(HEADER_MD2_H) && !defined(MD2_INT) | ||
25 | #define MD2_INT unsigned int | ||
26 | #endif | ||
27 | |||
28 | #if defined(HEADER_RC2_H) && !defined(RC2_INT) | ||
29 | /* I need to put in a mod for the alpha - eay */ | ||
30 | #define RC2_INT unsigned int | ||
31 | #endif | ||
32 | |||
33 | #if defined(HEADER_RC4_H) | ||
34 | #if !defined(RC4_INT) | ||
35 | /* using int types make the structure larger but make the code faster | ||
36 | * on most boxes I have tested - up to %20 faster. */ | ||
37 | /* | ||
38 | * I don't know what does "most" mean, but declaring "int" is a must on: | ||
39 | * - Intel P6 because partial register stalls are very expensive; | ||
40 | * - elder Alpha because it lacks byte load/store instructions; | ||
41 | */ | ||
42 | #define RC4_INT unsigned int | ||
43 | #endif | ||
44 | #if !defined(RC4_CHUNK) | ||
45 | /* | ||
46 | * This enables code handling data aligned at natural CPU word | ||
47 | * boundary. See crypto/rc4/rc4_enc.c for further details. | ||
48 | */ | ||
49 | #define RC4_CHUNK unsigned long | ||
50 | #endif | ||
51 | #endif | ||
52 | |||
53 | #if (defined(HEADER_NEW_DES_H) || defined(HEADER_DES_H)) && !defined(DES_LONG) | ||
54 | /* If this is set to 'unsigned int' on a DEC Alpha, this gives about a | ||
55 | * %20 speed up (longs are 8 bytes, int's are 4). */ | ||
56 | #ifndef DES_LONG | ||
57 | #define DES_LONG unsigned int | ||
58 | #endif | ||
59 | #endif | ||
60 | |||
61 | #if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H) | ||
62 | #define CONFIG_HEADER_BN_H | ||
63 | #undef BN_LLONG | ||
64 | |||
65 | /* Should we define BN_DIV2W here? */ | ||
66 | |||
67 | /* Only one for the following should be defined */ | ||
68 | /* The prime number generation stuff may not work when | ||
69 | * EIGHT_BIT but I don't care since I've only used this mode | ||
70 | * for debugging the bignum libraries */ | ||
71 | #define SIXTY_FOUR_BIT_LONG | ||
72 | #undef SIXTY_FOUR_BIT | ||
73 | #undef THIRTY_TWO_BIT | ||
74 | #undef SIXTEEN_BIT | ||
75 | #undef EIGHT_BIT | ||
76 | #endif | ||
77 | |||
78 | #if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H) | ||
79 | #define CONFIG_HEADER_BF_LOCL_H | ||
80 | #undef BF_PTR | ||
81 | #endif /* HEADER_BF_LOCL_H */ | ||
82 | |||
83 | #if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H) | ||
84 | #define CONFIG_HEADER_DES_LOCL_H | ||
85 | #ifndef DES_DEFAULT_OPTIONS | ||
86 | /* the following is tweaked from a config script, that is why it is a | ||
87 | * protected undef/define */ | ||
88 | #ifndef DES_PTR | ||
89 | #undef DES_PTR | ||
90 | #endif | ||
91 | |||
92 | /* This helps C compiler generate the correct code for multiple functional | ||
93 | * units. It reduces register dependencies at the expense of 2 more | ||
94 | * registers */ | ||
95 | #ifndef DES_RISC1 | ||
96 | #undef DES_RISC1 | ||
97 | #endif | ||
98 | |||
99 | #ifndef DES_RISC2 | ||
100 | #undef DES_RISC2 | ||
101 | #endif | ||
102 | |||
103 | #if defined(DES_RISC1) && defined(DES_RISC2) | ||
104 | YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!! | ||
105 | #endif | ||
106 | |||
107 | /* Unroll the inner loop, this sometimes helps, sometimes hinders. | ||
108 | * Very much CPU dependent */ | ||
109 | #ifndef DES_UNROLL | ||
110 | #define DES_UNROLL | ||
111 | #endif | ||
112 | |||
113 | /* These default values were supplied by | ||
114 | * Peter Gutman <pgut001@cs.auckland.ac.nz> | ||
115 | * They are only used if nothing else has been defined */ | ||
116 | #if !defined(DES_PTR) && !defined(DES_RISC1) && !defined(DES_RISC2) && !defined(DES_UNROLL) | ||
117 | /* Special defines which change the way the code is built depending on the | ||
118 | CPU and OS. For SGI machines you can use _MIPS_SZLONG (32 or 64) to find | ||
119 | even newer MIPS CPU's, but at the moment one size fits all for | ||
120 | optimization options. Older Sparc's work better with only UNROLL, but | ||
121 | there's no way to tell at compile time what it is you're running on */ | ||
122 | |||
123 | #if defined( sun ) /* Newer Sparc's */ | ||
124 | # define DES_PTR | ||
125 | # define DES_RISC1 | ||
126 | # define DES_UNROLL | ||
127 | #elif defined( __ultrix ) /* Older MIPS */ | ||
128 | # define DES_PTR | ||
129 | # define DES_RISC2 | ||
130 | # define DES_UNROLL | ||
131 | #elif defined( __osf1__ ) /* Alpha */ | ||
132 | # define DES_PTR | ||
133 | # define DES_RISC2 | ||
134 | #elif defined ( _AIX ) /* RS6000 */ | ||
135 | /* Unknown */ | ||
136 | #elif defined( __hpux ) /* HP-PA */ | ||
137 | /* Unknown */ | ||
138 | #elif defined( __aux ) /* 68K */ | ||
139 | /* Unknown */ | ||
140 | #elif defined( __dgux ) /* 88K (but P6 in latest boxes) */ | ||
141 | # define DES_UNROLL | ||
142 | #elif defined( __sgi ) /* Newer MIPS */ | ||
143 | # define DES_PTR | ||
144 | # define DES_RISC2 | ||
145 | # define DES_UNROLL | ||
146 | #elif defined(i386) || defined(__i386__) /* x86 boxes, should be gcc */ | ||
147 | # define DES_PTR | ||
148 | # define DES_RISC1 | ||
149 | # define DES_UNROLL | ||
150 | #endif /* Systems-specific speed defines */ | ||
151 | #endif | ||
152 | |||
153 | #endif /* DES_DEFAULT_OPTIONS */ | ||
154 | #endif /* HEADER_DES_LOCL_H */ | ||
diff --git a/include/arch/mips/opensslconf.h b/include/arch/mips/opensslconf.h index f17d3d2..a5d26b6 100644 --- a/include/arch/mips/opensslconf.h +++ b/include/arch/mips/opensslconf.h | |||
@@ -1,15 +1,22 @@ | |||
1 | #include <openssl/opensslfeatures.h> | 1 | #include <openssl/opensslfeatures.h> |
2 | /* crypto/opensslconf.h.in */ | 2 | /* crypto/opensslconf.h.in */ |
3 | 3 | ||
4 | #if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR) | 4 | #if defined(HEADER_CRYPTO_LOCAL_H) && !defined(OPENSSLDIR) |
5 | #define OPENSSLDIR "/etc/ssl" | 5 | #define OPENSSLDIR "/etc/ssl" |
6 | #endif | 6 | #endif |
7 | 7 | ||
8 | #undef OPENSSL_UNISTD | ||
9 | #define OPENSSL_UNISTD <unistd.h> | ||
10 | |||
11 | #undef OPENSSL_EXPORT_VAR_AS_FUNCTION | 8 | #undef OPENSSL_EXPORT_VAR_AS_FUNCTION |
12 | 9 | ||
10 | #ifndef OPENSSL_FILE | ||
11 | #ifdef OPENSSL_NO_FILENAMES | ||
12 | #define OPENSSL_FILE "" | ||
13 | #define OPENSSL_LINE 0 | ||
14 | #else | ||
15 | #define OPENSSL_FILE __FILE__ | ||
16 | #define OPENSSL_LINE __LINE__ | ||
17 | #endif | ||
18 | #endif | ||
19 | |||
13 | #if defined(HEADER_IDEA_H) && !defined(IDEA_INT) | 20 | #if defined(HEADER_IDEA_H) && !defined(IDEA_INT) |
14 | #define IDEA_INT unsigned int | 21 | #define IDEA_INT unsigned int |
15 | #endif | 22 | #endif |
@@ -68,13 +75,6 @@ | |||
68 | #undef EIGHT_BIT | 75 | #undef EIGHT_BIT |
69 | #endif | 76 | #endif |
70 | 77 | ||
71 | #if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H) | ||
72 | #define CONFIG_HEADER_RC4_LOCL_H | ||
73 | /* if this is defined data[i] is used instead of *data, this is a %20 | ||
74 | * speedup on x86 */ | ||
75 | #define RC4_INDEX | ||
76 | #endif | ||
77 | |||
78 | #if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H) | 78 | #if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H) |
79 | #define CONFIG_HEADER_BF_LOCL_H | 79 | #define CONFIG_HEADER_BF_LOCL_H |
80 | #undef BF_PTR | 80 | #undef BF_PTR |
diff --git a/include/openssl/Makefile.am.tpl b/include/openssl/Makefile.am.tpl index 303d0b9..4bbbd60 100644 --- a/include/openssl/Makefile.am.tpl +++ b/include/openssl/Makefile.am.tpl | |||
@@ -17,6 +17,9 @@ endif | |||
17 | if HOST_I386 | 17 | if HOST_I386 |
18 | -cp $(top_srcdir)/include/arch/i386/opensslconf.h opensslconf.h | 18 | -cp $(top_srcdir)/include/arch/i386/opensslconf.h opensslconf.h |
19 | endif | 19 | endif |
20 | if HOST_LOONGARCH64 | ||
21 | -cp $(top_srcdir)/include/arch/loongarch64/opensslconf.h opensslconf.h | ||
22 | endif | ||
20 | if HOST_MIPS | 23 | if HOST_MIPS |
21 | -cp $(top_srcdir)/include/arch/mips/opensslconf.h opensslconf.h | 24 | -cp $(top_srcdir)/include/arch/mips/opensslconf.h opensslconf.h |
22 | endif | 25 | endif |
diff --git a/scripts/test b/scripts/test index 1fb02eb..a93fe90 100755 --- a/scripts/test +++ b/scripts/test | |||
@@ -132,6 +132,21 @@ elif [ "$ARCH" = "arm32" -o "$ARCH" = "arm64" ]; then | |||
132 | 132 | ||
133 | file apps/openssl/.libs/openssl | 133 | file apps/openssl/.libs/openssl |
134 | 134 | ||
135 | elif [ "$ARCH" = "loong64" ]; then | ||
136 | sudo apt install -y qemu-user-static binfmt-support g++-14-loongarch64-linux-gnu | ||
137 | sudo ln -sf /usr/loongarch64-linux-gnu/lib64/ld-linux-loongarch-lp64d.so.1 /lib64 | ||
138 | |||
139 | CC=loongarch64-linux-gnu-gcc-14 | ||
140 | CXX=loongarch64-linux-gnu++-14 | ||
141 | AR=loongarch64-linux-gnu-ar | ||
142 | STRIP=loongarch64-linux-gnu-strip-14 | ||
143 | RANLIB=loongarch64-linux-gnu-ranlib | ||
144 | |||
145 | ./configure --host=loongarch64-linux-gnu | ||
146 | LD_LIBRARY_PATH=/usr/loongarch64-linux-gnu/lib make -j 4 check | ||
147 | |||
148 | file apps/openssl/openssl | ||
149 | |||
135 | elif [ "$ARCH" = "mips32" -o "$ARCH" = "mips64" ]; then | 150 | elif [ "$ARCH" = "mips32" -o "$ARCH" = "mips64" ]; then |
136 | sudo apt-get install -y qemu-user-static binfmt-support | 151 | sudo apt-get install -y qemu-user-static binfmt-support |
137 | 152 | ||
diff --git a/ssl/CMakeLists.txt b/ssl/CMakeLists.txt index bdcfbb2..cd7e335 100644 --- a/ssl/CMakeLists.txt +++ b/ssl/CMakeLists.txt | |||
@@ -117,10 +117,12 @@ elseif(HOST_ARM) | |||
117 | target_include_directories(ssl_obj PRIVATE ../crypto/arch/arm/) | 117 | target_include_directories(ssl_obj PRIVATE ../crypto/arch/arm/) |
118 | elseif(HOST_I386) | 118 | elseif(HOST_I386) |
119 | target_include_directories(ssl_obj PRIVATE ../crypto/arch/i386/) | 119 | target_include_directories(ssl_obj PRIVATE ../crypto/arch/i386/) |
120 | elseif(HOST_LOONGARCH64) | ||
121 | target_include_directories(ssl_obj PRIVATE ../crypto/arch/loongarch64) | ||
120 | elseif(HOST_MIPS64) | 122 | elseif(HOST_MIPS64) |
121 | target_include_directories(ssl_obj PRIVATE ../crypto/arch/mips64) | 123 | target_include_directories(ssl_obj PRIVATE ../crypto/arch/mips64) |
122 | elseif(HOST_MIPS) | 124 | elseif(HOST_MIPS) |
123 | # XXX - can this go away? the directory doesn't exist... | 125 | target_include_directories(ssl_obj PRIVATE ../crypto/arch/mips) |
124 | elseif(HOST_POWERPC) | 126 | elseif(HOST_POWERPC) |
125 | target_include_directories(ssl_obj PRIVATE ../crypto/arch/powerpc) | 127 | target_include_directories(ssl_obj PRIVATE ../crypto/arch/powerpc) |
126 | elseif(HOST_POWERPC64) | 128 | elseif(HOST_POWERPC64) |
diff --git a/ssl/Makefile.am b/ssl/Makefile.am index f9a66a3..2c84bff 100644 --- a/ssl/Makefile.am +++ b/ssl/Makefile.am | |||
@@ -131,9 +131,15 @@ libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/i386/ | |||
131 | endif | 131 | endif |
132 | noinst_HEADERS += $(top_srcdir)/crypto/arch/i386/crypto_arch.h | 132 | noinst_HEADERS += $(top_srcdir)/crypto/arch/i386/crypto_arch.h |
133 | 133 | ||
134 | # XXX - do we still need this? | 134 | if HOST_LOONGARCH64 |
135 | libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/loongarch64/ | ||
136 | endif | ||
137 | noinst_HEADERS += $(top_srcdir)/crypto/arch/loongarch64/crypto_arch.h | ||
138 | |||
135 | if HOST_MIPS | 139 | if HOST_MIPS |
140 | libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/mips/ | ||
136 | endif | 141 | endif |
142 | noinst_HEADERS += $(top_srcdir)/crypto/arch/mips/crypto_arch.h | ||
137 | 143 | ||
138 | if HOST_MIPS64 | 144 | if HOST_MIPS64 |
139 | libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/mips64/ | 145 | libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/mips64/ |
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 8d6fa9d..d7cc499 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt | |||
@@ -28,10 +28,12 @@ elseif(HOST_ARM) | |||
28 | include_directories(../crypto/arch/arm/) | 28 | include_directories(../crypto/arch/arm/) |
29 | elseif(HOST_I386) | 29 | elseif(HOST_I386) |
30 | include_directories(../crypto/arch/i386/) | 30 | include_directories(../crypto/arch/i386/) |
31 | elseif(HOST_LOONGARCH64) | ||
32 | include_directories(../crypto/arch/loongarch64) | ||
31 | elseif(HOST_MIPS64) | 33 | elseif(HOST_MIPS64) |
32 | include_directories(../crypto/arch/mips64) | 34 | include_directories(../crypto/arch/mips64) |
33 | elseif(HOST_MIPS) | 35 | elseif(HOST_MIPS) |
34 | # XXX - can this go away? the directory doesn't exist... | 36 | include_directories(../crypto/arch/mips) |
35 | elseif(HOST_POWERPC) | 37 | elseif(HOST_POWERPC) |
36 | include_directories(../crypto/arch/powerpc) | 38 | include_directories(../crypto/arch/powerpc) |
37 | elseif(HOST_POWERPC64) | 39 | elseif(HOST_POWERPC64) |
diff --git a/tests/Makefile.am b/tests/Makefile.am index 8153fc9..b58de21 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am | |||
@@ -36,8 +36,12 @@ if HOST_I386 | |||
36 | AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/i386/ | 36 | AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/i386/ |
37 | endif | 37 | endif |
38 | 38 | ||
39 | # XXX - do we still need this? | 39 | if HOST_LOONGARCH64 |
40 | AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/loongarch64/ | ||
41 | endif | ||
42 | |||
40 | if HOST_MIPS | 43 | if HOST_MIPS |
44 | AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/mips/ | ||
41 | endif | 45 | endif |
42 | 46 | ||
43 | if HOST_MIPS64 | 47 | if HOST_MIPS64 |