aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/linux.yml7
-rw-r--r--.gitignore2
-rw-r--r--CMakeLists.txt8
-rw-r--r--ChangeLog23
-rw-r--r--configure.ac21
-rw-r--r--crypto/CMakeLists.txt5
-rw-r--r--crypto/Makefile.am10
-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--include/CMakeLists.txt2
-rw-r--r--include/arch/loongarch64/opensslconf.h154
-rw-r--r--include/arch/mips/opensslconf.h22
-rw-r--r--include/openssl/Makefile.am.tpl3
-rwxr-xr-xscripts/test15
-rw-r--r--ssl/CMakeLists.txt4
-rw-r--r--ssl/Makefile.am8
-rw-r--r--tests/CMakeLists.txt4
-rw-r--r--tests/Makefile.am6
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 }}"
diff --git a/.gitignore b/.gitignore
index 14917f9..7aff24f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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
73set(BUILD_NC true) 73set(BUILD_NC true)
74 74
75if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
76 add_definitions(-fno-common)
77endif()
78
79if(CMAKE_SYSTEM_NAME MATCHES "OpenBSD") 75if(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=)
131set(CMAKE_POSITION_INDEPENDENT_CODE true) 127set(CMAKE_POSITION_INDEPENDENT_CODE true)
132 128
133if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") 129if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
134 add_definitions(-Wno-pointer-sign) 130 add_compile_options(-Wno-pointer-sign)
135endif() 131endif()
136 132
137if(WIN32) 133if(WIN32)
@@ -389,6 +385,8 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64|amd64|AMD64)")
389elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(i[3-6]86|[xX]86)") 385elseif(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)
388elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "loongarch64")
389 set(HOST_LOONGARCH64 true)
392elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips64") 390elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips64")
393 set(HOST_MIPS64 true) 391 set(HOST_MIPS64 true)
394elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips") 392elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips")
diff --git a/ChangeLog b/ChangeLog
index 02f448c..52aa44d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -31,6 +31,8 @@ LibreSSL Portable Release Notes:
314.1.0 - In development 314.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)
87AM_CONDITIONAL([HOST_CPU_IS_INTEL], [test "x$HOSTARCH" = "xintel"]) 87AM_CONDITIONAL([HOST_CPU_IS_INTEL], [test "x$HOSTARCH" = "xintel"])
88 88
89AM_CONDITIONAL([HOST_AARCH64], [test "$host_cpu" = "aarch64"]) 89AM_CONDITIONAL([HOST_AARCH64], [test "$host_cpu" = "aarch64"])
90AM_CONDITIONAL([HOST_ARM], [test "$host_cpu" = "arm"]) 90AM_CONDITIONAL([HOST_ARM], [test "$host_cpu" = "arm"])
91AM_CONDITIONAL([HOST_I386], [test "$host_cpu" = "i386"]) 91AM_CONDITIONAL([HOST_I386], [test "$host_cpu" = "i386"])
92AM_CONDITIONAL([HOST_MIPS], [test "$host_cpu" = "mips"]) 92AM_CONDITIONAL([HOST_LOONGARCH64], [test "$host_cpu" = "loongarch64"])
93AM_CONDITIONAL([HOST_MIPS64], [test "$host_cpu" = "mips64"]) 93AM_CONDITIONAL([HOST_MIPS], [test "$host_cpu" = "mips"])
94AM_CONDITIONAL([HOST_POWERPC], [test "$host_cpu" = "powerpc"]) 94AM_CONDITIONAL([HOST_MIPS64], [test "$host_cpu" = "mips64"])
95AM_CONDITIONAL([HOST_POWERPC64], [test "$host_cpu" = "ppc64"]) 95AM_CONDITIONAL([HOST_POWERPC], [test "$host_cpu" = "powerpc"])
96AM_CONDITIONAL([HOST_RISCV64], [test "$host_cpu" = "riscv64"]) 96AM_CONDITIONAL([HOST_POWERPC64], [test "$host_cpu" = "ppc64"])
97AM_CONDITIONAL([HOST_SPARC64], [test "$host_cpu" = "sparc64"]) 97AM_CONDITIONAL([HOST_RISCV64], [test "$host_cpu" = "riscv64"])
98AM_CONDITIONAL([HOST_X86_64], [test "$host_cpu" = "x86_64"]) 98AM_CONDITIONAL([HOST_SPARC64], [test "$host_cpu" = "sparc64"])
99AM_CONDITIONAL([HOST_X86_64], [test "$host_cpu" = "x86_64"])
99 100
100AC_MSG_CHECKING([if .gnu.warning accepts long strings]) 101AC_MSG_CHECKING([if .gnu.warning accepts long strings])
101AC_LINK_IFELSE([AC_LANG_SOURCE([[ 102AC_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)
774elseif(HOST_I386) 774elseif(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/)
777elseif(HOST_LOONGARCH64)
778 target_include_directories(crypto_obj PRIVATE arch/loongarch64)
779 target_include_directories(crypto_obj PRIVATE bn/arch/loongarch64)
777elseif(HOST_MIPS64) 780elseif(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)
780elseif(HOST_MIPS) 783elseif(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)
783elseif(HOST_POWERPC) 786elseif(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
396noinst_HEADERS += arch/i386/crypto_arch.h 396noinst_HEADERS += arch/i386/crypto_arch.h
397noinst_HEADERS += bn/arch/i386/bn_arch.h 397noinst_HEADERS += bn/arch/i386/bn_arch.h
398 398
399# XXX - do we still need this? 399if HOST_LOONGARCH64
400libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/loongarch64/
401libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/loongarch64/
402endif
403noinst_HEADERS += arch/loongarch64/crypto_arch.h
404noinst_HEADERS += bn/arch/loongarch64/bn_arch.h
405
400if HOST_MIPS 406if HOST_MIPS
407libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/mips/
401libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/mips/ 408libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/mips/
402endif 409endif
410noinst_HEADERS += arch/mips/crypto_arch.h
403noinst_HEADERS += bn/arch/mips/bn_arch.h 411noinst_HEADERS += bn/arch/mips/bn_arch.h
404 412
405if HOST_MIPS64 413if 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)
25elseif(HOST_I386) 25elseif(HOST_I386)
26 file(READ arch/i386/opensslconf.h OPENSSLCONF) 26 file(READ arch/i386/opensslconf.h OPENSSLCONF)
27elseif(HOST_LOONGARCH64)
28 file(READ arch/loongarch64/opensslconf.h OPENSSLCONF)
27elseif(HOST_MIPS) 29elseif(HOST_MIPS)
28 file(READ arch/mips/opensslconf.h OPENSSLCONF) 30 file(READ arch/mips/opensslconf.h OPENSSLCONF)
29elseif(HOST_MIPS64) 31elseif(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)
104YOU 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
17if HOST_I386 17if HOST_I386
18 -cp $(top_srcdir)/include/arch/i386/opensslconf.h opensslconf.h 18 -cp $(top_srcdir)/include/arch/i386/opensslconf.h opensslconf.h
19endif 19endif
20if HOST_LOONGARCH64
21 -cp $(top_srcdir)/include/arch/loongarch64/opensslconf.h opensslconf.h
22endif
20if HOST_MIPS 23if HOST_MIPS
21 -cp $(top_srcdir)/include/arch/mips/opensslconf.h opensslconf.h 24 -cp $(top_srcdir)/include/arch/mips/opensslconf.h opensslconf.h
22endif 25endif
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
135elif [ "$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
135elif [ "$ARCH" = "mips32" -o "$ARCH" = "mips64" ]; then 150elif [ "$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/)
118elseif(HOST_I386) 118elseif(HOST_I386)
119 target_include_directories(ssl_obj PRIVATE ../crypto/arch/i386/) 119 target_include_directories(ssl_obj PRIVATE ../crypto/arch/i386/)
120elseif(HOST_LOONGARCH64)
121 target_include_directories(ssl_obj PRIVATE ../crypto/arch/loongarch64)
120elseif(HOST_MIPS64) 122elseif(HOST_MIPS64)
121 target_include_directories(ssl_obj PRIVATE ../crypto/arch/mips64) 123 target_include_directories(ssl_obj PRIVATE ../crypto/arch/mips64)
122elseif(HOST_MIPS) 124elseif(HOST_MIPS)
123 # XXX - can this go away? the directory doesn't exist... 125 target_include_directories(ssl_obj PRIVATE ../crypto/arch/mips)
124elseif(HOST_POWERPC) 126elseif(HOST_POWERPC)
125 target_include_directories(ssl_obj PRIVATE ../crypto/arch/powerpc) 127 target_include_directories(ssl_obj PRIVATE ../crypto/arch/powerpc)
126elseif(HOST_POWERPC64) 128elseif(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/
131endif 131endif
132noinst_HEADERS += $(top_srcdir)/crypto/arch/i386/crypto_arch.h 132noinst_HEADERS += $(top_srcdir)/crypto/arch/i386/crypto_arch.h
133 133
134# XXX - do we still need this? 134if HOST_LOONGARCH64
135libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/loongarch64/
136endif
137noinst_HEADERS += $(top_srcdir)/crypto/arch/loongarch64/crypto_arch.h
138
135if HOST_MIPS 139if HOST_MIPS
140libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/mips/
136endif 141endif
142noinst_HEADERS += $(top_srcdir)/crypto/arch/mips/crypto_arch.h
137 143
138if HOST_MIPS64 144if HOST_MIPS64
139libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/mips64/ 145libssl_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/)
29elseif(HOST_I386) 29elseif(HOST_I386)
30 include_directories(../crypto/arch/i386/) 30 include_directories(../crypto/arch/i386/)
31elseif(HOST_LOONGARCH64)
32 include_directories(../crypto/arch/loongarch64)
31elseif(HOST_MIPS64) 33elseif(HOST_MIPS64)
32 include_directories(../crypto/arch/mips64) 34 include_directories(../crypto/arch/mips64)
33elseif(HOST_MIPS) 35elseif(HOST_MIPS)
34 # XXX - can this go away? the directory doesn't exist... 36 include_directories(../crypto/arch/mips)
35elseif(HOST_POWERPC) 37elseif(HOST_POWERPC)
36 include_directories(../crypto/arch/powerpc) 38 include_directories(../crypto/arch/powerpc)
37elseif(HOST_POWERPC64) 39elseif(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
36AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/i386/ 36AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/i386/
37endif 37endif
38 38
39# XXX - do we still need this? 39if HOST_LOONGARCH64
40AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/loongarch64/
41endif
42
40if HOST_MIPS 43if HOST_MIPS
44AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/mips/
41endif 45endif
42 46
43if HOST_MIPS64 47if HOST_MIPS64