From: Norbert Pocs Date: Mon, 4 May 2026 13:51:50 +0000 (+0200) Subject: Merge .inc files with header X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2d349da141dd1fbe25e5f221a731b2d73d8a2583;p=thirdparty%2Fopenssl.git Merge .inc files with header When the .inc is only used once, include the file at place. Signed-off-by: Norbert Pocs Reviewed-by: Neil Horman Reviewed-by: Paul Dale Reviewed-by: Nikola Pajkovsky MergeDate: Thu May 7 19:30:01 2026 (Merged from https://github.com/openssl/openssl/pull/31075) --- diff --git a/crypto/asn1/asn1_item_list.c b/crypto/asn1/asn1_item_list.c index 8d4f6daf6a8..b01fb738acd 100644 --- a/crypto/asn1/asn1_item_list.c +++ b/crypto/asn1/asn1_item_list.c @@ -23,9 +23,180 @@ #include #include -/* clang-format off */ -#include "asn1_item_list.inc" -/* clang-format on */ +static ASN1_ITEM_EXP *asn1_item_list[] = { + + ASN1_ITEM_ref(ACCESS_DESCRIPTION), +#ifndef OPENSSL_NO_RFC3779 + ASN1_ITEM_ref(ASIdOrRange), + ASN1_ITEM_ref(ASIdentifierChoice), + ASN1_ITEM_ref(ASIdentifiers), +#endif + ASN1_ITEM_ref(ASN1_ANY), + ASN1_ITEM_ref(ASN1_BIT_STRING), + ASN1_ITEM_ref(ASN1_BMPSTRING), + ASN1_ITEM_ref(ASN1_BOOLEAN), + ASN1_ITEM_ref(ASN1_ENUMERATED), + ASN1_ITEM_ref(ASN1_FBOOLEAN), + ASN1_ITEM_ref(ASN1_GENERALIZEDTIME), + ASN1_ITEM_ref(ASN1_GENERALSTRING), + ASN1_ITEM_ref(ASN1_IA5STRING), + ASN1_ITEM_ref(ASN1_INTEGER), + ASN1_ITEM_ref(ASN1_NULL), + ASN1_ITEM_ref(ASN1_OBJECT), + ASN1_ITEM_ref(ASN1_OCTET_STRING_NDEF), + ASN1_ITEM_ref(ASN1_OCTET_STRING), + ASN1_ITEM_ref(ASN1_PRINTABLESTRING), + ASN1_ITEM_ref(ASN1_PRINTABLE), + ASN1_ITEM_ref(ASN1_SEQUENCE_ANY), + ASN1_ITEM_ref(ASN1_SEQUENCE), + ASN1_ITEM_ref(ASN1_SET_ANY), + ASN1_ITEM_ref(ASN1_T61STRING), + ASN1_ITEM_ref(ASN1_TBOOLEAN), + ASN1_ITEM_ref(ASN1_TIME), + ASN1_ITEM_ref(ASN1_UNIVERSALSTRING), + ASN1_ITEM_ref(ASN1_UTCTIME), + ASN1_ITEM_ref(ASN1_UTF8STRING), + ASN1_ITEM_ref(ASN1_VISIBLESTRING), +#ifndef OPENSSL_NO_RFC3779 + ASN1_ITEM_ref(ASRange), +#endif + ASN1_ITEM_ref(AUTHORITY_INFO_ACCESS), + ASN1_ITEM_ref(AUTHORITY_KEYID), + ASN1_ITEM_ref(BASIC_CONSTRAINTS), + ASN1_ITEM_ref(BIGNUM), + ASN1_ITEM_ref(CBIGNUM), + ASN1_ITEM_ref(CERTIFICATEPOLICIES), +#ifndef OPENSSL_NO_CMS + ASN1_ITEM_ref(CMS_ContentInfo), + ASN1_ITEM_ref(CMS_EnvelopedData), + ASN1_ITEM_ref(CMS_ReceiptRequest), +#endif + ASN1_ITEM_ref(CRL_DIST_POINTS), +#ifndef OPENSSL_NO_DH + ASN1_ITEM_ref(DHparams), +#endif + ASN1_ITEM_ref(DIRECTORYSTRING), + ASN1_ITEM_ref(DISPLAYTEXT), + ASN1_ITEM_ref(DIST_POINT_NAME), + ASN1_ITEM_ref(DIST_POINT), +#ifndef OPENSSL_NO_EC +#ifndef OPENSSL_NO_DEPRECATED_3_0 + ASN1_ITEM_ref(ECPARAMETERS), + ASN1_ITEM_ref(ECPKPARAMETERS), +#endif +#endif + ASN1_ITEM_ref(EDIPARTYNAME), + ASN1_ITEM_ref(EXTENDED_KEY_USAGE), + ASN1_ITEM_ref(GENERAL_NAMES), + ASN1_ITEM_ref(GENERAL_NAME), + ASN1_ITEM_ref(GENERAL_SUBTREE), +#ifndef OPENSSL_NO_RFC3779 + ASN1_ITEM_ref(IPAddressChoice), + ASN1_ITEM_ref(IPAddressFamily), + ASN1_ITEM_ref(IPAddressOrRange), + ASN1_ITEM_ref(IPAddressRange), +#endif + ASN1_ITEM_ref(ISSUING_DIST_POINT), +#ifndef OPENSSL_NO_DEPRECATED_3_0 + ASN1_ITEM_ref(LONG), +#endif + ASN1_ITEM_ref(NAME_CONSTRAINTS), + ASN1_ITEM_ref(NETSCAPE_CERT_SEQUENCE), + ASN1_ITEM_ref(NETSCAPE_SPKAC), + ASN1_ITEM_ref(NETSCAPE_SPKI), + ASN1_ITEM_ref(NOTICEREF), +#ifndef OPENSSL_NO_OCSP + ASN1_ITEM_ref(OCSP_BASICRESP), + ASN1_ITEM_ref(OCSP_CERTID), + ASN1_ITEM_ref(OCSP_CERTSTATUS), + ASN1_ITEM_ref(OCSP_CRLID), + ASN1_ITEM_ref(OCSP_ONEREQ), + ASN1_ITEM_ref(OCSP_REQINFO), + ASN1_ITEM_ref(OCSP_REQUEST), + ASN1_ITEM_ref(OCSP_RESPBYTES), + ASN1_ITEM_ref(OCSP_RESPDATA), + ASN1_ITEM_ref(OCSP_RESPID), + ASN1_ITEM_ref(OCSP_RESPONSE), + ASN1_ITEM_ref(OCSP_REVOKEDINFO), + ASN1_ITEM_ref(OCSP_SERVICELOC), + ASN1_ITEM_ref(OCSP_SIGNATURE), + ASN1_ITEM_ref(OCSP_SINGLERESP), +#endif + ASN1_ITEM_ref(OTHERNAME), + ASN1_ITEM_ref(PBE2PARAM), + ASN1_ITEM_ref(PBEPARAM), + ASN1_ITEM_ref(PBKDF2PARAM), + ASN1_ITEM_ref(PKCS12_AUTHSAFES), + ASN1_ITEM_ref(PKCS12_BAGS), + ASN1_ITEM_ref(PKCS12_MAC_DATA), + ASN1_ITEM_ref(PKCS12_SAFEBAGS), + ASN1_ITEM_ref(PKCS12_SAFEBAG), + ASN1_ITEM_ref(PKCS12), + ASN1_ITEM_ref(PKCS7_ATTR_SIGN), + ASN1_ITEM_ref(PKCS7_ATTR_VERIFY), + ASN1_ITEM_ref(PKCS7_DIGEST), + ASN1_ITEM_ref(PKCS7_ENCRYPT), + ASN1_ITEM_ref(PKCS7_ENC_CONTENT), + ASN1_ITEM_ref(PKCS7_ENVELOPE), + ASN1_ITEM_ref(PKCS7_ISSUER_AND_SERIAL), + ASN1_ITEM_ref(PKCS7_RECIP_INFO), + ASN1_ITEM_ref(PKCS7_SIGNED), + ASN1_ITEM_ref(PKCS7_SIGNER_INFO), + ASN1_ITEM_ref(PKCS7_SIGN_ENVELOPE), + ASN1_ITEM_ref(PKCS7), + ASN1_ITEM_ref(PKCS8_PRIV_KEY_INFO), + ASN1_ITEM_ref(PKEY_USAGE_PERIOD), + ASN1_ITEM_ref(POLICYINFO), + ASN1_ITEM_ref(POLICYQUALINFO), + ASN1_ITEM_ref(POLICY_CONSTRAINTS), + ASN1_ITEM_ref(POLICY_MAPPINGS), + ASN1_ITEM_ref(POLICY_MAPPING), + ASN1_ITEM_ref(PROXY_CERT_INFO_EXTENSION), + ASN1_ITEM_ref(PROXY_POLICY), +#ifndef OPENSSL_NO_DEPRECATED_3_0 + ASN1_ITEM_ref(RSAPrivateKey), + ASN1_ITEM_ref(RSAPublicKey), + ASN1_ITEM_ref(RSA_OAEP_PARAMS), + ASN1_ITEM_ref(RSA_PSS_PARAMS), +#endif +#ifndef OPENSSL_NO_SCRYPT + ASN1_ITEM_ref(SCRYPT_PARAMS), +#endif + ASN1_ITEM_ref(SXNETID), + ASN1_ITEM_ref(SXNET), + ASN1_ITEM_ref(ISSUER_SIGN_TOOL), + ASN1_ITEM_ref(USERNOTICE), + ASN1_ITEM_ref(X509_ACERT), + ASN1_ITEM_ref(X509_ALGORS), + ASN1_ITEM_ref(X509_ALGOR), + ASN1_ITEM_ref(X509_ATTRIBUTE), + ASN1_ITEM_ref(X509_CERT_AUX), + ASN1_ITEM_ref(X509_CINF), + ASN1_ITEM_ref(X509_CRL_INFO), + ASN1_ITEM_ref(X509_CRL), + ASN1_ITEM_ref(X509_EXTENSIONS), + ASN1_ITEM_ref(X509_EXTENSION), + ASN1_ITEM_ref(X509_NAME_ENTRY), + ASN1_ITEM_ref(X509_NAME), + ASN1_ITEM_ref(X509_PUBKEY), + ASN1_ITEM_ref(X509_REQ_INFO), + ASN1_ITEM_ref(X509_REQ), + ASN1_ITEM_ref(X509_REVOKED), + ASN1_ITEM_ref(X509_SIG), + ASN1_ITEM_ref(X509_VAL), + ASN1_ITEM_ref(X509), +#ifndef OPENSSL_NO_DEPRECATED_3_0 + ASN1_ITEM_ref(ZLONG), +#endif + ASN1_ITEM_ref(INT32), + ASN1_ITEM_ref(UINT32), + ASN1_ITEM_ref(ZINT32), + ASN1_ITEM_ref(ZUINT32), + ASN1_ITEM_ref(INT64), + ASN1_ITEM_ref(UINT64), + ASN1_ITEM_ref(ZINT64), + ASN1_ITEM_ref(ZUINT64), +}; const ASN1_ITEM *ASN1_ITEM_lookup(const char *name) { diff --git a/crypto/asn1/asn1_item_list.inc b/crypto/asn1/asn1_item_list.inc deleted file mode 100644 index f26954ecb71..00000000000 --- a/crypto/asn1/asn1_item_list.inc +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright 2000-2024 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -static ASN1_ITEM_EXP *asn1_item_list[] = { - - ASN1_ITEM_ref(ACCESS_DESCRIPTION), -#ifndef OPENSSL_NO_RFC3779 - ASN1_ITEM_ref(ASIdOrRange), - ASN1_ITEM_ref(ASIdentifierChoice), - ASN1_ITEM_ref(ASIdentifiers), -#endif - ASN1_ITEM_ref(ASN1_ANY), - ASN1_ITEM_ref(ASN1_BIT_STRING), - ASN1_ITEM_ref(ASN1_BMPSTRING), - ASN1_ITEM_ref(ASN1_BOOLEAN), - ASN1_ITEM_ref(ASN1_ENUMERATED), - ASN1_ITEM_ref(ASN1_FBOOLEAN), - ASN1_ITEM_ref(ASN1_GENERALIZEDTIME), - ASN1_ITEM_ref(ASN1_GENERALSTRING), - ASN1_ITEM_ref(ASN1_IA5STRING), - ASN1_ITEM_ref(ASN1_INTEGER), - ASN1_ITEM_ref(ASN1_NULL), - ASN1_ITEM_ref(ASN1_OBJECT), - ASN1_ITEM_ref(ASN1_OCTET_STRING_NDEF), - ASN1_ITEM_ref(ASN1_OCTET_STRING), - ASN1_ITEM_ref(ASN1_PRINTABLESTRING), - ASN1_ITEM_ref(ASN1_PRINTABLE), - ASN1_ITEM_ref(ASN1_SEQUENCE_ANY), - ASN1_ITEM_ref(ASN1_SEQUENCE), - ASN1_ITEM_ref(ASN1_SET_ANY), - ASN1_ITEM_ref(ASN1_T61STRING), - ASN1_ITEM_ref(ASN1_TBOOLEAN), - ASN1_ITEM_ref(ASN1_TIME), - ASN1_ITEM_ref(ASN1_UNIVERSALSTRING), - ASN1_ITEM_ref(ASN1_UTCTIME), - ASN1_ITEM_ref(ASN1_UTF8STRING), - ASN1_ITEM_ref(ASN1_VISIBLESTRING), -#ifndef OPENSSL_NO_RFC3779 - ASN1_ITEM_ref(ASRange), -#endif - ASN1_ITEM_ref(AUTHORITY_INFO_ACCESS), - ASN1_ITEM_ref(AUTHORITY_KEYID), - ASN1_ITEM_ref(BASIC_CONSTRAINTS), - ASN1_ITEM_ref(BIGNUM), - ASN1_ITEM_ref(CBIGNUM), - ASN1_ITEM_ref(CERTIFICATEPOLICIES), -#ifndef OPENSSL_NO_CMS - ASN1_ITEM_ref(CMS_ContentInfo), - ASN1_ITEM_ref(CMS_EnvelopedData), - ASN1_ITEM_ref(CMS_ReceiptRequest), -#endif - ASN1_ITEM_ref(CRL_DIST_POINTS), -#ifndef OPENSSL_NO_DH - ASN1_ITEM_ref(DHparams), -#endif - ASN1_ITEM_ref(DIRECTORYSTRING), - ASN1_ITEM_ref(DISPLAYTEXT), - ASN1_ITEM_ref(DIST_POINT_NAME), - ASN1_ITEM_ref(DIST_POINT), -#ifndef OPENSSL_NO_EC -#ifndef OPENSSL_NO_DEPRECATED_3_0 - ASN1_ITEM_ref(ECPARAMETERS), - ASN1_ITEM_ref(ECPKPARAMETERS), -#endif -#endif - ASN1_ITEM_ref(EDIPARTYNAME), - ASN1_ITEM_ref(EXTENDED_KEY_USAGE), - ASN1_ITEM_ref(GENERAL_NAMES), - ASN1_ITEM_ref(GENERAL_NAME), - ASN1_ITEM_ref(GENERAL_SUBTREE), -#ifndef OPENSSL_NO_RFC3779 - ASN1_ITEM_ref(IPAddressChoice), - ASN1_ITEM_ref(IPAddressFamily), - ASN1_ITEM_ref(IPAddressOrRange), - ASN1_ITEM_ref(IPAddressRange), -#endif - ASN1_ITEM_ref(ISSUING_DIST_POINT), -#ifndef OPENSSL_NO_DEPRECATED_3_0 - ASN1_ITEM_ref(LONG), -#endif - ASN1_ITEM_ref(NAME_CONSTRAINTS), - ASN1_ITEM_ref(NETSCAPE_CERT_SEQUENCE), - ASN1_ITEM_ref(NETSCAPE_SPKAC), - ASN1_ITEM_ref(NETSCAPE_SPKI), - ASN1_ITEM_ref(NOTICEREF), -#ifndef OPENSSL_NO_OCSP - ASN1_ITEM_ref(OCSP_BASICRESP), - ASN1_ITEM_ref(OCSP_CERTID), - ASN1_ITEM_ref(OCSP_CERTSTATUS), - ASN1_ITEM_ref(OCSP_CRLID), - ASN1_ITEM_ref(OCSP_ONEREQ), - ASN1_ITEM_ref(OCSP_REQINFO), - ASN1_ITEM_ref(OCSP_REQUEST), - ASN1_ITEM_ref(OCSP_RESPBYTES), - ASN1_ITEM_ref(OCSP_RESPDATA), - ASN1_ITEM_ref(OCSP_RESPID), - ASN1_ITEM_ref(OCSP_RESPONSE), - ASN1_ITEM_ref(OCSP_REVOKEDINFO), - ASN1_ITEM_ref(OCSP_SERVICELOC), - ASN1_ITEM_ref(OCSP_SIGNATURE), - ASN1_ITEM_ref(OCSP_SINGLERESP), -#endif - ASN1_ITEM_ref(OTHERNAME), - ASN1_ITEM_ref(PBE2PARAM), - ASN1_ITEM_ref(PBEPARAM), - ASN1_ITEM_ref(PBKDF2PARAM), - ASN1_ITEM_ref(PKCS12_AUTHSAFES), - ASN1_ITEM_ref(PKCS12_BAGS), - ASN1_ITEM_ref(PKCS12_MAC_DATA), - ASN1_ITEM_ref(PKCS12_SAFEBAGS), - ASN1_ITEM_ref(PKCS12_SAFEBAG), - ASN1_ITEM_ref(PKCS12), - ASN1_ITEM_ref(PKCS7_ATTR_SIGN), - ASN1_ITEM_ref(PKCS7_ATTR_VERIFY), - ASN1_ITEM_ref(PKCS7_DIGEST), - ASN1_ITEM_ref(PKCS7_ENCRYPT), - ASN1_ITEM_ref(PKCS7_ENC_CONTENT), - ASN1_ITEM_ref(PKCS7_ENVELOPE), - ASN1_ITEM_ref(PKCS7_ISSUER_AND_SERIAL), - ASN1_ITEM_ref(PKCS7_RECIP_INFO), - ASN1_ITEM_ref(PKCS7_SIGNED), - ASN1_ITEM_ref(PKCS7_SIGNER_INFO), - ASN1_ITEM_ref(PKCS7_SIGN_ENVELOPE), - ASN1_ITEM_ref(PKCS7), - ASN1_ITEM_ref(PKCS8_PRIV_KEY_INFO), - ASN1_ITEM_ref(PKEY_USAGE_PERIOD), - ASN1_ITEM_ref(POLICYINFO), - ASN1_ITEM_ref(POLICYQUALINFO), - ASN1_ITEM_ref(POLICY_CONSTRAINTS), - ASN1_ITEM_ref(POLICY_MAPPINGS), - ASN1_ITEM_ref(POLICY_MAPPING), - ASN1_ITEM_ref(PROXY_CERT_INFO_EXTENSION), - ASN1_ITEM_ref(PROXY_POLICY), -#ifndef OPENSSL_NO_DEPRECATED_3_0 - ASN1_ITEM_ref(RSAPrivateKey), - ASN1_ITEM_ref(RSAPublicKey), - ASN1_ITEM_ref(RSA_OAEP_PARAMS), - ASN1_ITEM_ref(RSA_PSS_PARAMS), -#endif -#ifndef OPENSSL_NO_SCRYPT - ASN1_ITEM_ref(SCRYPT_PARAMS), -#endif - ASN1_ITEM_ref(SXNETID), - ASN1_ITEM_ref(SXNET), - ASN1_ITEM_ref(ISSUER_SIGN_TOOL), - ASN1_ITEM_ref(USERNOTICE), - ASN1_ITEM_ref(X509_ACERT), - ASN1_ITEM_ref(X509_ALGORS), - ASN1_ITEM_ref(X509_ALGOR), - ASN1_ITEM_ref(X509_ATTRIBUTE), - ASN1_ITEM_ref(X509_CERT_AUX), - ASN1_ITEM_ref(X509_CINF), - ASN1_ITEM_ref(X509_CRL_INFO), - ASN1_ITEM_ref(X509_CRL), - ASN1_ITEM_ref(X509_EXTENSIONS), - ASN1_ITEM_ref(X509_EXTENSION), - ASN1_ITEM_ref(X509_NAME_ENTRY), - ASN1_ITEM_ref(X509_NAME), - ASN1_ITEM_ref(X509_PUBKEY), - ASN1_ITEM_ref(X509_REQ_INFO), - ASN1_ITEM_ref(X509_REQ), - ASN1_ITEM_ref(X509_REVOKED), - ASN1_ITEM_ref(X509_SIG), - ASN1_ITEM_ref(X509_VAL), - ASN1_ITEM_ref(X509), -#ifndef OPENSSL_NO_DEPRECATED_3_0 - ASN1_ITEM_ref(ZLONG), -#endif - ASN1_ITEM_ref(INT32), - ASN1_ITEM_ref(UINT32), - ASN1_ITEM_ref(ZINT32), - ASN1_ITEM_ref(ZUINT32), - ASN1_ITEM_ref(INT64), - ASN1_ITEM_ref(UINT64), - ASN1_ITEM_ref(ZINT64), - ASN1_ITEM_ref(ZUINT64), -}; diff --git a/crypto/async/arch/async_null.inc b/crypto/async/arch/async_null.inc deleted file mode 100644 index 6be0b96f9e6..00000000000 --- a/crypto/async/arch/async_null.inc +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#include - -/* - * If we haven't managed to detect any other async architecture then we default - * to NULL. - */ -#ifndef ASYNC_ARCH -#define ASYNC_NULL -#define ASYNC_ARCH - -typedef struct async_fibre_st { - int dummy; -} async_fibre; - -#define async_fibre_swapcontext(o, n, r) 0 -#define async_fibre_makecontext(c) 0 -#define async_fibre_free(f) -#define async_fibre_init_dispatcher(f) -#define async_local_init() 1 -#define async_local_deinit() - -#endif diff --git a/crypto/async/arch/async_posix.inc b/crypto/async/arch/async_posix.inc deleted file mode 100644 index 449ca27d222..00000000000 --- a/crypto/async/arch/async_posix.inc +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 2015-2024 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef OSSL_CRYPTO_ASYNC_POSIX_H -#define OSSL_CRYPTO_ASYNC_POSIX_H -#include - -#if defined(OPENSSL_SYS_UNIX) \ - && defined(OPENSSL_THREADS) && !defined(OPENSSL_NO_ASYNC) \ - && !defined(__ANDROID__) && !defined(__OpenBSD__) \ - && !defined(OPENSSL_SYS_TANDEM) - -#include - -#if _POSIX_VERSION >= 200112L \ - && (_POSIX_VERSION < 200809L || defined(__GLIBC__) || defined(__FreeBSD__)) - -#include - -#define ASYNC_POSIX -#define ASYNC_ARCH - -#if defined(__CET__) || defined(__ia64__) -/* - * When Intel CET is enabled, makecontext will create a different - * shadow stack for each context. async_fibre_swapcontext cannot - * use _longjmp. It must call swapcontext to swap shadow stack as - * well as normal stack. - * On IA64 the register stack engine is not saved across setjmp/longjmp. Here - * swapcontext() performs correctly. - */ -#define USE_SWAPCONTEXT -#endif -#if defined(__aarch64__) && defined(__clang__) \ - && defined(__ARM_FEATURE_BTI_DEFAULT) && __ARM_FEATURE_BTI_DEFAULT == 1 -/* - * setjmp/longjmp don't currently work with BTI on all libc implementations - * when compiled by clang. This is because clang doesn't put a BTI after the - * call to setjmp where it returns the second time. This then fails on libc - * implementations - notably glibc - which use an indirect jump to there. - * So use the swapcontext implementation, which does work. - * See https://github.com/llvm/llvm-project/issues/48888. - */ -#define USE_SWAPCONTEXT -#endif -#if defined(OPENSSL_SYS_TANDEM) -#include -#else -#include -#endif -#ifndef USE_SWAPCONTEXT -#include -#endif - -typedef struct async_fibre_st { - ucontext_t fibre; -#ifndef USE_SWAPCONTEXT - jmp_buf env; - int env_init; -#endif -} async_fibre; - -int async_local_init(void); -void async_local_deinit(void); - -static ossl_inline int async_fibre_swapcontext(async_fibre *o, async_fibre *n, int r) -{ -#ifdef USE_SWAPCONTEXT - swapcontext(&o->fibre, &n->fibre); -#else - o->env_init = 1; - - if (!r || !_setjmp(o->env)) { - if (n->env_init) - _longjmp(n->env, 1); - else - setcontext(&n->fibre); - } -#endif - - return 1; -} - -#define async_fibre_init_dispatcher(d) - -int async_fibre_makecontext(async_fibre *fibre); -void async_fibre_free(async_fibre *fibre); - -#endif -#endif -#endif /* OSSL_CRYPTO_ASYNC_POSIX_H */ diff --git a/crypto/async/arch/async_win.inc b/crypto/async/arch/async_win.inc deleted file mode 100644 index ef134f53ab2..00000000000 --- a/crypto/async/arch/async_win.inc +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -/* - * This is the same detection used in cryptlib to set up the thread local - * storage that we depend on, so just copy that - */ -#if defined(_WIN32) && !defined(OPENSSL_NO_ASYNC) -#include -#define ASYNC_WIN -#define ASYNC_ARCH - -#include -#include "internal/cryptlib.h" - -typedef struct async_fibre_st { - LPVOID fibre; - int converted; -} async_fibre; - -#define async_fibre_swapcontext(o, n, r) \ - (SwitchToFiber((n)->fibre), 1) - -#if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x600 -#define async_fibre_makecontext(c) \ - ((c)->fibre = CreateFiberEx(0, 0, FIBER_FLAG_FLOAT_SWITCH, \ - async_start_func_win, 0)) -#else -#define async_fibre_makecontext(c) \ - ((c)->fibre = CreateFiber(0, async_start_func_win, 0)) -#endif - -#define async_fibre_free(f) (DeleteFiber((f)->fibre)) -#define async_local_init() 1 -#define async_local_deinit() - -int async_fibre_init_dispatcher(async_fibre *fibre); -VOID CALLBACK async_start_func_win(PVOID unused); - -#endif diff --git a/crypto/async/async_local.h b/crypto/async/async_local.h index 9db3103c37e..b41309ac41d 100644 --- a/crypto/async/async_local.h +++ b/crypto/async/async_local.h @@ -19,21 +19,146 @@ #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #endif +#include +#include + +typedef struct async_ctx_st async_ctx; +typedef struct async_pool_st async_pool; + #if defined(_WIN32) +#define ASYNC_WIN +#define ASYNC_ARCH + #include +#include "internal/cryptlib.h" + +typedef struct async_fibre_st { + LPVOID fibre; + int converted; +} async_fibre; + +#define async_fibre_swapcontext(o, n, r) \ + (SwitchToFiber((n)->fibre), 1) + +#if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x600 +#define async_fibre_makecontext(c) \ + ((c)->fibre = CreateFiberEx(0, 0, FIBER_FLAG_FLOAT_SWITCH, \ + async_start_func_win, 0)) +#else +#define async_fibre_makecontext(c) \ + ((c)->fibre = CreateFiber(0, async_start_func_win, 0)) #endif -#include "crypto/async.h" -#include +#define async_fibre_free(f) (DeleteFiber((f)->fibre)) +#define async_local_init() 1 +#define async_local_deinit() -typedef struct async_ctx_st async_ctx; -typedef struct async_pool_st async_pool; +int async_fibre_init_dispatcher(async_fibre *fibre); +VOID CALLBACK async_start_func_win(PVOID unused); + +#elif defined(OPENSSL_SYS_UNIX) \ + && defined(OPENSSL_THREADS) && !defined(OPENSSL_NO_ASYNC) \ + && !defined(__ANDROID__) && !defined(__OpenBSD__) \ + && !defined(OPENSSL_SYS_TANDEM) + +#include + +#if _POSIX_VERSION >= 200112L \ + && (_POSIX_VERSION < 200809L || defined(__GLIBC__) || defined(__FreeBSD__)) + +#include -/* clang-format off */ -#include "arch/async_win.inc" -#include "arch/async_posix.inc" -#include "arch/async_null.inc" -/* clang-format on */ +#define ASYNC_POSIX +#define ASYNC_ARCH + +#if defined(__CET__) || defined(__ia64__) +/* + * When Intel CET is enabled, makecontext will create a different + * shadow stack for each context. async_fibre_swapcontext cannot + * use _longjmp. It must call swapcontext to swap shadow stack as + * well as normal stack. + * On IA64 the register stack engine is not saved across setjmp/longjmp. Here + * swapcontext() performs correctly. + */ +#define USE_SWAPCONTEXT +#endif +#if defined(__aarch64__) && defined(__clang__) \ + && defined(__ARM_FEATURE_BTI_DEFAULT) && __ARM_FEATURE_BTI_DEFAULT == 1 +/* + * setjmp/longjmp don't currently work with BTI on all libc implementations + * when compiled by clang. This is because clang doesn't put a BTI after the + * call to setjmp where it returns the second time. This then fails on libc + * implementations - notably glibc - which use an indirect jump to there. + * So use the swapcontext implementation, which does work. + * See https://github.com/llvm/llvm-project/issues/48888. + */ +#define USE_SWAPCONTEXT +#endif +#if defined(OPENSSL_SYS_TANDEM) +#include +#else +#include +#endif +#ifndef USE_SWAPCONTEXT +#include +#endif + +typedef struct async_fibre_st { + ucontext_t fibre; +#ifndef USE_SWAPCONTEXT + jmp_buf env; + int env_init; +#endif +} async_fibre; + +int async_local_init(void); +void async_local_deinit(void); + +static ossl_inline int async_fibre_swapcontext(async_fibre *o, async_fibre *n, int r) +{ +#ifdef USE_SWAPCONTEXT + swapcontext(&o->fibre, &n->fibre); +#else + o->env_init = 1; + + if (!r || !_setjmp(o->env)) { + if (n->env_init) + _longjmp(n->env, 1); + else + setcontext(&n->fibre); + } +#endif + + return 1; +} + +#define async_fibre_init_dispatcher(d) + +int async_fibre_makecontext(async_fibre *fibre); +void async_fibre_free(async_fibre *fibre); + +#endif +#endif /* UNIX */ + +#ifndef ASYNC_ARCH +#define ASYNC_NULL +#define ASYNC_ARCH + +typedef struct async_fibre_st { + int dummy; +} async_fibre; + +#define async_fibre_swapcontext(o, n, r) 0 +#define async_fibre_makecontext(c) 0 +#define async_fibre_free(f) +#define async_fibre_init_dispatcher(f) +#define async_local_init() 1 +#define async_local_deinit() +#endif + +/* needs to be included after windows.h */ +#include +#include "crypto/async.h" struct async_ctx_st { async_fibre dispatcher; diff --git a/crypto/ec/curve448/arch_32/f_impl.inc b/crypto/ec/curve448/arch_32/f_impl.inc deleted file mode 100644 index 017844c11db..00000000000 --- a/crypto/ec/curve448/arch_32/f_impl.inc +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. - * Copyright 2014-2016 Cryptography Research, Inc. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - * - * Originally written by Mike Hamburg - */ - -#ifndef OSSL_CRYPTO_EC_CURVE448_ARCH_32_F_IMPL_H -#define OSSL_CRYPTO_EC_CURVE448_ARCH_32_F_IMPL_H - -#define GF_HEADROOM 2 -#define LIMB(x) ((x) & ((1 << 28) - 1)), ((x) >> 28) -#define FIELD_LITERAL(a, b, c, d, e, f, g, h) \ - { \ - { \ - LIMB(a), LIMB(b), LIMB(c), LIMB(d), LIMB(e), LIMB(f), LIMB(g), LIMB(h) \ - } \ - } - -#define LIMB_PLACE_VALUE(i) 28 - -void gf_add_RAW(gf out, const gf a, const gf b) -{ - unsigned int i; - - for (i = 0; i < NLIMBS; i++) - out->limb[i] = a->limb[i] + b->limb[i]; -} - -void gf_sub_RAW(gf out, const gf a, const gf b) -{ - unsigned int i; - - for (i = 0; i < NLIMBS; i++) - out->limb[i] = a->limb[i] - b->limb[i]; -} - -void gf_bias(gf a, int amt) -{ - unsigned int i; - uint32_t co1 = ((1 << 28) - 1) * amt, co2 = co1 - amt; - - for (i = 0; i < NLIMBS; i++) - a->limb[i] += (i == NLIMBS / 2) ? co2 : co1; -} - -void gf_weak_reduce(gf a) -{ - uint32_t mask = (1 << 28) - 1; - uint32_t tmp = a->limb[NLIMBS - 1] >> 28; - unsigned int i; - - a->limb[NLIMBS / 2] += tmp; - for (i = NLIMBS - 1; i > 0; i--) - a->limb[i] = (a->limb[i] & mask) + (a->limb[i - 1] >> 28); - a->limb[0] = (a->limb[0] & mask) + tmp; -} - -#endif /* OSSL_CRYPTO_EC_CURVE448_ARCH_32_F_IMPL_H */ diff --git a/crypto/ec/curve448/arch_64/f_impl.inc b/crypto/ec/curve448/arch_64/f_impl.inc deleted file mode 100644 index 3e27820171e..00000000000 --- a/crypto/ec/curve448/arch_64/f_impl.inc +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2017-2022 The OpenSSL Project Authors. All Rights Reserved. - * Copyright 2014-2016 Cryptography Research, Inc. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - * - * Originally written by Mike Hamburg - */ - -#ifndef OSSL_CRYPTO_EC_CURVE448_ARCH_64_F_IMPL_H -#define OSSL_CRYPTO_EC_CURVE448_ARCH_64_F_IMPL_H - -#define GF_HEADROOM 9999 /* Everything is reduced anyway */ -#define FIELD_LITERAL(a, b, c, d, e, f, g, h) \ - { \ - { \ - a, b, c, d, e, f, g, h \ - } \ - } - -#define LIMB_PLACE_VALUE(i) 56 - -void gf_add_RAW(gf out, const gf a, const gf b) -{ - unsigned int i; - - for (i = 0; i < NLIMBS; i++) - out->limb[i] = a->limb[i] + b->limb[i]; - - gf_weak_reduce(out); -} - -void gf_sub_RAW(gf out, const gf a, const gf b) -{ - uint64_t co1 = ((1ULL << 56) - 1) * 2, co2 = co1 - 2; - unsigned int i; - - for (i = 0; i < NLIMBS; i++) - out->limb[i] = a->limb[i] - b->limb[i] + ((i == NLIMBS / 2) ? co2 : co1); - - gf_weak_reduce(out); -} - -void gf_bias(gf a, int amt) -{ -} - -void gf_weak_reduce(gf a) -{ - uint64_t mask = (1ULL << 56) - 1; - uint64_t tmp = a->limb[NLIMBS - 1] >> 56; - unsigned int i; - - a->limb[NLIMBS / 2] += tmp; - for (i = NLIMBS - 1; i > 0; i--) - a->limb[i] = (a->limb[i] & mask) + (a->limb[i - 1] >> 56); - a->limb[0] = (a->limb[0] & mask) + tmp; -} - -#endif /* OSSL_CRYPTO_EC_CURVE448_ARCH_64_F_IMPL_H */ diff --git a/crypto/ec/curve448/field.h b/crypto/ec/curve448/field.h index d27904aa972..850244ee55d 100644 --- a/crypto/ec/curve448/field.h +++ b/crypto/ec/curve448/field.h @@ -69,10 +69,101 @@ mask_t gf_deserialize(gf x, const uint8_t serial[SER_BYTES], int with_hibit, /* clang-format off */ #define LIMBPERM(i) (i) #if (ARCH_WORD_BITS == 32) -#include "arch_32/f_impl.inc" /* Bring in the inline implementations */ +#define GF_HEADROOM 2 +#define LIMB(x) ((x) & ((1 << 28) - 1)), ((x) >> 28) +#define FIELD_LITERAL(a, b, c, d, e, f, g, h) \ + { \ + { \ + LIMB(a), LIMB(b), LIMB(c), LIMB(d), LIMB(e), LIMB(f), LIMB(g), LIMB(h) \ + } \ + } + +#define LIMB_PLACE_VALUE(i) 28 + +void gf_add_RAW(gf out, const gf a, const gf b) +{ + unsigned int i; + + for (i = 0; i < NLIMBS; i++) + out->limb[i] = a->limb[i] + b->limb[i]; +} + +void gf_sub_RAW(gf out, const gf a, const gf b) +{ + unsigned int i; + + for (i = 0; i < NLIMBS; i++) + out->limb[i] = a->limb[i] - b->limb[i]; +} + +void gf_bias(gf a, int amt) +{ + unsigned int i; + uint32_t co1 = ((1 << 28) - 1) * amt, co2 = co1 - amt; + + for (i = 0; i < NLIMBS; i++) + a->limb[i] += (i == NLIMBS / 2) ? co2 : co1; +} + +void gf_weak_reduce(gf a) +{ + uint32_t mask = (1 << 28) - 1; + uint32_t tmp = a->limb[NLIMBS - 1] >> 28; + unsigned int i; + + a->limb[NLIMBS / 2] += tmp; + for (i = NLIMBS - 1; i > 0; i--) + a->limb[i] = (a->limb[i] & mask) + (a->limb[i - 1] >> 28); + a->limb[0] = (a->limb[0] & mask) + tmp; +} #define LIMB_MASK(i) (((1) << LIMB_PLACE_VALUE(i)) - 1) #elif (ARCH_WORD_BITS == 64) -#include "arch_64/f_impl.inc" /* Bring in the inline implementations */ +#define GF_HEADROOM 9999 /* Everything is reduced anyway */ +#define FIELD_LITERAL(a, b, c, d, e, f, g, h) \ + { \ + { \ + a, b, c, d, e, f, g, h \ + } \ + } + +#define LIMB_PLACE_VALUE(i) 56 + +void gf_add_RAW(gf out, const gf a, const gf b) +{ + unsigned int i; + + for (i = 0; i < NLIMBS; i++) + out->limb[i] = a->limb[i] + b->limb[i]; + + gf_weak_reduce(out); +} + +void gf_sub_RAW(gf out, const gf a, const gf b) +{ + uint64_t co1 = ((1ULL << 56) - 1) * 2, co2 = co1 - 2; + unsigned int i; + + for (i = 0; i < NLIMBS; i++) + out->limb[i] = a->limb[i] - b->limb[i] + ((i == NLIMBS / 2) ? co2 : co1); + + gf_weak_reduce(out); +} + +void gf_bias(gf a, int amt) +{ +} + +void gf_weak_reduce(gf a) +{ + uint64_t mask = (1ULL << 56) - 1; + uint64_t tmp = a->limb[NLIMBS - 1] >> 56; + unsigned int i; + + a->limb[NLIMBS / 2] += tmp; + for (i = NLIMBS - 1; i > 0; i--) + a->limb[i] = (a->limb[i] & mask) + (a->limb[i - 1] >> 56); + a->limb[0] = (a->limb[0] & mask) + tmp; +} #define LIMB_MASK(i) (((1ULL) << LIMB_PLACE_VALUE(i)) - 1) #endif /* clang-format on */