aboutsummaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
authorAlexander Smirnov <alex@ydb.tech>2025-02-07 13:56:21 +0000
committerAlexander Smirnov <alex@ydb.tech>2025-02-07 13:56:21 +0000
commitd7e1157d756d10899104a00d009a67cf829deef3 (patch)
tree0f80eabb5c00a3880f8fe2fe94b43ab67e98ce04 /contrib
parent02b921de1e48aceda819779ec9f2e26024cebd96 (diff)
parentf1f926eea7fcf8945c320e5688d850776dcf9d6c (diff)
downloadydb-d7e1157d756d10899104a00d009a67cf829deef3.tar.gz
Merge branch 'rightlib' into merge-libs-250207-1355
Diffstat (limited to 'contrib')
-rw-r--r--contrib/libs/openjpeg/.yandex_meta/override.nix4
-rw-r--r--contrib/libs/openjpeg/CHANGELOG.md56
-rw-r--r--contrib/libs/openjpeg/NEWS.md30
-rw-r--r--contrib/libs/openjpeg/dwt.c224
-rw-r--r--contrib/libs/openjpeg/ht_dec.c6
-rw-r--r--contrib/libs/openjpeg/j2k.c518
-rw-r--r--contrib/libs/openjpeg/j2k.h30
-rw-r--r--contrib/libs/openjpeg/jp2.c12
-rw-r--r--contrib/libs/openjpeg/openjpeg.h14
-rw-r--r--contrib/libs/openjpeg/opj_common.h6
-rw-r--r--contrib/libs/openjpeg/opj_config.h2
-rw-r--r--contrib/libs/openjpeg/opj_config_private-linux.h2
-rw-r--r--contrib/libs/openjpeg/t1.c153
-rw-r--r--contrib/libs/openjpeg/t2.c60
-rw-r--r--contrib/libs/openjpeg/tcd.c6
-rw-r--r--contrib/libs/openjpeg/tcd.h7
-rw-r--r--contrib/libs/openjpeg/ya.make4
-rw-r--r--contrib/libs/openssl/crypto/ya.make1328
-rw-r--r--contrib/libs/openssl/crypto/ya.make.inc1340
-rw-r--r--contrib/libs/openssl/include/crypto/aria.h1
-rw-r--r--contrib/libs/openssl/include/crypto/asn1.h1
-rw-r--r--contrib/libs/openssl/include/crypto/async.h1
-rw-r--r--contrib/libs/openssl/include/crypto/bn.h1
-rw-r--r--contrib/libs/openssl/include/crypto/bn_conf-android-arm.h1
-rw-r--r--contrib/libs/openssl/include/crypto/bn_conf-android-arm64.h1
-rw-r--r--contrib/libs/openssl/include/crypto/bn_conf-android-i686.h1
-rw-r--r--contrib/libs/openssl/include/crypto/bn_conf-android-x86_64.h1
-rw-r--r--contrib/libs/openssl/include/crypto/bn_conf-ios-arm64.h1
-rw-r--r--contrib/libs/openssl/include/crypto/bn_conf-ios-x86_64.h1
-rw-r--r--contrib/libs/openssl/include/crypto/bn_conf-linux-aarch64.h1
-rw-r--r--contrib/libs/openssl/include/crypto/bn_conf-linux-arm.h1
-rw-r--r--contrib/libs/openssl/include/crypto/bn_conf-linux.h1
-rw-r--r--contrib/libs/openssl/include/crypto/bn_conf-win-i686.h1
-rw-r--r--contrib/libs/openssl/include/crypto/bn_conf-win-x86_64.h1
-rw-r--r--contrib/libs/openssl/include/crypto/bn_conf.h1
-rw-r--r--contrib/libs/openssl/include/crypto/bn_dh.h1
-rw-r--r--contrib/libs/openssl/include/crypto/bn_srp.h1
-rw-r--r--contrib/libs/openssl/include/crypto/chacha.h1
-rw-r--r--contrib/libs/openssl/include/crypto/cryptlib.h1
-rw-r--r--contrib/libs/openssl/include/crypto/ctype.h1
-rw-r--r--contrib/libs/openssl/include/crypto/dso_conf-android.h1
-rw-r--r--contrib/libs/openssl/include/crypto/dso_conf-ios-arm64.h1
-rw-r--r--contrib/libs/openssl/include/crypto/dso_conf-linux-aarch64.h1
-rw-r--r--contrib/libs/openssl/include/crypto/dso_conf-linux.h1
-rw-r--r--contrib/libs/openssl/include/crypto/dso_conf-osx-arm64.h1
-rw-r--r--contrib/libs/openssl/include/crypto/dso_conf-win.h1
-rw-r--r--contrib/libs/openssl/include/crypto/dso_conf.h1
-rw-r--r--contrib/libs/openssl/include/crypto/ec.h1
-rw-r--r--contrib/libs/openssl/include/crypto/engine.h1
-rw-r--r--contrib/libs/openssl/include/crypto/err.h1
-rw-r--r--contrib/libs/openssl/include/crypto/evp.h1
-rw-r--r--contrib/libs/openssl/include/crypto/lhash.h1
-rw-r--r--contrib/libs/openssl/include/crypto/md32_common.h1
-rw-r--r--contrib/libs/openssl/include/crypto/objects.h1
-rw-r--r--contrib/libs/openssl/include/crypto/poly1305.h1
-rw-r--r--contrib/libs/openssl/include/crypto/rand.h1
-rw-r--r--contrib/libs/openssl/include/crypto/sha.h1
-rw-r--r--contrib/libs/openssl/include/crypto/siphash.h1
-rw-r--r--contrib/libs/openssl/include/crypto/sm2.h1
-rw-r--r--contrib/libs/openssl/include/crypto/sm2err.h1
-rw-r--r--contrib/libs/openssl/include/crypto/sm3.h1
-rw-r--r--contrib/libs/openssl/include/crypto/sm4.h1
-rw-r--r--contrib/libs/openssl/include/crypto/store.h1
-rw-r--r--contrib/libs/openssl/include/crypto/x509.h1
-rw-r--r--contrib/libs/openssl/include/internal/bio.h1
-rw-r--r--contrib/libs/openssl/include/internal/comp.h1
-rw-r--r--contrib/libs/openssl/include/internal/conf.h1
-rw-r--r--contrib/libs/openssl/include/internal/constant_time.h1
-rw-r--r--contrib/libs/openssl/include/internal/cryptlib.h1
-rw-r--r--contrib/libs/openssl/include/internal/dane.h1
-rw-r--r--contrib/libs/openssl/include/internal/dso.h1
-rw-r--r--contrib/libs/openssl/include/internal/dsoerr.h1
-rw-r--r--contrib/libs/openssl/include/internal/err.h1
-rw-r--r--contrib/libs/openssl/include/internal/nelem.h1
-rw-r--r--contrib/libs/openssl/include/internal/numbers.h1
-rw-r--r--contrib/libs/openssl/include/internal/o_dir.h1
-rw-r--r--contrib/libs/openssl/include/internal/o_str.h1
-rw-r--r--contrib/libs/openssl/include/internal/refcount.h1
-rw-r--r--contrib/libs/openssl/include/internal/sockets.h1
-rw-r--r--contrib/libs/openssl/include/internal/sslconf.h1
-rw-r--r--contrib/libs/openssl/include/internal/thread_once.h1
-rw-r--r--contrib/libs/openssl/include/internal/tsan_assist.h1
-rw-r--r--contrib/libs/openssl/include/openssl/aes.h1
-rw-r--r--contrib/libs/openssl/include/openssl/asn1.h1
-rw-r--r--contrib/libs/openssl/include/openssl/asn1_mac.h1
-rw-r--r--contrib/libs/openssl/include/openssl/asn1err.h1
-rw-r--r--contrib/libs/openssl/include/openssl/asn1t.h1
-rw-r--r--contrib/libs/openssl/include/openssl/async.h1
-rw-r--r--contrib/libs/openssl/include/openssl/asyncerr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/bio.h1
-rw-r--r--contrib/libs/openssl/include/openssl/bioerr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/blowfish.h1
-rw-r--r--contrib/libs/openssl/include/openssl/bn.h1
-rw-r--r--contrib/libs/openssl/include/openssl/bnerr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/buffer.h1
-rw-r--r--contrib/libs/openssl/include/openssl/buffererr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/camellia.h1
-rw-r--r--contrib/libs/openssl/include/openssl/cast.h1
-rw-r--r--contrib/libs/openssl/include/openssl/cmac.h1
-rw-r--r--contrib/libs/openssl/include/openssl/cms.h1
-rw-r--r--contrib/libs/openssl/include/openssl/cmserr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/comp.h1
-rw-r--r--contrib/libs/openssl/include/openssl/comperr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/conf.h1
-rw-r--r--contrib/libs/openssl/include/openssl/conf_api.h1
-rw-r--r--contrib/libs/openssl/include/openssl/conferr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/crypto.h1
-rw-r--r--contrib/libs/openssl/include/openssl/cryptoerr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/ct.h1
-rw-r--r--contrib/libs/openssl/include/openssl/cterr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/des.h1
-rw-r--r--contrib/libs/openssl/include/openssl/dh.h1
-rw-r--r--contrib/libs/openssl/include/openssl/dherr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/dsa.h1
-rw-r--r--contrib/libs/openssl/include/openssl/dsaerr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/dtls1.h1
-rw-r--r--contrib/libs/openssl/include/openssl/e_os2.h1
-rw-r--r--contrib/libs/openssl/include/openssl/ebcdic.h1
-rw-r--r--contrib/libs/openssl/include/openssl/ec.h1
-rw-r--r--contrib/libs/openssl/include/openssl/ecdh.h1
-rw-r--r--contrib/libs/openssl/include/openssl/ecdsa.h1
-rw-r--r--contrib/libs/openssl/include/openssl/ecerr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/engine.h1
-rw-r--r--contrib/libs/openssl/include/openssl/engineerr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/err.h1
-rw-r--r--contrib/libs/openssl/include/openssl/evp.h1
-rw-r--r--contrib/libs/openssl/include/openssl/evperr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/hmac.h1
-rw-r--r--contrib/libs/openssl/include/openssl/idea.h1
-rw-r--r--contrib/libs/openssl/include/openssl/kdf.h1
-rw-r--r--contrib/libs/openssl/include/openssl/kdferr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/lhash.h1
-rw-r--r--contrib/libs/openssl/include/openssl/md2.h1
-rw-r--r--contrib/libs/openssl/include/openssl/md4.h1
-rw-r--r--contrib/libs/openssl/include/openssl/md5.h1
-rw-r--r--contrib/libs/openssl/include/openssl/mdc2.h1
-rw-r--r--contrib/libs/openssl/include/openssl/modes.h1
-rw-r--r--contrib/libs/openssl/include/openssl/obj_mac.h1
-rw-r--r--contrib/libs/openssl/include/openssl/objects.h1
-rw-r--r--contrib/libs/openssl/include/openssl/objectserr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/ocsp.h1
-rw-r--r--contrib/libs/openssl/include/openssl/ocsperr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/opensslconf-android-arm.h1
-rw-r--r--contrib/libs/openssl/include/openssl/opensslconf-android-arm64.h1
-rw-r--r--contrib/libs/openssl/include/openssl/opensslconf-android-i686.h1
-rw-r--r--contrib/libs/openssl/include/openssl/opensslconf-android-x86_64.h1
-rw-r--r--contrib/libs/openssl/include/openssl/opensslconf-ios-arm64.h1
-rw-r--r--contrib/libs/openssl/include/openssl/opensslconf-ios-x86_64.h1
-rw-r--r--contrib/libs/openssl/include/openssl/opensslconf-linux-aarch64.h1
-rw-r--r--contrib/libs/openssl/include/openssl/opensslconf-linux-arm.h1
-rw-r--r--contrib/libs/openssl/include/openssl/opensslconf-linux.h1
-rw-r--r--contrib/libs/openssl/include/openssl/opensslconf-osx-arm64.h1
-rw-r--r--contrib/libs/openssl/include/openssl/opensslconf-osx.h1
-rw-r--r--contrib/libs/openssl/include/openssl/opensslconf-win-i686.h1
-rw-r--r--contrib/libs/openssl/include/openssl/opensslconf-win-x86_64.h1
-rw-r--r--contrib/libs/openssl/include/openssl/opensslconf.h1
-rw-r--r--contrib/libs/openssl/include/openssl/opensslv.h1
-rw-r--r--contrib/libs/openssl/include/openssl/ossl_typ.h1
-rw-r--r--contrib/libs/openssl/include/openssl/pem.h1
-rw-r--r--contrib/libs/openssl/include/openssl/pem2.h1
-rw-r--r--contrib/libs/openssl/include/openssl/pemerr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/pkcs12.h1
-rw-r--r--contrib/libs/openssl/include/openssl/pkcs12err.h1
-rw-r--r--contrib/libs/openssl/include/openssl/pkcs7.h1
-rw-r--r--contrib/libs/openssl/include/openssl/pkcs7err.h1
-rw-r--r--contrib/libs/openssl/include/openssl/rand.h1
-rw-r--r--contrib/libs/openssl/include/openssl/rand_drbg.h1
-rw-r--r--contrib/libs/openssl/include/openssl/randerr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/rc2.h1
-rw-r--r--contrib/libs/openssl/include/openssl/rc4.h1
-rw-r--r--contrib/libs/openssl/include/openssl/rc5.h1
-rw-r--r--contrib/libs/openssl/include/openssl/ripemd.h1
-rw-r--r--contrib/libs/openssl/include/openssl/rsa.h1
-rw-r--r--contrib/libs/openssl/include/openssl/rsaerr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/safestack.h1
-rw-r--r--contrib/libs/openssl/include/openssl/seed.h1
-rw-r--r--contrib/libs/openssl/include/openssl/sha.h1
-rw-r--r--contrib/libs/openssl/include/openssl/srp.h1
-rw-r--r--contrib/libs/openssl/include/openssl/srtp.h1
-rw-r--r--contrib/libs/openssl/include/openssl/ssl.h1
-rw-r--r--contrib/libs/openssl/include/openssl/ssl2.h1
-rw-r--r--contrib/libs/openssl/include/openssl/ssl3.h1
-rw-r--r--contrib/libs/openssl/include/openssl/sslerr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/stack.h1
-rw-r--r--contrib/libs/openssl/include/openssl/store.h1
-rw-r--r--contrib/libs/openssl/include/openssl/storeerr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/symhacks.h1
-rw-r--r--contrib/libs/openssl/include/openssl/tls1.h1
-rw-r--r--contrib/libs/openssl/include/openssl/ts.h1
-rw-r--r--contrib/libs/openssl/include/openssl/tserr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/txt_db.h1
-rw-r--r--contrib/libs/openssl/include/openssl/ui.h1
-rw-r--r--contrib/libs/openssl/include/openssl/uierr.h1
-rw-r--r--contrib/libs/openssl/include/openssl/whrlpool.h1
-rw-r--r--contrib/libs/openssl/include/openssl/x509.h1
-rw-r--r--contrib/libs/openssl/include/openssl/x509_vfy.h1
-rw-r--r--contrib/libs/openssl/include/openssl/x509err.h1
-rw-r--r--contrib/libs/openssl/include/openssl/x509v3.h1
-rw-r--r--contrib/libs/openssl/include/openssl/x509v3err.h1
-rw-r--r--contrib/libs/openssl/redef.h6282
-rw-r--r--contrib/libs/openssl/ya.make11
-rw-r--r--contrib/python/executing/.dist-info/METADATA4
-rw-r--r--contrib/python/executing/README.md2
-rw-r--r--contrib/python/executing/executing/__init__.py5
-rw-r--r--contrib/python/executing/executing/_position_node_finder.py65
-rw-r--r--contrib/python/executing/executing/_pytest_utils.py16
-rw-r--r--contrib/python/executing/executing/version.py2
-rw-r--r--contrib/python/executing/ya.make3
-rw-r--r--contrib/python/packaging/py3/.dist-info/METADATA377
-rw-r--r--contrib/python/packaging/py3/README.rst2
-rw-r--r--contrib/python/packaging/py3/packaging/__about__.py26
-rw-r--r--contrib/python/packaging/py3/packaging/__init__.py30
-rw-r--r--contrib/python/packaging/py3/packaging/_elffile.py110
-rw-r--r--contrib/python/packaging/py3/packaging/_manylinux.py238
-rw-r--r--contrib/python/packaging/py3/packaging/_musllinux.py97
-rw-r--r--contrib/python/packaging/py3/packaging/_parser.py354
-rw-r--r--contrib/python/packaging/py3/packaging/_tokenizer.py194
-rw-r--r--contrib/python/packaging/py3/packaging/licenses/__init__.py145
-rw-r--r--contrib/python/packaging/py3/packaging/licenses/_spdx.py759
-rw-r--r--contrib/python/packaging/py3/packaging/markers.py283
-rw-r--r--contrib/python/packaging/py3/packaging/metadata.py863
-rw-r--r--contrib/python/packaging/py3/packaging/requirements.py153
-rw-r--r--contrib/python/packaging/py3/packaging/specifiers.py1006
-rw-r--r--contrib/python/packaging/py3/packaging/tags.py276
-rw-r--r--contrib/python/packaging/py3/packaging/utils.py121
-rw-r--r--contrib/python/packaging/py3/packaging/version.py450
-rw-r--r--contrib/python/packaging/py3/patches/01-support-setuptools-71.patch11
-rw-r--r--contrib/python/packaging/py3/ya.make13
-rw-r--r--contrib/python/requests/py3/.dist-info/METADATA27
-rw-r--r--contrib/python/requests/py3/README.md4
-rw-r--r--contrib/python/requests/py3/patches/01-arcadia.patch24
-rw-r--r--contrib/python/requests/py3/patches/02-hack-for-gevent.patch12
-rw-r--r--contrib/python/requests/py3/requests/__init__.py6
-rw-r--r--contrib/python/requests/py3/requests/__version__.py6
-rw-r--r--contrib/python/requests/py3/requests/adapters.py220
-rw-r--r--contrib/python/requests/py3/requests/api.py2
-rw-r--r--contrib/python/requests/py3/requests/auth.py1
-rw-r--r--contrib/python/requests/py3/requests/compat.py25
-rw-r--r--contrib/python/requests/py3/requests/cookies.py16
-rw-r--r--contrib/python/requests/py3/requests/exceptions.py10
-rw-r--r--contrib/python/requests/py3/requests/models.py13
-rw-r--r--contrib/python/requests/py3/requests/packages.py23
-rw-r--r--contrib/python/requests/py3/requests/sessions.py12
-rw-r--r--contrib/python/requests/py3/requests/status_codes.py10
-rw-r--r--contrib/python/requests/py3/requests/utils.py16
-rw-r--r--contrib/python/requests/py3/ya.make2
246 files changed, 13158 insertions, 3151 deletions
diff --git a/contrib/libs/openjpeg/.yandex_meta/override.nix b/contrib/libs/openjpeg/.yandex_meta/override.nix
index aef28cef968..d173012e1fb 100644
--- a/contrib/libs/openjpeg/.yandex_meta/override.nix
+++ b/contrib/libs/openjpeg/.yandex_meta/override.nix
@@ -1,11 +1,11 @@
pkgs: attrs: with pkgs; with attrs; rec {
- version = "2.5.2";
+ version = "2.5.3";
src = fetchFromGitHub {
owner = "uclouvain";
repo = "openjpeg";
rev = "v${version}";
- sha256 = "sha256-mQ9B3MJY2/bg0yY/7jUJrAXM6ozAHT5fmwES5Q1SGxw=";
+ sha256 = "sha256-ONPahcQ80e3ahYRQU+Tu8Z7ZTARjRlpXqPAYpUlX5sY=";
};
patches = [];
diff --git a/contrib/libs/openjpeg/CHANGELOG.md b/contrib/libs/openjpeg/CHANGELOG.md
index 54aeb1555b4..926e6f1f4f3 100644
--- a/contrib/libs/openjpeg/CHANGELOG.md
+++ b/contrib/libs/openjpeg/CHANGELOG.md
@@ -1,5 +1,57 @@
# Changelog
+## [v2.5.3](https://github.com/uclouvain/openjpeg/releases/v2.5.3) (2024-12-09)
+
+[Full Changelog](https://github.com/uclouvain/openjpeg/compare/v2.5.2...v2.5.3)
+
+**Closed issues:**
+
+- Memory Leak When Using Invalid Output Path in opj\_compress [\#1567](https://github.com/uclouvain/openjpeg/issues/1567)
+- heap-buffer-overflow at lib/openjp2/j2k.c:8460:84 in opj\_j2k\_add\_tlmarker in openjpeg/opj\_decompress [\#1564](https://github.com/uclouvain/openjpeg/issues/1564)
+- heap-buffer-overflow at bin/common/color.c:215:42 in sycc422\_to\_rgb in openjpeg/opj\_decompress [\#1563](https://github.com/uclouvain/openjpeg/issues/1563)
+- Can not open libjpeg [\#1550](https://github.com/uclouvain/openjpeg/issues/1550)
+- \[ERROR\] Wrong values for: w\(525\) h\(700\) numcomps\(0\) \(ihdr\) [\#1545](https://github.com/uclouvain/openjpeg/issues/1545)
+- Failed to Open a Specific JP2 file [\#1544](https://github.com/uclouvain/openjpeg/issues/1544)
+- Outdated File in OpenJPEG Project Leading to Vulnerability \(CVE-2016-9534\) [\#1539](https://github.com/uclouvain/openjpeg/issues/1539)
+- Heap-buffer-overflow in in opj\_mqc\_init\_dec\_common when disabling strict mode [\#1535](https://github.com/uclouvain/openjpeg/issues/1535)
+- Heap-buffer-overflow in in opj\_t1\_decode\_cblk when disabling strict mode [\#1533](https://github.com/uclouvain/openjpeg/issues/1533)
+- opj\_decode\_tile\_data takes a long time to decode a very small file [\#1524](https://github.com/uclouvain/openjpeg/issues/1524)
+- Release v2.5.2 tag is outside of the repository [\#1521](https://github.com/uclouvain/openjpeg/issues/1521)
+- Website broken [\#1513](https://github.com/uclouvain/openjpeg/issues/1513)
+- Guard Bits In CINEMA2K Profile [\#1340](https://github.com/uclouvain/openjpeg/issues/1340)
+- Support for OSX on ARM \(M1\) [\#1289](https://github.com/uclouvain/openjpeg/issues/1289)
+- Building on Windows creates \_\_stdcall-convention static lib/dll regardless of compiler settings [\#722](https://github.com/uclouvain/openjpeg/issues/722)
+
+**Merged pull requests:**
+
+- sycc422\_to\_rgb\(\): fix out-of-bounds read accesses when 2 \* width\_component\_1\_or\_2 + 1 == with\_component\_0 [\#1566](https://github.com/uclouvain/openjpeg/pull/1566) ([rouault](https://github.com/rouault))
+- opj\_j2k\_add\_tlmarker\(\): validate that current tile-part number if smaller that total number of tile-parts [\#1565](https://github.com/uclouvain/openjpeg/pull/1565) ([rouault](https://github.com/rouault))
+- Amend fix of PR 1530 regarding m\_sot\_length check [\#1561](https://github.com/uclouvain/openjpeg/pull/1561) ([rouault](https://github.com/rouault))
+- Do not turn on 'TPsot==TNsot detection fix' when TNsot==1, and [\#1560](https://github.com/uclouvain/openjpeg/pull/1560) ([rouault](https://github.com/rouault))
+- opj\_j2k\_setup\_encoder\(\): set numgbits = 1 for Cinema2K [\#1559](https://github.com/uclouvain/openjpeg/pull/1559) ([rouault](https://github.com/rouault))
+- bench\_dwt: Add assert for memory allocation failure [\#1555](https://github.com/uclouvain/openjpeg/pull/1555) ([hleft](https://github.com/hleft))
+- Add AVX2 and AVX512 optimization [\#1552](https://github.com/uclouvain/openjpeg/pull/1552) ([tszumski](https://github.com/tszumski))
+- Updated softprops/action-gh-release to v2 [\#1551](https://github.com/uclouvain/openjpeg/pull/1551) ([radarhere](https://github.com/radarhere))
+- Updated softprops/action-gh-release to v2 [\#1549](https://github.com/uclouvain/openjpeg/pull/1549) ([radarhere](https://github.com/radarhere))
+- fix: abi check [\#1548](https://github.com/uclouvain/openjpeg/pull/1548) ([mayeut](https://github.com/mayeut))
+- fix: when EPH markers are specified, they are required. [\#1547](https://github.com/uclouvain/openjpeg/pull/1547) ([mayeut](https://github.com/mayeut))
+- CI: add macOS arm64 [\#1546](https://github.com/uclouvain/openjpeg/pull/1546) ([mayeut](https://github.com/mayeut))
+- thirdparty/libz: update to zlib-1.3.1 [\#1542](https://github.com/uclouvain/openjpeg/pull/1542) ([rouault](https://github.com/rouault))
+- thirdparty/libpng: update to libpng-1.6.43 [\#1541](https://github.com/uclouvain/openjpeg/pull/1541) ([rouault](https://github.com/rouault))
+- thirdparty/libtiff: update to libtiff 4.6.0 [\#1540](https://github.com/uclouvain/openjpeg/pull/1540) ([rouault](https://github.com/rouault))
+- Use TLM \(Tile Length Marker\) segments to optimize decoding [\#1538](https://github.com/uclouvain/openjpeg/pull/1538) ([rouault](https://github.com/rouault))
+- Add new test for file with non-consecutive tilepart and TLM marker [\#1537](https://github.com/uclouvain/openjpeg/pull/1537) ([rouault](https://github.com/rouault))
+- Avoid heap-buffer-overflow read on corrupted image in non-strict mode [\#1536](https://github.com/uclouvain/openjpeg/pull/1536) ([rouault](https://github.com/rouault))
+- opj\_j2k\_read\_sod\(\): validate opj\_stream\_read\_data\(\) return to avoid … [\#1534](https://github.com/uclouvain/openjpeg/pull/1534) ([rouault](https://github.com/rouault))
+- Fixed typos [\#1532](https://github.com/uclouvain/openjpeg/pull/1532) ([radarhere](https://github.com/radarhere))
+- CI: pin macos job to macos-13 to get x86\_64 [\#1531](https://github.com/uclouvain/openjpeg/pull/1531) ([rouault](https://github.com/rouault))
+- Integer Overflow at j2k.c:9614 [\#1530](https://github.com/uclouvain/openjpeg/pull/1530) ([headshog](https://github.com/headshog))
+- Support setting enumcs for CMYK and EYCC color space [\#1529](https://github.com/uclouvain/openjpeg/pull/1529) ([radarhere](https://github.com/radarhere))
+- opj\_j2k\_decode\_tiles\(\): avoid use of uninitialized l\_current\_tile\_no variable [\#1528](https://github.com/uclouvain/openjpeg/pull/1528) ([rouault](https://github.com/rouault))
+- Updated actions/upload-artifact to v4 [\#1527](https://github.com/uclouvain/openjpeg/pull/1527) ([radarhere](https://github.com/radarhere))
+- Do not allow header length to be zero in non-zero length packet [\#1526](https://github.com/uclouvain/openjpeg/pull/1526) ([radarhere](https://github.com/radarhere))
+- Fix building on OpenBSD big endian hosts [\#1520](https://github.com/uclouvain/openjpeg/pull/1520) ([brad0](https://github.com/brad0))
+
## [v2.5.2](https://github.com/uclouvain/openjpeg/releases/v2.5.2) (2024-02-28)
[Full Changelog](https://github.com/uclouvain/openjpeg/compare/v2.5.1...v2.5.2)
@@ -38,7 +90,7 @@
- Cannot determine library version at compile time [\#1428](https://github.com/uclouvain/openjpeg/issues/1428)
- ARM builds on Windows unsupported with Version 2.5.0 [\#1422](https://github.com/uclouvain/openjpeg/issues/1422)
- opj\_decompress heap overflow Denial of Service issue [\#1413](https://github.com/uclouvain/openjpeg/issues/1413)
-- Color chanel swapping for some JPEG2000 pictures [\#1382](https://github.com/uclouvain/openjpeg/issues/1382)
+- Color channel swapping for some JPEG2000 pictures [\#1382](https://github.com/uclouvain/openjpeg/issues/1382)
- Heap-buffer-overflow in color.c:379:42 in sycc420\_to\_rgb [\#1347](https://github.com/uclouvain/openjpeg/issues/1347)
- No colorspace information after opj\_read\_header [\#570](https://github.com/uclouvain/openjpeg/issues/570)
@@ -297,7 +349,7 @@
- LINUX install doesn't work when building shared libraries is disabled [\#1155](https://github.com/uclouvain/openjpeg/issues/1155)
- OPENJPEG null ptr dereference in openjpeg-2.3.0/src/bin/jp2/convert.c:2243 [\#1152](https://github.com/uclouvain/openjpeg/issues/1152)
- How to drop certain subbands/layers in DWT [\#1147](https://github.com/uclouvain/openjpeg/issues/1147)
-- where is the MQ-Coder ouput stream in t2.c? [\#1146](https://github.com/uclouvain/openjpeg/issues/1146)
+- where is the MQ-Coder output stream in t2.c? [\#1146](https://github.com/uclouvain/openjpeg/issues/1146)
- OpenJPEG 2.3 \(and 2.2?\) multi component image fails to decode with KDU v7.10 [\#1132](https://github.com/uclouvain/openjpeg/issues/1132)
- Missing checks for header\_info.height and header\_info.width in function pnmtoimage in src/bin/jpwl/convert.c, which can lead to heap buffer overflow [\#1126](https://github.com/uclouvain/openjpeg/issues/1126)
- Assertion Failure in jp2.c [\#1125](https://github.com/uclouvain/openjpeg/issues/1125)
diff --git a/contrib/libs/openjpeg/NEWS.md b/contrib/libs/openjpeg/NEWS.md
index 20e9184a4fb..9e8b6b72a81 100644
--- a/contrib/libs/openjpeg/NEWS.md
+++ b/contrib/libs/openjpeg/NEWS.md
@@ -2,6 +2,36 @@
More details in the [CHANGELOG](https://github.com/uclouvain/openjpeg/blob/master/CHANGELOG.md)
+## OpenJPEG 2.5.3 (Dec 2024)
+
+No API/ABI break compared to v2.5.2
+
+### New Features
+
+* Use TLM \(Tile Length Marker\) segments to optimize decoding [\#1538](https://github.com/uclouvain/openjpeg/pull/1538)
+* Add AVX2 and AVX512 optimization [\#1552](https://github.com/uclouvain/openjpeg/pull/1552)
+* Support setting enumcs for CMYK and EYCC color space [\#1529](https://github.com/uclouvain/openjpeg/pull/1529)
+
+### Bug fixes
+
+* Do not turn on 'TPsot==TNsot detection fix' when TNsot==1, and add a OPJ_DPARAMETERS_DISABLE_TPSOT_FIX flag to disable it [\#1560](https://github.com/uclouvain/openjpeg/pull/1560)
+* opj\_j2k\_setup\_encoder\(\): set numgbits = 1 for Cinema2K [\#1559](https://github.com/uclouvain/openjpeg/pull/1559)
+* fix: when EPH markers are specified, they are required. [\#1547](https://github.com/uclouvain/openjpeg/pull/1547)
+* sycc422\_to\_rgb\(\): fix out-of-bounds read accesses when 2 \* width\_component\_1\_or\_2 + 1 == with\_component\_0 [\#1566](https://github.com/uclouvain/openjpeg/pull/1566)
+* Avoid heap-buffer-overflow read on corrupted image in non-strict mode [\#1536](https://github.com/uclouvain/openjpeg/pull/1536)
+* opj\_j2k\_read\_sod\(\): validate opj\_stream\_read\_data\(\) return to avoid potential later heap-buffer-overflow in in opj_t1_decode_cblk when disabling strict mode [\#1534](https://github.com/uclouvain/openjpeg/pull/1534)
+* fix integer Overflow at j2k.c:9614 [\#1530](https://github.com/uclouvain/openjpeg/pull/1530)
+* Memory leak fixes in error code path of opj\_compress [\#1567](https://github.com/uclouvain/openjpeg/issues/1567)
+* opj\_j2k\_decode\_tiles\(\): avoid use of uninitialized l\_current\_tile\_no variable [\#1528](https://github.com/uclouvain/openjpeg/pull/1528)
+* Do not allow header length to be zero in non-zero length packet [\#1526](https://github.com/uclouvain/openjpeg/pull/1526)
+* Fix building on OpenBSD big endian hosts [\#1520](https://github.com/uclouvain/openjpeg/pull/1520)
+
+### Changes in third party components
+
+* thirdparty/libz: update to zlib-1.3.1 [\#1542](https://github.com/uclouvain/openjpeg/pull/1542)
+* thirdparty/libpng: update to libpng-1.6.43 [\#1541](https://github.com/uclouvain/openjpeg/pull/1541)
+* thirdparty/libtiff: update to libtiff 4.6.0 [\#1540](https://github.com/uclouvain/openjpeg/pull/1540)
+
## OpenJPEG 2.5.2 (Feb 2024)
No API/ABI break compared to v2.5.1
diff --git a/contrib/libs/openjpeg/dwt.c b/contrib/libs/openjpeg/dwt.c
index 6b18c5dd6e9..11aae472def 100644
--- a/contrib/libs/openjpeg/dwt.c
+++ b/contrib/libs/openjpeg/dwt.c
@@ -52,7 +52,7 @@
#ifdef __SSSE3__
#include <tmmintrin.h>
#endif
-#ifdef __AVX2__
+#if (defined(__AVX2__) || defined(__AVX512F__))
#include <immintrin.h>
#endif
@@ -66,7 +66,10 @@
#define OPJ_WS(i) v->mem[(i)*2]
#define OPJ_WD(i) v->mem[(1+(i)*2)]
-#ifdef __AVX2__
+#if defined(__AVX512F__)
+/** Number of int32 values in a AVX512 register */
+#define VREG_INT_COUNT 16
+#elif defined(__AVX2__)
/** Number of int32 values in a AVX2 register */
#define VREG_INT_COUNT 8
#else
@@ -331,6 +334,51 @@ static void opj_dwt_decode_1(const opj_dwt_t *v)
#endif /* STANDARD_SLOW_VERSION */
+#if defined(__AVX512F__)
+static int32_t loop_short_sse(int32_t len, const int32_t** lf_ptr,
+ const int32_t** hf_ptr, int32_t** out_ptr,
+ int32_t* prev_even)
+{
+ int32_t next_even;
+ __m128i odd, even_m1, unpack1, unpack2;
+ const int32_t batch = (len - 2) / 8;
+ const __m128i two = _mm_set1_epi32(2);
+
+ for (int32_t i = 0; i < batch; i++) {
+ const __m128i lf_ = _mm_loadu_si128((__m128i*)(*lf_ptr + 1));
+ const __m128i hf1_ = _mm_loadu_si128((__m128i*)(*hf_ptr));
+ const __m128i hf2_ = _mm_loadu_si128((__m128i*)(*hf_ptr + 1));
+
+ __m128i even = _mm_add_epi32(hf1_, hf2_);
+ even = _mm_add_epi32(even, two);
+ even = _mm_srai_epi32(even, 2);
+ even = _mm_sub_epi32(lf_, even);
+
+ next_even = _mm_extract_epi32(even, 3);
+ even_m1 = _mm_bslli_si128(even, 4);
+ even_m1 = _mm_insert_epi32(even_m1, *prev_even, 0);
+
+ //out[0] + out[2]
+ odd = _mm_add_epi32(even_m1, even);
+ odd = _mm_srai_epi32(odd, 1);
+ odd = _mm_add_epi32(odd, hf1_);
+
+ unpack1 = _mm_unpacklo_epi32(even_m1, odd);
+ unpack2 = _mm_unpackhi_epi32(even_m1, odd);
+
+ _mm_storeu_si128((__m128i*)(*out_ptr + 0), unpack1);
+ _mm_storeu_si128((__m128i*)(*out_ptr + 4), unpack2);
+
+ *prev_even = next_even;
+
+ *out_ptr += 8;
+ *lf_ptr += 4;
+ *hf_ptr += 4;
+ }
+ return batch;
+}
+#endif
+
#if !defined(STANDARD_SLOW_VERSION)
static void opj_idwt53_h_cas0(OPJ_INT32* tmp,
const OPJ_INT32 sn,
@@ -364,6 +412,145 @@ static void opj_idwt53_h_cas0(OPJ_INT32* tmp,
tmp[len - 1] = in_odd[(len - 1) / 2] + tmp[len - 2];
}
#else
+#if defined(__AVX512F__)
+ OPJ_INT32* out_ptr = tmp;
+ int32_t prev_even = in_even[0] - ((in_odd[0] + 1) >> 1);
+
+ const __m512i permutevar_mask = _mm512_setr_epi32(
+ 0x10, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
+ 0x0c, 0x0d, 0x0e);
+ const __m512i store1_perm = _mm512_setr_epi64(0x00, 0x01, 0x08, 0x09, 0x02,
+ 0x03, 0x0a, 0x0b);
+ const __m512i store2_perm = _mm512_setr_epi64(0x04, 0x05, 0x0c, 0x0d, 0x06,
+ 0x07, 0x0e, 0x0f);
+
+ const __m512i two = _mm512_set1_epi32(2);
+
+ int32_t simd_batch_512 = (len - 2) / 32;
+ int32_t leftover;
+
+ for (i = 0; i < simd_batch_512; i++) {
+ const __m512i lf_avx2 = _mm512_loadu_si512((__m512i*)(in_even + 1));
+ const __m512i hf1_avx2 = _mm512_loadu_si512((__m512i*)(in_odd));
+ const __m512i hf2_avx2 = _mm512_loadu_si512((__m512i*)(in_odd + 1));
+ int32_t next_even;
+ __m512i duplicate, even_m1, odd, unpack1, unpack2, store1, store2;
+
+ __m512i even = _mm512_add_epi32(hf1_avx2, hf2_avx2);
+ even = _mm512_add_epi32(even, two);
+ even = _mm512_srai_epi32(even, 2);
+ even = _mm512_sub_epi32(lf_avx2, even);
+
+ next_even = _mm_extract_epi32(_mm512_extracti32x4_epi32(even, 3), 3);
+
+ duplicate = _mm512_set1_epi32(prev_even);
+ even_m1 = _mm512_permutex2var_epi32(even, permutevar_mask, duplicate);
+
+ //out[0] + out[2]
+ odd = _mm512_add_epi32(even_m1, even);
+ odd = _mm512_srai_epi32(odd, 1);
+ odd = _mm512_add_epi32(odd, hf1_avx2);
+
+ unpack1 = _mm512_unpacklo_epi32(even_m1, odd);
+ unpack2 = _mm512_unpackhi_epi32(even_m1, odd);
+
+ store1 = _mm512_permutex2var_epi64(unpack1, store1_perm, unpack2);
+ store2 = _mm512_permutex2var_epi64(unpack1, store2_perm, unpack2);
+
+ _mm512_storeu_si512(out_ptr, store1);
+ _mm512_storeu_si512(out_ptr + 16, store2);
+
+ prev_even = next_even;
+
+ out_ptr += 32;
+ in_even += 16;
+ in_odd += 16;
+ }
+
+ leftover = len - simd_batch_512 * 32;
+ if (leftover > 8) {
+ leftover -= 8 * loop_short_sse(leftover, &in_even, &in_odd, &out_ptr,
+ &prev_even);
+ }
+ out_ptr[0] = prev_even;
+
+ for (j = 1; j < (leftover - 2); j += 2) {
+ out_ptr[2] = in_even[1] - ((in_odd[0] + (in_odd[1]) + 2) >> 2);
+ out_ptr[1] = in_odd[0] + ((out_ptr[0] + out_ptr[2]) >> 1);
+ in_even++;
+ in_odd++;
+ out_ptr += 2;
+ }
+
+ if (len & 1) {
+ out_ptr[2] = in_even[1] - ((in_odd[0] + 1) >> 1);
+ out_ptr[1] = in_odd[0] + ((out_ptr[0] + out_ptr[2]) >> 1);
+ } else { //!(len & 1)
+ out_ptr[1] = in_odd[0] + out_ptr[0];
+ }
+#elif defined(__AVX2__)
+ OPJ_INT32* out_ptr = tmp;
+ int32_t prev_even = in_even[0] - ((in_odd[0] + 1) >> 1);
+
+ const __m256i reg_permutevar_mask_move_right = _mm256_setr_epi32(0x00, 0x00,
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06);
+ const __m256i two = _mm256_set1_epi32(2);
+
+ int32_t simd_batch = (len - 2) / 16;
+ int32_t next_even;
+ __m256i even_m1, odd, unpack1_avx2, unpack2_avx2;
+
+ for (i = 0; i < simd_batch; i++) {
+ const __m256i lf_avx2 = _mm256_loadu_si256((__m256i*)(in_even + 1));
+ const __m256i hf1_avx2 = _mm256_loadu_si256((__m256i*)(in_odd));
+ const __m256i hf2_avx2 = _mm256_loadu_si256((__m256i*)(in_odd + 1));
+
+ __m256i even = _mm256_add_epi32(hf1_avx2, hf2_avx2);
+ even = _mm256_add_epi32(even, two);
+ even = _mm256_srai_epi32(even, 2);
+ even = _mm256_sub_epi32(lf_avx2, even);
+
+ next_even = _mm_extract_epi32(_mm256_extracti128_si256(even, 1), 3);
+ even_m1 = _mm256_permutevar8x32_epi32(even, reg_permutevar_mask_move_right);
+ even_m1 = _mm256_blend_epi32(even_m1, _mm256_set1_epi32(prev_even), (1 << 0));
+
+ //out[0] + out[2]
+ odd = _mm256_add_epi32(even_m1, even);
+ odd = _mm256_srai_epi32(odd, 1);
+ odd = _mm256_add_epi32(odd, hf1_avx2);
+
+ unpack1_avx2 = _mm256_unpacklo_epi32(even_m1, odd);
+ unpack2_avx2 = _mm256_unpackhi_epi32(even_m1, odd);
+
+ _mm_storeu_si128((__m128i*)(out_ptr + 0), _mm256_castsi256_si128(unpack1_avx2));
+ _mm_storeu_si128((__m128i*)(out_ptr + 4), _mm256_castsi256_si128(unpack2_avx2));
+ _mm_storeu_si128((__m128i*)(out_ptr + 8), _mm256_extracti128_si256(unpack1_avx2,
+ 0x1));
+ _mm_storeu_si128((__m128i*)(out_ptr + 12),
+ _mm256_extracti128_si256(unpack2_avx2, 0x1));
+
+ prev_even = next_even;
+
+ out_ptr += 16;
+ in_even += 8;
+ in_odd += 8;
+ }
+ out_ptr[0] = prev_even;
+ for (j = simd_batch * 16 + 1; j < (len - 2); j += 2) {
+ out_ptr[2] = in_even[1] - ((in_odd[0] + in_odd[1] + 2) >> 2);
+ out_ptr[1] = in_odd[0] + ((out_ptr[0] + out_ptr[2]) >> 1);
+ in_even++;
+ in_odd++;
+ out_ptr += 2;
+ }
+
+ if (len & 1) {
+ out_ptr[2] = in_even[1] - ((in_odd[0] + 1) >> 1);
+ out_ptr[1] = in_odd[0] + ((out_ptr[0] + out_ptr[2]) >> 1);
+ } else { //!(len & 1)
+ out_ptr[1] = in_odd[0] + out_ptr[0];
+ }
+#else
OPJ_INT32 d1c, d1n, s1n, s0c, s0n;
assert(len > 1);
@@ -397,7 +584,8 @@ static void opj_idwt53_h_cas0(OPJ_INT32* tmp,
} else {
tmp[len - 1] = d1n + s0n;
}
-#endif
+#endif /*(__AVX512F__ || __AVX2__)*/
+#endif /*TWO_PASS_VERSION*/
memcpy(tiledp, tmp, (OPJ_UINT32)len * sizeof(OPJ_INT32));
}
@@ -511,10 +699,20 @@ static void opj_idwt53_h(const opj_dwt_t *dwt,
#endif
}
-#if (defined(__SSE2__) || defined(__AVX2__)) && !defined(STANDARD_SLOW_VERSION)
+#if (defined(__SSE2__) || defined(__AVX2__) || defined(__AVX512F__)) && !defined(STANDARD_SLOW_VERSION)
/* Conveniency macros to improve the readability of the formulas */
-#if __AVX2__
+#if defined(__AVX512F__)
+#define VREG __m512i
+#define LOAD_CST(x) _mm512_set1_epi32(x)
+#define LOAD(x) _mm512_loadu_si512((const VREG*)(x))
+#define LOADU(x) _mm512_loadu_si512((const VREG*)(x))
+#define STORE(x,y) _mm512_storeu_si512((VREG*)(x),(y))
+#define STOREU(x,y) _mm512_storeu_si512((VREG*)(x),(y))
+#define ADD(x,y) _mm512_add_epi32((x),(y))
+#define SUB(x,y) _mm512_sub_epi32((x),(y))
+#define SAR(x,y) _mm512_srai_epi32((x),(y))
+#elif defined(__AVX2__)
#define VREG __m256i
#define LOAD_CST(x) _mm256_set1_epi32(x)
#define LOAD(x) _mm256_load_si256((const VREG*)(x))
@@ -576,7 +774,10 @@ static void opj_idwt53_v_cas0_mcols_SSE2_OR_AVX2(
const VREG two = LOAD_CST(2);
assert(len > 1);
-#if __AVX2__
+#if defined(__AVX512F__)
+ assert(PARALLEL_COLS_53 == 32);
+ assert(VREG_INT_COUNT == 16);
+#elif defined(__AVX2__)
assert(PARALLEL_COLS_53 == 16);
assert(VREG_INT_COUNT == 8);
#else
@@ -584,10 +785,13 @@ static void opj_idwt53_v_cas0_mcols_SSE2_OR_AVX2(
assert(VREG_INT_COUNT == 4);
#endif
+//For AVX512 code aligned load/store is set to it's unaligned equivalents
+#if !defined(__AVX512F__)
/* Note: loads of input even/odd values must be done in a unaligned */
/* fashion. But stores in tmp can be done with aligned store, since */
/* the temporary buffer is properly aligned */
assert((OPJ_SIZE_T)tmp % (sizeof(OPJ_INT32) * VREG_INT_COUNT) == 0);
+#endif
s1n_0 = LOADU(in_even + 0);
s1n_1 = LOADU(in_even + VREG_INT_COUNT);
@@ -678,7 +882,10 @@ static void opj_idwt53_v_cas1_mcols_SSE2_OR_AVX2(
const OPJ_INT32* in_odd = &tiledp_col[0];
assert(len > 2);
-#if __AVX2__
+#if defined(__AVX512F__)
+ assert(PARALLEL_COLS_53 == 32);
+ assert(VREG_INT_COUNT == 16);
+#elif defined(__AVX2__)
assert(PARALLEL_COLS_53 == 16);
assert(VREG_INT_COUNT == 8);
#else
@@ -686,10 +893,13 @@ static void opj_idwt53_v_cas1_mcols_SSE2_OR_AVX2(
assert(VREG_INT_COUNT == 4);
#endif
+//For AVX512 code aligned load/store is set to it's unaligned equivalents
+#if !defined(__AVX512F__)
/* Note: loads of input even/odd values must be done in a unaligned */
/* fashion. But stores in tmp can be done with aligned store, since */
/* the temporary buffer is properly aligned */
assert((OPJ_SIZE_T)tmp % (sizeof(OPJ_INT32) * VREG_INT_COUNT) == 0);
+#endif
s1_0 = LOADU(in_even + stride);
/* in_odd[0] - ((in_even[0] + s1 + 2) >> 2); */
diff --git a/contrib/libs/openjpeg/ht_dec.c b/contrib/libs/openjpeg/ht_dec.c
index a554b24a6a2..2984f56098b 100644
--- a/contrib/libs/openjpeg/ht_dec.c
+++ b/contrib/libs/openjpeg/ht_dec.c
@@ -901,7 +901,7 @@ typedef struct frwd_struct {
* X controls this value.
*
* Unstuffing prevent sequences that are more than 0xFF7F from appearing
- * in the conpressed sequence. So whenever a value of 0xFF is coded, the
+ * in the compressed sequence. So whenever a value of 0xFF is coded, the
* MSB of the next byte is set 0 and must be ignored during decoding.
*
* Reading can go beyond the end of buffer by up to 3 bytes.
@@ -1032,7 +1032,7 @@ OPJ_UINT32 frwd_fetch(frwd_struct_t *msp)
//************************************************************************/
/** @brief Allocates T1 buffers
*
- * @param [in, out] t1 is codeblock cofficients storage
+ * @param [in, out] t1 is codeblock coefficients storage
* @param [in] w is codeblock width
* @param [in] h is codeblock height
*/
@@ -1120,7 +1120,7 @@ OPJ_BOOL opj_t1_ht_decode_cblk(opj_t1_t *t1,
/** @brief Decodes one codeblock, processing the cleanup, siginificance
* propagation, and magnitude refinement pass
*
- * @param [in, out] t1 is codeblock cofficients storage
+ * @param [in, out] t1 is codeblock coefficients storage
* @param [in] cblk is codeblock properties
* @param [in] orient is the subband to which the codeblock belongs (not needed)
* @param [in] roishift is region of interest shift
diff --git a/contrib/libs/openjpeg/j2k.c b/contrib/libs/openjpeg/j2k.c
index c0551870b2b..a2014c89b02 100644
--- a/contrib/libs/openjpeg/j2k.c
+++ b/contrib/libs/openjpeg/j2k.c
@@ -2484,6 +2484,11 @@ static OPJ_BOOL opj_j2k_read_siz(opj_j2k_t *p_j2k,
++l_current_tile_param;
}
+ /*Allocate and initialize some elements of codestrem index*/
+ if (!opj_j2k_allocate_tile_element_cstr_index(p_j2k)) {
+ return OPJ_FALSE;
+ }
+
p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_MH;
opj_image_comp_header_update(l_image, l_cp);
@@ -3657,21 +3662,29 @@ static OPJ_BOOL opj_j2k_read_tlm(opj_j2k_t *p_j2k,
opj_event_mgr_t * p_manager
)
{
- OPJ_UINT32 l_Ztlm, l_Stlm, l_ST, l_SP, l_tot_num_tp_remaining, l_quotient,
- l_Ptlm_size;
+ OPJ_UINT32 l_Ztlm, l_Stlm, l_ST, l_SP,
+ l_Ptlm_size, l_entry_size, l_num_tileparts;
+ OPJ_UINT32 i;
+ opj_j2k_tlm_tile_part_info_t* l_tile_part_infos;
+ opj_j2k_tlm_info_t* l_tlm;
+
/* preconditions */
assert(p_header_data != 00);
assert(p_j2k != 00);
assert(p_manager != 00);
- OPJ_UNUSED(p_j2k);
+ l_tlm = &(p_j2k->m_specific_param.m_decoder.m_tlm);
if (p_header_size < 2) {
- opj_event_msg(p_manager, EVT_ERROR, "Error reading TLM marker\n");
+ opj_event_msg(p_manager, EVT_ERROR, "Error reading TLM marker.\n");
return OPJ_FALSE;
}
p_header_size -= 2;
+ if (l_tlm->m_is_invalid) {
+ return OPJ_TRUE;
+ }
+
opj_read_bytes(p_header_data, &l_Ztlm,
1); /* Ztlm */
++p_header_data;
@@ -3680,27 +3693,83 @@ static OPJ_BOOL opj_j2k_read_tlm(opj_j2k_t *p_j2k,
++p_header_data;
l_ST = ((l_Stlm >> 4) & 0x3);
+ if (l_ST == 3) {
+ l_tlm->m_is_invalid = OPJ_TRUE;
+ opj_event_msg(p_manager, EVT_WARNING,
+ "opj_j2k_read_tlm(): ST = 3 is invalid.\n");
+ return OPJ_TRUE;
+ }
l_SP = (l_Stlm >> 6) & 0x1;
l_Ptlm_size = (l_SP + 1) * 2;
- l_quotient = l_Ptlm_size + l_ST;
+ l_entry_size = l_Ptlm_size + l_ST;
- l_tot_num_tp_remaining = p_header_size % l_quotient;
+ if ((p_header_size % l_entry_size) != 0) {
+ l_tlm->m_is_invalid = OPJ_TRUE;
+ opj_event_msg(p_manager, EVT_WARNING,
+ "opj_j2k_read_tlm(): TLM marker not of expected size.\n");
+ return OPJ_TRUE;
+ }
- if (l_tot_num_tp_remaining != 0) {
- opj_event_msg(p_manager, EVT_ERROR, "Error reading TLM marker\n");
- return OPJ_FALSE;
+ l_num_tileparts = p_header_size / l_entry_size;
+ if (l_num_tileparts == 0) {
+ /* not totally sure if this is valid... */
+ return OPJ_TRUE;
}
- /* FIXME Do not care of this at the moment since only local variables are set here */
- /*
- for
- (i = 0; i < l_tot_num_tp; ++i)
- {
- opj_read_bytes(p_header_data,&l_Ttlm_i,l_ST); // Ttlm_i
+
+ /* Highly unlikely, unless there are gazillions of TLM markers */
+ if (l_tlm->m_entries_count > UINT32_MAX - l_num_tileparts ||
+ l_tlm->m_entries_count + l_num_tileparts > UINT32_MAX / sizeof(
+ opj_j2k_tlm_tile_part_info_t)) {
+ l_tlm->m_is_invalid = OPJ_TRUE;
+ opj_event_msg(p_manager, EVT_WARNING,
+ "opj_j2k_read_tlm(): too many TLM markers.\n");
+ return OPJ_TRUE;
+ }
+
+ l_tile_part_infos = (opj_j2k_tlm_tile_part_info_t*)opj_realloc(
+ l_tlm->m_tile_part_infos,
+ (l_tlm->m_entries_count + l_num_tileparts) * sizeof(
+ opj_j2k_tlm_tile_part_info_t));
+ if (!l_tile_part_infos) {
+ l_tlm->m_is_invalid = OPJ_TRUE;
+ opj_event_msg(p_manager, EVT_WARNING,
+ "opj_j2k_read_tlm(): cannot allocate m_tile_part_infos.\n");
+ return OPJ_TRUE;
+ }
+
+ l_tlm->m_tile_part_infos = l_tile_part_infos;
+
+ for (i = 0; i < l_num_tileparts; ++ i) {
+ OPJ_UINT32 l_tile_index;
+ OPJ_UINT32 l_length;
+
+ /* Read Ttlm_i */
+ if (l_ST == 0) {
+ l_tile_index = l_tlm->m_entries_count;
+ } else {
+ opj_read_bytes(p_header_data, &l_tile_index, l_ST);
p_header_data += l_ST;
- opj_read_bytes(p_header_data,&l_Ptlm_i,l_Ptlm_size); // Ptlm_i
- p_header_data += l_Ptlm_size;
- }*/
+ }
+
+ if (l_tile_index >= p_j2k->m_cp.tw * p_j2k->m_cp.th) {
+ l_tlm->m_is_invalid = OPJ_TRUE;
+ opj_event_msg(p_manager, EVT_WARNING,
+ "opj_j2k_read_tlm(): invalid tile number %d\n",
+ l_tile_index);
+ return OPJ_TRUE;
+ }
+
+ /* Read Ptlm_i */
+ opj_read_bytes(p_header_data, &l_length, l_Ptlm_size);
+ p_header_data += l_Ptlm_size;
+
+ l_tile_part_infos[l_tlm->m_entries_count].m_tile_index =
+ (OPJ_UINT16)l_tile_index;
+ l_tile_part_infos[l_tlm->m_entries_count].m_length = l_length;
+ ++l_tlm->m_entries_count;
+ }
+
return OPJ_TRUE;
}
@@ -4583,14 +4652,26 @@ static OPJ_BOOL opj_j2k_read_sot(opj_j2k_t *p_j2k,
}
/* Index */
- if (p_j2k->cstr_index) {
+ {
assert(p_j2k->cstr_index->tile_index != 00);
p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tileno =
p_j2k->m_current_tile_number;
p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].current_tpsno =
l_current_part;
- if (l_num_parts != 0) {
+ if (!p_j2k->m_specific_param.m_decoder.m_tlm.m_is_invalid &&
+ l_num_parts >
+ p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].nb_tps) {
+ opj_event_msg(p_manager, EVT_WARNING,
+ "SOT marker for tile %u declares more tile-parts than found in TLM marker.",
+ p_j2k->m_current_tile_number);
+ p_j2k->m_specific_param.m_decoder.m_tlm.m_is_invalid = OPJ_TRUE;
+ }
+
+ if (!p_j2k->m_specific_param.m_decoder.m_tlm.m_is_invalid) {
+ /* do nothing */
+ } else if (l_num_parts != 0) {
+
p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].nb_tps =
l_num_parts;
p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].current_nb_tps =
@@ -4661,33 +4742,6 @@ static OPJ_BOOL opj_j2k_read_sot(opj_j2k_t *p_j2k,
}
- /* FIXME move this onto a separate method to call before reading any SOT, remove part about main_end header, use a index struct inside p_j2k */
- /* if (p_j2k->cstr_info) {
- if (l_tcp->first) {
- if (tileno == 0) {
- p_j2k->cstr_info->main_head_end = p_stream_tell(p_stream) - 13;
- }
-
- p_j2k->cstr_info->tile[tileno].tileno = tileno;
- p_j2k->cstr_info->tile[tileno].start_pos = p_stream_tell(p_stream) - 12;
- p_j2k->cstr_info->tile[tileno].end_pos = p_j2k->cstr_info->tile[tileno].start_pos + totlen - 1;
- p_j2k->cstr_info->tile[tileno].num_tps = numparts;
-
- if (numparts) {
- p_j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_malloc(numparts * sizeof(opj_tp_info_t));
- }
- else {
- p_j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_malloc(10 * sizeof(opj_tp_info_t)); // Fixme (10)
- }
- }
- else {
- p_j2k->cstr_info->tile[tileno].end_pos += totlen;
- }
-
- p_j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos = p_stream_tell(p_stream) - 12;
- p_j2k->cstr_info->tile[tileno].tp[partno].tp_end_pos =
- p_j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos + totlen - 1;
- }*/
return OPJ_TRUE;
}
@@ -5023,7 +5077,7 @@ static OPJ_BOOL opj_j2k_read_sod(opj_j2k_t *p_j2k,
/* Index */
l_cstr_index = p_j2k->cstr_index;
- if (l_cstr_index) {
+ {
OPJ_OFF_T l_current_pos = opj_stream_tell(p_stream) - 2;
OPJ_UINT32 l_current_tile_part =
@@ -5059,6 +5113,11 @@ static OPJ_BOOL opj_j2k_read_sod(opj_j2k_t *p_j2k,
}
if (l_current_read_size != p_j2k->m_specific_param.m_decoder.m_sot_length) {
+ if (l_current_read_size == (OPJ_SIZE_T)(-1)) {
+ /* Avoid issue of https://github.com/uclouvain/openjpeg/issues/1533 */
+ opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
+ return OPJ_FALSE;
+ }
p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_NEOC;
} else {
p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_TPHSOT;
@@ -6705,6 +6764,9 @@ void opj_j2k_decoder_set_strict_mode(opj_j2k_t *j2k, OPJ_BOOL strict)
{
if (j2k) {
j2k->m_cp.strict = strict;
+ if (strict) {
+ j2k->m_specific_param.m_decoder.m_nb_tile_parts_correction_checked = 1;
+ }
}
}
@@ -8251,7 +8313,14 @@ OPJ_BOOL opj_j2k_setup_encoder(opj_j2k_t *p_j2k,
tccp->qmfbid = parameters->irreversible ? 0 : 1;
tccp->qntsty = parameters->irreversible ? J2K_CCP_QNTSTY_SEQNT :
J2K_CCP_QNTSTY_NOQNT;
- tccp->numgbits = 2;
+
+ if (OPJ_IS_CINEMA(parameters->rsiz) &&
+ parameters->rsiz == OPJ_PROFILE_CINEMA_2K) {
+ /* From https://github.com/uclouvain/openjpeg/issues/1340 */
+ tccp->numgbits = 1;
+ } else {
+ tccp->numgbits = 2;
+ }
if ((OPJ_INT32)i == parameters->roi_compno) {
tccp->roishift = parameters->roi_shift;
@@ -8390,7 +8459,8 @@ static OPJ_BOOL opj_j2k_add_tlmarker(OPJ_UINT32 tileno,
if (type == J2K_MS_SOT) {
OPJ_UINT32 l_current_tile_part = cstr_index->tile_index[tileno].current_tpsno;
- if (cstr_index->tile_index[tileno].tp_index) {
+ if (cstr_index->tile_index[tileno].tp_index &&
+ l_current_tile_part < cstr_index->tile_index[tileno].nb_tps) {
cstr_index->tile_index[tileno].tp_index[l_current_tile_part].start_pos = pos;
}
@@ -8467,13 +8537,6 @@ OPJ_BOOL opj_j2k_read_header(opj_stream_private_t *p_stream,
/* Copy codestream image information to the output image */
opj_copy_image_header(p_j2k->m_private_image, *p_image);
- /*Allocate and initialize some elements of codestrem index*/
- if (!opj_j2k_allocate_tile_element_cstr_index(p_j2k)) {
- opj_image_destroy(*p_image);
- *p_image = NULL;
- return OPJ_FALSE;
- }
-
return OPJ_TRUE;
}
@@ -8825,6 +8888,87 @@ static OPJ_BOOL opj_j2k_decoding_validation(opj_j2k_t *p_j2k,
return l_is_valid;
}
+/** Fill p_j2k->cstr_index->tp_index[].start_pos/end_pos fields from TLM marker segments */
+static void opj_j2k_build_tp_index_from_tlm(opj_j2k_t* p_j2k,
+ opj_event_mgr_t * p_manager)
+{
+ opj_j2k_tlm_info_t* l_tlm;
+ OPJ_UINT32 i;
+ OPJ_OFF_T l_cur_offset;
+
+ assert(p_j2k->cstr_index->main_head_end > 0);
+ assert(p_j2k->cstr_index->nb_of_tiles > 0);
+ assert(p_j2k->cstr_index->tile_index != NULL);
+
+ l_tlm = &(p_j2k->m_specific_param.m_decoder.m_tlm);
+
+ if (l_tlm->m_entries_count == 0) {
+ l_tlm->m_is_invalid = OPJ_TRUE;
+ return;
+ }
+
+ if (l_tlm->m_is_invalid) {
+ return;
+ }
+
+ /* Initial pass to count the number of tile-parts per tile */
+ for (i = 0; i < l_tlm->m_entries_count; ++i) {
+ OPJ_UINT32 l_tile_index_no = l_tlm->m_tile_part_infos[i].m_tile_index;
+ assert(l_tile_index_no < p_j2k->cstr_index->nb_of_tiles);
+ p_j2k->cstr_index->tile_index[l_tile_index_no].tileno = l_tile_index_no;
+ ++p_j2k->cstr_index->tile_index[l_tile_index_no].current_nb_tps;
+ }
+
+ /* Now check that all tiles have at least one tile-part */
+ for (i = 0; i < p_j2k->cstr_index->nb_of_tiles; ++i) {
+ if (p_j2k->cstr_index->tile_index[i].current_nb_tps == 0) {
+ opj_event_msg(p_manager, EVT_ERROR,
+ "opj_j2k_build_tp_index_from_tlm(): tile %d has no "
+ "registered tile-part in TLM marker segments.\n", i);
+ goto error;
+ }
+ }
+
+ /* Final pass to fill p_j2k->cstr_index */
+ l_cur_offset = p_j2k->cstr_index->main_head_end;
+ for (i = 0; i < l_tlm->m_entries_count; ++i) {
+ OPJ_UINT32 l_tile_index_no = l_tlm->m_tile_part_infos[i].m_tile_index;
+ opj_tile_index_t* l_tile_index = &
+ (p_j2k->cstr_index->tile_index[l_tile_index_no]);
+ if (!l_tile_index->tp_index) {
+ l_tile_index->tp_index = (opj_tp_index_t *) opj_calloc(
+ l_tile_index->current_nb_tps, sizeof(opj_tp_index_t));
+ if (! l_tile_index->tp_index) {
+ opj_event_msg(p_manager, EVT_ERROR,
+ "opj_j2k_build_tp_index_from_tlm(): tile index allocation failed\n");
+ goto error;
+ }
+ }
+
+ assert(l_tile_index->nb_tps < l_tile_index->current_nb_tps);
+ l_tile_index->tp_index[l_tile_index->nb_tps].start_pos = l_cur_offset;
+ /* We don't know how to set the tp_index[].end_header field, but this is not really needed */
+ /* If there would be no markers between SOT and SOD, that would be : */
+ /* l_tile_index->tp_index[l_tile_index->nb_tps].end_header = l_cur_offset + 12; */
+ l_tile_index->tp_index[l_tile_index->nb_tps].end_pos = l_cur_offset +
+ l_tlm->m_tile_part_infos[i].m_length;
+ ++l_tile_index->nb_tps;
+
+ l_cur_offset += l_tlm->m_tile_part_infos[i].m_length;
+ }
+
+ return;
+
+error:
+ l_tlm->m_is_invalid = OPJ_TRUE;
+ for (i = 0; i < l_tlm->m_entries_count; ++i) {
+ OPJ_UINT32 l_tile_index = l_tlm->m_tile_part_infos[i].m_tile_index;
+ p_j2k->cstr_index->tile_index[l_tile_index].current_nb_tps = 0;
+ opj_free(p_j2k->cstr_index->tile_index[l_tile_index].tp_index);
+ p_j2k->cstr_index->tile_index[l_tile_index].tp_index = NULL;
+ }
+}
+
static OPJ_BOOL opj_j2k_read_header_procedure(opj_j2k_t *p_j2k,
opj_stream_private_t *p_stream,
opj_event_mgr_t * p_manager)
@@ -9004,6 +9148,9 @@ static OPJ_BOOL opj_j2k_read_header_procedure(opj_j2k_t *p_j2k,
/* Position of the last element if the main header */
p_j2k->cstr_index->main_head_end = (OPJ_UINT32) opj_stream_tell(p_stream) - 2;
+ /* Build tile-part index from TLM information */
+ opj_j2k_build_tp_index_from_tlm(p_j2k, p_manager);
+
/* Next step: read a tile-part header */
p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_TPHSOT;
@@ -9227,6 +9374,12 @@ void opj_j2k_destroy(opj_j2k_t *p_j2k)
p_j2k->m_specific_param.m_decoder.m_comps_indices_to_decode = 00;
p_j2k->m_specific_param.m_decoder.m_numcomps_to_decode = 0;
+ opj_free(p_j2k->m_specific_param.m_decoder.m_tlm.m_tile_part_infos);
+ p_j2k->m_specific_param.m_decoder.m_tlm.m_tile_part_infos = NULL;
+
+ opj_free(p_j2k->m_specific_param.m_decoder.m_intersecting_tile_parts_offset);
+ p_j2k->m_specific_param.m_decoder.m_intersecting_tile_parts_offset = NULL;
+
} else {
if (p_j2k->m_specific_param.m_encoder.m_encoded_tile_data) {
@@ -9577,6 +9730,39 @@ OPJ_BOOL opj_j2k_read_tile_header(opj_j2k_t * p_j2k,
while ((!p_j2k->m_specific_param.m_decoder.m_can_decode) &&
(l_current_marker != J2K_MS_EOC)) {
+ if (p_j2k->m_specific_param.m_decoder.m_num_intersecting_tile_parts > 0 &&
+ p_j2k->m_specific_param.m_decoder.m_idx_intersecting_tile_parts <
+ p_j2k->m_specific_param.m_decoder.m_num_intersecting_tile_parts) {
+ OPJ_OFF_T next_tp_sot_pos;
+
+ next_tp_sot_pos =
+ p_j2k->m_specific_param.m_decoder.m_intersecting_tile_parts_offset[p_j2k->m_specific_param.m_decoder.m_idx_intersecting_tile_parts];
+ ++p_j2k->m_specific_param.m_decoder.m_idx_intersecting_tile_parts;
+ if (!(opj_stream_read_seek(p_stream,
+ next_tp_sot_pos,
+ p_manager))) {
+ opj_event_msg(p_manager, EVT_ERROR, "Problem with seek function\n");
+ return OPJ_FALSE;
+ }
+
+ /* Try to read 2 bytes (the marker ID) from stream and copy them into the buffer */
+ if (opj_stream_read_data(p_stream,
+ p_j2k->m_specific_param.m_decoder.m_header_data, 2, p_manager) != 2) {
+ opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
+ return OPJ_FALSE;
+ }
+
+ /* Read 2 bytes from the buffer as the marker ID */
+ opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data,
+ &l_current_marker,
+ 2);
+
+ if (l_current_marker != J2K_MS_SOT) {
+ opj_event_msg(p_manager, EVT_ERROR, "Did not get expected SOT marker\n");
+ return OPJ_FALSE;
+ }
+ }
+
/* Try to read until the Start Of Data is detected */
while (l_current_marker != J2K_MS_SOD) {
@@ -9610,7 +9796,13 @@ OPJ_BOOL opj_j2k_read_tile_header(opj_j2k_t * p_j2k,
}
/* Why this condition? FIXME */
- if (p_j2k->m_specific_param.m_decoder.m_state & J2K_STATE_TPH) {
+ if ((p_j2k->m_specific_param.m_decoder.m_state & J2K_STATE_TPH) &&
+ p_j2k->m_specific_param.m_decoder.m_sot_length != 0) {
+ if (p_j2k->m_specific_param.m_decoder.m_sot_length < l_marker_size + 2) {
+ opj_event_msg(p_manager, EVT_ERROR,
+ "Sot length is less than marker size + marker ID\n");
+ return OPJ_FALSE;
+ }
p_j2k->m_specific_param.m_decoder.m_sot_length -= (l_marker_size + 2);
}
l_marker_size -= 2; /* Subtract the size of the marker ID already read */
@@ -9720,14 +9912,78 @@ OPJ_BOOL opj_j2k_read_tile_header(opj_j2k_t * p_j2k,
if (! opj_j2k_read_sod(p_j2k, p_stream, p_manager)) {
return OPJ_FALSE;
}
+
+ /* Check if we can use the TLM index to access the next tile-part */
+ if (!p_j2k->m_specific_param.m_decoder.m_can_decode &&
+ p_j2k->m_specific_param.m_decoder.m_tile_ind_to_dec >= 0 &&
+ p_j2k->m_current_tile_number == (OPJ_UINT32)
+ p_j2k->m_specific_param.m_decoder.m_tile_ind_to_dec &&
+ !p_j2k->m_specific_param.m_decoder.m_tlm.m_is_invalid &&
+ opj_stream_has_seek(p_stream)) {
+ l_tcp = p_j2k->m_cp.tcps + p_j2k->m_current_tile_number;
+ if (l_tcp->m_nb_tile_parts ==
+ p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].nb_tps &&
+ (OPJ_UINT32)l_tcp->m_current_tile_part_number + 1 < l_tcp->m_nb_tile_parts) {
+ const OPJ_OFF_T next_tp_sot_pos = p_j2k->cstr_index->tile_index[
+ p_j2k->m_current_tile_number].tp_index[l_tcp->m_current_tile_part_number +
+ 1].start_pos;
+
+ if (next_tp_sot_pos != opj_stream_tell(p_stream)) {
+#if 0
+ opj_event_msg(p_manager, EVT_INFO,
+ "opj_j2k_read_tile_header(tile=%u): seek to tile part %u at %" PRId64 "\n",
+ p_j2k->m_current_tile_number,
+ l_tcp->m_current_tile_part_number + 1,
+ next_tp_sot_pos);
+#endif
+
+ if (!(opj_stream_read_seek(p_stream,
+ next_tp_sot_pos,
+ p_manager))) {
+ opj_event_msg(p_manager, EVT_ERROR, "Problem with seek function\n");
+ return OPJ_FALSE;
+ }
+ }
+
+ /* Try to read 2 bytes (the marker ID) from stream and copy them into the buffer */
+ if (opj_stream_read_data(p_stream,
+ p_j2k->m_specific_param.m_decoder.m_header_data, 2, p_manager) != 2) {
+ opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
+ return OPJ_FALSE;
+ }
+
+ /* Read 2 bytes from the buffer as the marker ID */
+ opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data,
+ &l_current_marker,
+ 2);
+
+ if (l_current_marker != J2K_MS_SOT) {
+ opj_event_msg(p_manager, EVT_ERROR, "Did not get expected SOT marker\n");
+ return OPJ_FALSE;
+ }
+
+ continue;
+ }
+ }
+
if (p_j2k->m_specific_param.m_decoder.m_can_decode &&
!p_j2k->m_specific_param.m_decoder.m_nb_tile_parts_correction_checked) {
/* Issue 254 */
- OPJ_BOOL l_correction_needed;
+ OPJ_BOOL l_correction_needed = OPJ_FALSE;
p_j2k->m_specific_param.m_decoder.m_nb_tile_parts_correction_checked = 1;
- if (!opj_j2k_need_nb_tile_parts_correction(p_stream,
- p_j2k->m_current_tile_number, &l_correction_needed, p_manager)) {
+ if (p_j2k->m_cp.tcps[p_j2k->m_current_tile_number].m_nb_tile_parts == 1) {
+ /* Skip opj_j2k_need_nb_tile_parts_correction() if there is
+ * only a single tile part declared. The
+ * opj_j2k_need_nb_tile_parts_correction() hack was needed
+ * for files with 5 declared tileparts (where they were
+ * actually 6).
+ * Doing it systematically hurts performance when reading
+ * Sentinel2 L1C JPEG2000 files as explained in
+ * https://lists.osgeo.org/pipermail/gdal-dev/2024-November/059805.html
+ */
+ } else if (!opj_j2k_need_nb_tile_parts_correction(p_stream,
+ p_j2k->m_current_tile_number, &l_correction_needed, p_manager)) {
opj_event_msg(p_manager, EVT_ERROR,
"opj_j2k_apply_nb_tile_parts_correction error\n");
return OPJ_FALSE;
@@ -11303,6 +11559,17 @@ static void opj_j2k_dump_MH_index(opj_j2k_t* p_j2k, FILE* out_stream)
OPJ_UINT32 l_acc_nb_of_tile_part = 0;
for (it_tile = 0; it_tile < cstr_index->nb_of_tiles ; it_tile++) {
l_acc_nb_of_tile_part += cstr_index->tile_index[it_tile].nb_tps;
+
+ /* To avoid regenerating expected opj_dump results from the test */
+ /* suite when there is a TLM marker present */
+ if (cstr_index->tile_index[it_tile].nb_tps &&
+ cstr_index->tile_index[it_tile].tp_index &&
+ cstr_index->tile_index[it_tile].tp_index[0].start_pos > 0 &&
+ cstr_index->tile_index[it_tile].tp_index[0].end_header == 0 &&
+ getenv("OJP_DO_NOT_DISPLAY_TILE_INDEX_IF_TLM") != NULL) {
+ l_acc_nb_of_tile_part = 0;
+ break;
+ }
}
if (l_acc_nb_of_tile_part) {
@@ -11666,6 +11933,18 @@ static OPJ_BOOL opj_j2k_are_all_used_components_decoded(opj_j2k_t *p_j2k,
return OPJ_TRUE;
}
+static int CompareOffT(const void* a, const void* b)
+{
+ const OPJ_OFF_T offA = *(const OPJ_OFF_T*)a;
+ const OPJ_OFF_T offB = *(const OPJ_OFF_T*)b;
+ if (offA < offB) {
+ return -1;
+ }
+ if (offA == offB) {
+ return 0;
+ }
+ return 1;
+}
static OPJ_BOOL opj_j2k_decode_tiles(opj_j2k_t *p_j2k,
opj_stream_private_t *p_stream,
@@ -11676,6 +11955,7 @@ static OPJ_BOOL opj_j2k_decode_tiles(opj_j2k_t *p_j2k,
OPJ_INT32 l_tile_x0, l_tile_y0, l_tile_x1, l_tile_y1;
OPJ_UINT32 l_nb_comps;
OPJ_UINT32 nr_tiles = 0;
+ OPJ_OFF_T end_pos = 0;
/* Particular case for whole single tile decoding */
/* We can avoid allocating intermediate tile buffers */
@@ -11698,8 +11978,9 @@ static OPJ_BOOL opj_j2k_decode_tiles(opj_j2k_t *p_j2k,
return OPJ_FALSE;
}
- if (! opj_j2k_decode_tile(p_j2k, l_current_tile_no, NULL, 0,
- p_stream, p_manager)) {
+ if (!l_go_on ||
+ ! opj_j2k_decode_tile(p_j2k, l_current_tile_no, NULL, 0,
+ p_stream, p_manager)) {
opj_event_msg(p_manager, EVT_ERROR, "Failed to decode tile 1/1\n");
return OPJ_FALSE;
}
@@ -11717,6 +11998,77 @@ static OPJ_BOOL opj_j2k_decode_tiles(opj_j2k_t *p_j2k,
return OPJ_TRUE;
}
+ p_j2k->m_specific_param.m_decoder.m_num_intersecting_tile_parts = 0;
+ p_j2k->m_specific_param.m_decoder.m_idx_intersecting_tile_parts = 0;
+ opj_free(p_j2k->m_specific_param.m_decoder.m_intersecting_tile_parts_offset);
+ p_j2k->m_specific_param.m_decoder.m_intersecting_tile_parts_offset = NULL;
+
+ /* If the area to decode only intersects a subset of tiles, and we have
+ * valid TLM information, then use it to plan the tilepart offsets to
+ * seek to.
+ */
+ if (!(p_j2k->m_specific_param.m_decoder.m_start_tile_x == 0 &&
+ p_j2k->m_specific_param.m_decoder.m_start_tile_y == 0 &&
+ p_j2k->m_specific_param.m_decoder.m_end_tile_x == p_j2k->m_cp.tw &&
+ p_j2k->m_specific_param.m_decoder.m_end_tile_y == p_j2k->m_cp.th) &&
+ !p_j2k->m_specific_param.m_decoder.m_tlm.m_is_invalid &&
+ opj_stream_has_seek(p_stream)) {
+ OPJ_UINT32 m_num_intersecting_tile_parts = 0;
+
+ OPJ_UINT32 j;
+ for (j = 0; j < p_j2k->m_cp.tw * p_j2k->m_cp.th; ++j) {
+ if (p_j2k->cstr_index->tile_index[j].nb_tps > 0 &&
+ p_j2k->cstr_index->tile_index[j].tp_index[
+ p_j2k->cstr_index->tile_index[j].nb_tps - 1].end_pos > end_pos) {
+ end_pos = p_j2k->cstr_index->tile_index[j].tp_index[
+ p_j2k->cstr_index->tile_index[j].nb_tps - 1].end_pos;
+ }
+ }
+
+ for (j = p_j2k->m_specific_param.m_decoder.m_start_tile_y;
+ j < p_j2k->m_specific_param.m_decoder.m_end_tile_y; ++j) {
+ OPJ_UINT32 i;
+ for (i = p_j2k->m_specific_param.m_decoder.m_start_tile_x;
+ i < p_j2k->m_specific_param.m_decoder.m_end_tile_x; ++i) {
+ const OPJ_UINT32 tile_number = j * p_j2k->m_cp.tw + i;
+ m_num_intersecting_tile_parts +=
+ p_j2k->cstr_index->tile_index[tile_number].nb_tps;
+ }
+ }
+
+ p_j2k->m_specific_param.m_decoder.m_intersecting_tile_parts_offset =
+ (OPJ_OFF_T*)
+ opj_malloc(m_num_intersecting_tile_parts * sizeof(OPJ_OFF_T));
+ if (m_num_intersecting_tile_parts > 0 &&
+ p_j2k->m_specific_param.m_decoder.m_intersecting_tile_parts_offset) {
+ OPJ_UINT32 idx = 0;
+ for (j = p_j2k->m_specific_param.m_decoder.m_start_tile_y;
+ j < p_j2k->m_specific_param.m_decoder.m_end_tile_y; ++j) {
+ OPJ_UINT32 i;
+ for (i = p_j2k->m_specific_param.m_decoder.m_start_tile_x;
+ i < p_j2k->m_specific_param.m_decoder.m_end_tile_x; ++i) {
+ const OPJ_UINT32 tile_number = j * p_j2k->m_cp.tw + i;
+ OPJ_UINT32 k;
+ for (k = 0; k < p_j2k->cstr_index->tile_index[tile_number].nb_tps; ++k) {
+ const OPJ_OFF_T next_tp_sot_pos =
+ p_j2k->cstr_index->tile_index[tile_number].tp_index[k].start_pos;
+ p_j2k->m_specific_param.m_decoder.m_intersecting_tile_parts_offset[idx] =
+ next_tp_sot_pos;
+ ++idx;
+ }
+ }
+ }
+
+ p_j2k->m_specific_param.m_decoder.m_num_intersecting_tile_parts = idx;
+
+ /* Sort by increasing offset */
+ qsort(p_j2k->m_specific_param.m_decoder.m_intersecting_tile_parts_offset,
+ p_j2k->m_specific_param.m_decoder.m_num_intersecting_tile_parts,
+ sizeof(OPJ_OFF_T),
+ CompareOffT);
+ }
+ }
+
for (;;) {
if (p_j2k->m_cp.tw == 1 && p_j2k->m_cp.th == 1 &&
p_j2k->m_cp.tcps[0].m_data != NULL) {
@@ -11776,6 +12128,12 @@ static OPJ_BOOL opj_j2k_decode_tiles(opj_j2k_t *p_j2k,
if (++nr_tiles == p_j2k->m_cp.th * p_j2k->m_cp.tw) {
break;
}
+ if (p_j2k->m_specific_param.m_decoder.m_num_intersecting_tile_parts > 0 &&
+ p_j2k->m_specific_param.m_decoder.m_idx_intersecting_tile_parts ==
+ p_j2k->m_specific_param.m_decoder.m_num_intersecting_tile_parts) {
+ opj_stream_seek(p_stream, end_pos + 2, p_manager);
+ break;
+ }
}
if (! opj_j2k_are_all_used_components_decoded(p_j2k, p_manager)) {
@@ -11819,12 +12177,6 @@ static OPJ_BOOL opj_j2k_decode_one_tile(opj_j2k_t *p_j2k,
OPJ_UINT32 l_nb_tiles;
OPJ_UINT32 i;
- /*Allocate and initialize some elements of codestrem index if not already done*/
- if (!p_j2k->cstr_index->tile_index) {
- if (!opj_j2k_allocate_tile_element_cstr_index(p_j2k)) {
- return OPJ_FALSE;
- }
- }
/* Move into the codestream to the first SOT used to decode the desired tile */
l_tile_no_to_dec = (OPJ_UINT32)
p_j2k->m_specific_param.m_decoder.m_tile_ind_to_dec;
@@ -11839,12 +12191,38 @@ static OPJ_BOOL opj_j2k_decode_one_tile(opj_j2k_t *p_j2k,
return OPJ_FALSE;
}
} else {
+ OPJ_OFF_T sot_pos =
+ p_j2k->cstr_index->tile_index[l_tile_no_to_dec].tp_index[0].start_pos;
+ OPJ_UINT32 l_marker;
+
+#if 0
+ opj_event_msg(p_manager, EVT_INFO,
+ "opj_j2k_decode_one_tile(%u): seek to %" PRId64 "\n",
+ l_tile_no_to_dec,
+ sot_pos);
+#endif
if (!(opj_stream_read_seek(p_stream,
- p_j2k->cstr_index->tile_index[l_tile_no_to_dec].tp_index[0].start_pos + 2,
+ sot_pos,
p_manager))) {
opj_event_msg(p_manager, EVT_ERROR, "Problem with seek function\n");
return OPJ_FALSE;
}
+
+ /* Try to read 2 bytes (the marker ID) from stream and copy them into the buffer */
+ if (opj_stream_read_data(p_stream,
+ p_j2k->m_specific_param.m_decoder.m_header_data, 2, p_manager) != 2) {
+ opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
+ return OPJ_FALSE;
+ }
+
+ /* Read 2 bytes from the buffer as the marker ID */
+ opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data, &l_marker,
+ 2);
+
+ if (l_marker != J2K_MS_SOT) {
+ opj_event_msg(p_manager, EVT_ERROR, "Did not get expected SOT marker\n");
+ return OPJ_FALSE;
+ }
}
/* Special case if we have previously read the EOC marker (if the previous tile getted is the last ) */
if (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_EOC) {
diff --git a/contrib/libs/openjpeg/j2k.h b/contrib/libs/openjpeg/j2k.h
index e0b9688a353..bcf70a419c6 100644
--- a/contrib/libs/openjpeg/j2k.h
+++ b/contrib/libs/openjpeg/j2k.h
@@ -466,6 +466,24 @@ typedef struct opj_cp {
/* <<UniPG */
} opj_cp_t;
+/** Entry of a TLM marker segment */
+typedef struct opj_j2k_tlm_tile_part_info {
+ /** Tile index of the tile part. Ttlmi field */
+ OPJ_UINT16 m_tile_index;
+ /** Length in bytes, from the beginning of the SOT marker to the end of
+ * the bit stream data for that tile-part. Ptlmi field */
+ OPJ_UINT32 m_length;
+} opj_j2k_tlm_tile_part_info_t;
+
+/** Information got from the concatenation of TLM marker semgnets. */
+typedef struct opj_j2k_tlm_info {
+ /** Number of entries in m_tile_part_infos. */
+ OPJ_UINT32 m_entries_count;
+ /** Array of m_entries_count values. */
+ opj_j2k_tlm_tile_part_info_t* m_tile_part_infos;
+
+ OPJ_BOOL m_is_invalid;
+} opj_j2k_tlm_info_t;
typedef struct opj_j2k_dec {
/** locate in which part of the codestream the decoder is (main header, tile header, end) */
@@ -499,6 +517,18 @@ typedef struct opj_j2k_dec {
OPJ_UINT32 m_numcomps_to_decode;
OPJ_UINT32 *m_comps_indices_to_decode;
+ opj_j2k_tlm_info_t m_tlm;
+
+ /** Below if used when there's TLM information available and we use
+ * opj_set_decoded_area() to a subset of all tiles.
+ */
+ /* Current index in m_intersecting_tile_parts_offset[] to seek to */
+ OPJ_UINT32 m_idx_intersecting_tile_parts;
+ /* Number of elements of m_intersecting_tile_parts_offset[] */
+ OPJ_UINT32 m_num_intersecting_tile_parts;
+ /* Start offset of contributing tile parts */
+ OPJ_OFF_T* m_intersecting_tile_parts_offset;
+
/** to tell that a tile can be decoded. */
OPJ_BITFIELD m_can_decode : 1;
OPJ_BITFIELD m_discard_tiles : 1;
diff --git a/contrib/libs/openjpeg/jp2.c b/contrib/libs/openjpeg/jp2.c
index 6015190e1f5..4df055a542a 100644
--- a/contrib/libs/openjpeg/jp2.c
+++ b/contrib/libs/openjpeg/jp2.c
@@ -1989,12 +1989,16 @@ OPJ_BOOL opj_jp2_setup_encoder(opj_jp2_t *jp2,
jp2->enumcs = 0;
} else {
jp2->meth = 1;
- if (image->color_space == 1) {
+ if (image->color_space == OPJ_CLRSPC_SRGB) {
jp2->enumcs = 16; /* sRGB as defined by IEC 61966-2-1 */
- } else if (image->color_space == 2) {
- jp2->enumcs = 17; /* greyscale */
- } else if (image->color_space == 3) {
+ } else if (image->color_space == OPJ_CLRSPC_GRAY) {
+ jp2->enumcs = 17;
+ } else if (image->color_space == OPJ_CLRSPC_SYCC) {
jp2->enumcs = 18; /* YUV */
+ } else if (image->color_space == OPJ_CLRSPC_EYCC) {
+ jp2->enumcs = 24;
+ } else if (image->color_space == OPJ_CLRSPC_CMYK) {
+ jp2->enumcs = 12;
}
}
diff --git a/contrib/libs/openjpeg/openjpeg.h b/contrib/libs/openjpeg/openjpeg.h
index 67d168bb578..59abd323aed 100644
--- a/contrib/libs/openjpeg/openjpeg.h
+++ b/contrib/libs/openjpeg/openjpeg.h
@@ -546,7 +546,7 @@ typedef struct opj_cparameters {
} opj_cparameters_t;
#define OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG 0x0001
-#define OPJ_DPARAMETERS_DUMP_FLAG 0x0002
+#define OPJ_DPARAMETERS_DUMP_FLAG 0x0002
/**
* Decompression parameters
@@ -772,7 +772,7 @@ typedef struct opj_packet_info {
OPJ_OFF_T end_ph_pos;
/** packet end position */
OPJ_OFF_T end_pos;
- /** packet distorsion */
+ /** packet distortion */
double disto;
} opj_packet_info_t;
@@ -1348,9 +1348,13 @@ OPJ_API OPJ_BOOL OPJ_CALLCONV opj_setup_decoder(opj_codec_t *p_codec,
opj_dparameters_t *parameters);
/**
- * Set strict decoding parameter for this decoder. If strict decoding is enabled, partial bit
- * streams will fail to decode. If strict decoding is disabled, the decoder will decode partial
- * bitstreams as much as possible without erroring
+ * Set strict decoding parameter for this decoder.
+ * If strict decoding is enabled, partial bit streams will fail to decode, and
+ * the check for invalid TPSOT values added in https://github.com/uclouvain/openjpeg/pull/514
+ * will be disabled.
+ * If strict decoding is disabled, the decoder will decode partial
+ * bitstreams as much as possible without erroring, and the TPSOT fixing logic
+ * will be enabled.
*
* @param p_codec decompressor handler
* @param strict OPJ_TRUE to enable strict decoding, OPJ_FALSE to disable
diff --git a/contrib/libs/openjpeg/opj_common.h b/contrib/libs/openjpeg/opj_common.h
index ee8adf4725c..2923a35b7fe 100644
--- a/contrib/libs/openjpeg/opj_common.h
+++ b/contrib/libs/openjpeg/opj_common.h
@@ -28,8 +28,8 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef OPJ_COMMMON_H
-#define OPJ_COMMMON_H
+#ifndef OPJ_COMMON_H
+#define OPJ_COMMON_H
/*
==========================================================
@@ -44,4 +44,4 @@
#define OPJ_COMP_PARAM_DEFAULT_PROG_ORDER OPJ_LRCP
#define OPJ_COMP_PARAM_DEFAULT_NUMRESOLUTION 6
-#endif /* OPJ_COMMMON_H */
+#endif /* OPJ_COMMON_H */
diff --git a/contrib/libs/openjpeg/opj_config.h b/contrib/libs/openjpeg/opj_config.h
index e495440f4fb..50d156357da 100644
--- a/contrib/libs/openjpeg/opj_config.h
+++ b/contrib/libs/openjpeg/opj_config.h
@@ -9,6 +9,6 @@
/* Version number. */
#define OPJ_VERSION_MAJOR 2
#define OPJ_VERSION_MINOR 5
-#define OPJ_VERSION_BUILD 2
+#define OPJ_VERSION_BUILD 3
#endif
diff --git a/contrib/libs/openjpeg/opj_config_private-linux.h b/contrib/libs/openjpeg/opj_config_private-linux.h
index 81a15df7f27..8076e7d32a6 100644
--- a/contrib/libs/openjpeg/opj_config_private-linux.h
+++ b/contrib/libs/openjpeg/opj_config_private-linux.h
@@ -1,6 +1,6 @@
/* create opj_config_private.h for CMake */
-#define OPJ_PACKAGE_VERSION "2.5.2"
+#define OPJ_PACKAGE_VERSION "2.5.3"
/* Not used by openjp2*/
/*#define HAVE_MEMORY_H 1*/
diff --git a/contrib/libs/openjpeg/t1.c b/contrib/libs/openjpeg/t1.c
index 52e466eb974..98dce47f556 100644
--- a/contrib/libs/openjpeg/t1.c
+++ b/contrib/libs/openjpeg/t1.c
@@ -47,6 +47,9 @@
#ifdef __SSE2__
#include <emmintrin.h>
#endif
+#if (defined(__AVX2__) || defined(__AVX512F__))
+#include <immintrin.h>
+#endif
#if defined(__GNUC__)
#pragma GCC poison malloc calloc realloc free
@@ -1796,6 +1799,39 @@ static void opj_t1_clbl_decode_processor(void* user_data, opj_tls_t* tls)
OPJ_INT32* OPJ_RESTRICT tiledp = &tilec->data[(OPJ_SIZE_T)y * tile_w +
(OPJ_SIZE_T)x];
for (j = 0; j < cblk_h; ++j) {
+ //positive -> round down aka. (83)/2 = 41.5 -> 41
+ //negative -> round up aka. (-83)/2 = -41.5 -> -41
+#if defined(__AVX512F__)
+ OPJ_INT32* ptr_in = datap + (j * cblk_w);
+ OPJ_INT32* ptr_out = tiledp + (j * (OPJ_SIZE_T)tile_w);
+ for (i = 0; i < cblk_w / 16; ++i) {
+ __m512i in_avx = _mm512_loadu_si512((__m512i*)(ptr_in));
+ const __m512i add_avx = _mm512_srli_epi32(in_avx, 31);
+ in_avx = _mm512_add_epi32(in_avx, add_avx);
+ _mm512_storeu_si512((__m512i*)(ptr_out), _mm512_srai_epi32(in_avx, 1));
+ ptr_in += 16;
+ ptr_out += 16;
+ }
+
+ for (i = 0; i < cblk_w % 16; ++i) {
+ ptr_out[i] = ptr_in[i] / 2;
+ }
+#elif defined(__AVX2__)
+ OPJ_INT32* ptr_in = datap + (j * cblk_w);
+ OPJ_INT32* ptr_out = tiledp + (j * (OPJ_SIZE_T)tile_w);
+ for (i = 0; i < cblk_w / 8; ++i) {
+ __m256i in_avx = _mm256_loadu_si256((__m256i*)(ptr_in));
+ const __m256i add_avx = _mm256_srli_epi32(in_avx, 31);
+ in_avx = _mm256_add_epi32(in_avx, add_avx);
+ _mm256_storeu_si256((__m256i*)(ptr_out), _mm256_srai_epi32(in_avx, 1));
+ ptr_in += 8;
+ ptr_out += 8;
+ }
+
+ for (i = 0; i < cblk_w % 8; ++i) {
+ ptr_out[i] = ptr_in[i] / 2;
+ }
+#else
i = 0;
for (; i < (cblk_w & ~(OPJ_UINT32)3U); i += 4U) {
OPJ_INT32 tmp0 = datap[(j * cblk_w) + i + 0U];
@@ -1811,6 +1847,7 @@ static void opj_t1_clbl_decode_processor(void* user_data, opj_tls_t* tls)
OPJ_INT32 tmp = datap[(j * cblk_w) + i];
((OPJ_INT32*)tiledp)[(j * (OPJ_SIZE_T)tile_w) + i] = tmp / 2;
}
+#endif
}
} else { /* if (tccp->qmfbid == 0) */
const float stepsize = 0.5f * band->stepsize;
@@ -2006,10 +2043,16 @@ static OPJ_BOOL opj_t1_decode_cblk(opj_t1_t *t1,
opj_mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
opj_mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
+ if (cblk->corrupted) {
+ assert(cblk->numchunks == 0);
+ return OPJ_TRUE;
+ }
+
/* Even if we have a single chunk, in multi-threaded decoding */
/* the insertion of our synthetic marker might potentially override */
/* valid codestream of other codeblocks decoded in parallel. */
- if (cblk->numchunks > 1 || t1->mustuse_cblkdatabuffer) {
+ if (cblk->numchunks > 1 || (t1->mustuse_cblkdatabuffer &&
+ cblk->numchunks > 0)) {
OPJ_UINT32 i;
OPJ_UINT32 cblk_len;
@@ -2124,7 +2167,7 @@ static OPJ_BOOL opj_t1_decode_cblk(opj_t1_t *t1,
opj_mutex_lock(p_manager_mutex);
}
opj_event_msg(p_manager, EVT_WARNING,
- "PTERM check failure: %d synthetized 0xFF markers read\n",
+ "PTERM check failure: %d synthesized 0xFF markers read\n",
mqc->end_of_byte_stream_counter);
if (p_manager_mutex) {
opj_mutex_unlock(p_manager_mutex);
@@ -2227,6 +2270,111 @@ static void opj_t1_cblk_encode_processor(void* user_data, opj_tls_t* tls)
OPJ_UINT32* OPJ_RESTRICT t1data = (OPJ_UINT32*) t1->data;
/* Change from "natural" order to "zigzag" order of T1 passes */
for (j = 0; j < (cblk_h & ~3U); j += 4) {
+#if defined(__AVX512F__)
+ const __m512i perm1 = _mm512_setr_epi64(2, 3, 10, 11, 4, 5, 12, 13);
+ const __m512i perm2 = _mm512_setr_epi64(6, 7, 14, 15, 0, 0, 0, 0);
+ OPJ_UINT32* ptr = tiledp_u;
+ for (i = 0; i < cblk_w / 16; ++i) {
+ // INPUT OUTPUT
+ // 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00 10 20 30 01 11 21 31 02 12 22 32 03 13 23 33
+ // 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 04 14 24 34 05 15 25 35 06 16 26 36 07 17 27 37
+ // 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 08 18 28 38 09 19 29 39 0A 1A 2A 3A 0B 1B 2B 3B
+ // 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 0C 1C 2C 3C 0D 1D 2D 3D 0E 1E 2E 3E 0F 1F 2F 3F
+ __m512i in1 = _mm512_slli_epi32(_mm512_loadu_si512((__m512i*)(ptr +
+ (j + 0) * tile_w)), T1_NMSEDEC_FRACBITS);
+ __m512i in2 = _mm512_slli_epi32(_mm512_loadu_si512((__m512i*)(ptr +
+ (j + 1) * tile_w)), T1_NMSEDEC_FRACBITS);
+ __m512i in3 = _mm512_slli_epi32(_mm512_loadu_si512((__m512i*)(ptr +
+ (j + 2) * tile_w)), T1_NMSEDEC_FRACBITS);
+ __m512i in4 = _mm512_slli_epi32(_mm512_loadu_si512((__m512i*)(ptr +
+ (j + 3) * tile_w)), T1_NMSEDEC_FRACBITS);
+
+ __m512i tmp1 = _mm512_unpacklo_epi32(in1, in2);
+ __m512i tmp2 = _mm512_unpacklo_epi32(in3, in4);
+ __m512i tmp3 = _mm512_unpackhi_epi32(in1, in2);
+ __m512i tmp4 = _mm512_unpackhi_epi32(in3, in4);
+
+ in1 = _mm512_unpacklo_epi64(tmp1, tmp2);
+ in2 = _mm512_unpacklo_epi64(tmp3, tmp4);
+ in3 = _mm512_unpackhi_epi64(tmp1, tmp2);
+ in4 = _mm512_unpackhi_epi64(tmp3, tmp4);
+
+ _mm_storeu_si128((__m128i*)(t1data + 0), _mm512_castsi512_si128(in1));
+ _mm_storeu_si128((__m128i*)(t1data + 4), _mm512_castsi512_si128(in3));
+ _mm_storeu_si128((__m128i*)(t1data + 8), _mm512_castsi512_si128(in2));
+ _mm_storeu_si128((__m128i*)(t1data + 12), _mm512_castsi512_si128(in4));
+
+ tmp1 = _mm512_permutex2var_epi64(in1, perm1, in3);
+ tmp2 = _mm512_permutex2var_epi64(in2, perm1, in4);
+
+ _mm256_storeu_si256((__m256i*)(t1data + 16), _mm512_castsi512_si256(tmp1));
+ _mm256_storeu_si256((__m256i*)(t1data + 24), _mm512_castsi512_si256(tmp2));
+ _mm256_storeu_si256((__m256i*)(t1data + 32), _mm512_extracti64x4_epi64(tmp1,
+ 0x1));
+ _mm256_storeu_si256((__m256i*)(t1data + 40), _mm512_extracti64x4_epi64(tmp2,
+ 0x1));
+ _mm256_storeu_si256((__m256i*)(t1data + 48),
+ _mm512_castsi512_si256(_mm512_permutex2var_epi64(in1, perm2, in3)));
+ _mm256_storeu_si256((__m256i*)(t1data + 56),
+ _mm512_castsi512_si256(_mm512_permutex2var_epi64(in2, perm2, in4)));
+ t1data += 64;
+ ptr += 16;
+ }
+ for (i = 0; i < cblk_w % 16; ++i) {
+ t1data[0] = ptr[(j + 0) * tile_w] << T1_NMSEDEC_FRACBITS;
+ t1data[1] = ptr[(j + 1) * tile_w] << T1_NMSEDEC_FRACBITS;
+ t1data[2] = ptr[(j + 2) * tile_w] << T1_NMSEDEC_FRACBITS;
+ t1data[3] = ptr[(j + 3) * tile_w] << T1_NMSEDEC_FRACBITS;
+ t1data += 4;
+ ptr += 1;
+ }
+#elif defined(__AVX2__)
+ OPJ_UINT32* ptr = tiledp_u;
+ for (i = 0; i < cblk_w / 8; ++i) {
+ // INPUT OUTPUT
+ // 00 01 02 03 04 05 06 07 00 10 20 30 01 11 21 31
+ // 10 11 12 13 14 15 16 17 02 12 22 32 03 13 23 33
+ // 20 21 22 23 24 25 26 27 04 14 24 34 05 15 25 35
+ // 30 31 32 33 34 35 36 37 06 16 26 36 07 17 27 37
+ __m256i in1 = _mm256_slli_epi32(_mm256_loadu_si256((__m256i*)(ptr +
+ (j + 0) * tile_w)), T1_NMSEDEC_FRACBITS);
+ __m256i in2 = _mm256_slli_epi32(_mm256_loadu_si256((__m256i*)(ptr +
+ (j + 1) * tile_w)), T1_NMSEDEC_FRACBITS);
+ __m256i in3 = _mm256_slli_epi32(_mm256_loadu_si256((__m256i*)(ptr +
+ (j + 2) * tile_w)), T1_NMSEDEC_FRACBITS);
+ __m256i in4 = _mm256_slli_epi32(_mm256_loadu_si256((__m256i*)(ptr +
+ (j + 3) * tile_w)), T1_NMSEDEC_FRACBITS);
+
+ __m256i tmp1 = _mm256_unpacklo_epi32(in1, in2);
+ __m256i tmp2 = _mm256_unpacklo_epi32(in3, in4);
+ __m256i tmp3 = _mm256_unpackhi_epi32(in1, in2);
+ __m256i tmp4 = _mm256_unpackhi_epi32(in3, in4);
+
+ in1 = _mm256_unpacklo_epi64(tmp1, tmp2);
+ in2 = _mm256_unpacklo_epi64(tmp3, tmp4);
+ in3 = _mm256_unpackhi_epi64(tmp1, tmp2);
+ in4 = _mm256_unpackhi_epi64(tmp3, tmp4);
+
+ _mm_storeu_si128((__m128i*)(t1data + 0), _mm256_castsi256_si128(in1));
+ _mm_storeu_si128((__m128i*)(t1data + 4), _mm256_castsi256_si128(in3));
+ _mm_storeu_si128((__m128i*)(t1data + 8), _mm256_castsi256_si128(in2));
+ _mm_storeu_si128((__m128i*)(t1data + 12), _mm256_castsi256_si128(in4));
+ _mm256_storeu_si256((__m256i*)(t1data + 16), _mm256_permute2x128_si256(in1, in3,
+ 0x31));
+ _mm256_storeu_si256((__m256i*)(t1data + 24), _mm256_permute2x128_si256(in2, in4,
+ 0x31));
+ t1data += 32;
+ ptr += 8;
+ }
+ for (i = 0; i < cblk_w % 8; ++i) {
+ t1data[0] = ptr[(j + 0) * tile_w] << T1_NMSEDEC_FRACBITS;
+ t1data[1] = ptr[(j + 1) * tile_w] << T1_NMSEDEC_FRACBITS;
+ t1data[2] = ptr[(j + 2) * tile_w] << T1_NMSEDEC_FRACBITS;
+ t1data[3] = ptr[(j + 3) * tile_w] << T1_NMSEDEC_FRACBITS;
+ t1data += 4;
+ ptr += 1;
+ }
+#else
for (i = 0; i < cblk_w; ++i) {
t1data[0] = tiledp_u[(j + 0) * tile_w + i] << T1_NMSEDEC_FRACBITS;
t1data[1] = tiledp_u[(j + 1) * tile_w + i] << T1_NMSEDEC_FRACBITS;
@@ -2234,6 +2382,7 @@ static void opj_t1_cblk_encode_processor(void* user_data, opj_tls_t* tls)
t1data[3] = tiledp_u[(j + 3) * tile_w + i] << T1_NMSEDEC_FRACBITS;
t1data += 4;
}
+#endif
}
if (j < cblk_h) {
for (i = 0; i < cblk_w; ++i) {
diff --git a/contrib/libs/openjpeg/t2.c b/contrib/libs/openjpeg/t2.c
index 781a6a59a16..4e8cf601828 100644
--- a/contrib/libs/openjpeg/t2.c
+++ b/contrib/libs/openjpeg/t2.c
@@ -1111,6 +1111,7 @@ static OPJ_BOOL opj_t2_read_packet_header(opj_t2_t* p_t2,
/* SOP markers */
if (p_tcp->csty & J2K_CP_CSTY_SOP) {
+ /* SOP markers are allowed (i.e. optional), just warn */
if (p_max_length < 6) {
opj_event_msg(p_manager, EVT_WARNING,
"Not enough space for expected SOP marker\n");
@@ -1163,12 +1164,15 @@ static OPJ_BOOL opj_t2_read_packet_header(opj_t2_t* p_t2,
/* EPH markers */
if (p_tcp->csty & J2K_CP_CSTY_EPH) {
+ /* EPH markers are required */
if ((*l_modified_length_ptr - (OPJ_UINT32)(l_header_data -
*l_header_data_start)) < 2U) {
- opj_event_msg(p_manager, EVT_WARNING,
- "Not enough space for expected EPH marker\n");
+ opj_event_msg(p_manager, EVT_ERROR,
+ "Not enough space for required EPH marker\n");
+ return OPJ_FALSE;
} else if ((*l_header_data) != 0xff || (*(l_header_data + 1) != 0x92)) {
- opj_event_msg(p_manager, EVT_WARNING, "Expected EPH marker\n");
+ opj_event_msg(p_manager, EVT_ERROR, "Expected EPH marker\n");
+ return OPJ_FALSE;
} else {
l_header_data += 2;
}
@@ -1340,12 +1344,15 @@ static OPJ_BOOL opj_t2_read_packet_header(opj_t2_t* p_t2,
/* EPH markers */
if (p_tcp->csty & J2K_CP_CSTY_EPH) {
+ /* EPH markers are required */
if ((*l_modified_length_ptr - (OPJ_UINT32)(l_header_data -
*l_header_data_start)) < 2U) {
- opj_event_msg(p_manager, EVT_WARNING,
- "Not enough space for expected EPH marker\n");
+ opj_event_msg(p_manager, EVT_ERROR,
+ "Not enough space for required EPH marker\n");
+ return OPJ_FALSE;
} else if ((*l_header_data) != 0xff || (*(l_header_data + 1) != 0x92)) {
- opj_event_msg(p_manager, EVT_WARNING, "Expected EPH marker\n");
+ opj_event_msg(p_manager, EVT_ERROR, "Expected EPH marker\n");
+ return OPJ_FALSE;
} else {
l_header_data += 2;
}
@@ -1353,6 +1360,9 @@ static OPJ_BOOL opj_t2_read_packet_header(opj_t2_t* p_t2,
l_header_length = (OPJ_UINT32)(l_header_data - *l_header_data_start);
JAS_FPRINTF(stderr, "hdrlen=%d \n", l_header_length);
+ if (!l_header_length) {
+ return OPJ_FALSE;
+ }
JAS_FPRINTF(stderr, "packet body\n");
*l_modified_length_ptr -= l_header_length;
*l_header_data_start += l_header_length;
@@ -1404,18 +1414,21 @@ static OPJ_BOOL opj_t2_read_packet_data(opj_t2_t* p_t2,
l_nb_code_blocks = l_prc->cw * l_prc->ch;
l_cblk = l_prc->cblks.dec;
- for (cblkno = 0; cblkno < l_nb_code_blocks; ++cblkno) {
+ for (cblkno = 0; cblkno < l_nb_code_blocks; ++cblkno, ++l_cblk) {
opj_tcd_seg_t *l_seg = 00;
- // if we have a partial data stream, set numchunks to zero
- // since we have no data to actually decode.
- if (partial_buffer) {
- l_cblk->numchunks = 0;
- }
-
if (!l_cblk->numnewpasses) {
/* nothing to do */
- ++l_cblk;
+ continue;
+ }
+
+ if (partial_buffer || l_cblk->corrupted) {
+ /* if a previous segment in this packet couldn't be decoded,
+ * or if this code block was corrupted in a previous layer,
+ * then mark it as corrupted.
+ */
+ l_cblk->numchunks = 0;
+ l_cblk->corrupted = OPJ_TRUE;
continue;
}
@@ -1448,18 +1461,13 @@ static OPJ_BOOL opj_t2_read_packet_data(opj_t2_t* p_t2,
"read: segment too long (%d) with max (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n",
l_seg->newlen, p_max_length, cblkno, p_pi->precno, bandno, p_pi->resno,
p_pi->compno);
- // skip this codeblock since it is a partial read
+ /* skip this codeblock (and following ones in this
+ * packet) since it is a partial read
+ */
partial_buffer = OPJ_TRUE;
+ l_cblk->corrupted = OPJ_TRUE;
l_cblk->numchunks = 0;
-
- l_seg->numpasses += l_seg->numnewpasses;
- l_cblk->numnewpasses -= l_seg->numnewpasses;
- if (l_cblk->numnewpasses > 0) {
- ++l_seg;
- ++l_cblk->numsegs;
- break;
- }
- continue;
+ break;
}
}
@@ -1516,7 +1524,7 @@ static OPJ_BOOL opj_t2_read_packet_data(opj_t2_t* p_t2,
} while (l_cblk->numnewpasses > 0);
l_cblk->real_num_segs = l_cblk->numsegs;
- ++l_cblk;
+
} /* next code_block */
++l_band;
@@ -1600,6 +1608,8 @@ static OPJ_BOOL opj_t2_skip_packet_data(opj_t2_t* p_t2,
"skip: segment too long (%d) with max (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n",
l_seg->newlen, p_max_length, cblkno, p_pi->precno, bandno, p_pi->resno,
p_pi->compno);
+
+ *p_data_read = p_max_length;
return OPJ_TRUE;
}
}
diff --git a/contrib/libs/openjpeg/tcd.c b/contrib/libs/openjpeg/tcd.c
index 687aa61bb09..8ca259b71dc 100644
--- a/contrib/libs/openjpeg/tcd.c
+++ b/contrib/libs/openjpeg/tcd.c
@@ -243,7 +243,7 @@ void opj_tcd_rateallocate_fixed(opj_tcd_t *tcd)
/* ----------------------------------------------------------------------- */
/** Returns OPJ_TRUE if the layer allocation is unchanged w.r.t to the previous
- * invokation with a different threshold */
+ * invocation with a different threshold */
static
OPJ_BOOL opj_tcd_makelayer(opj_tcd_t *tcd,
OPJ_UINT32 layno,
@@ -2861,12 +2861,12 @@ OPJ_BOOL opj_tcd_is_subband_area_of_interest(opj_tcd_t *tcd,
return intersects;
}
-/** Returns whether a tile componenent is fully decoded, taking into account
+/** Returns whether a tile component is fully decoded, taking into account
* p_tcd->win_* members.
*
* @param p_tcd TCD handle.
* @param compno Component number
- * @return OPJ_TRUE whether the tile componenent is fully decoded
+ * @return OPJ_TRUE whether the tile component is fully decoded
*/
static OPJ_BOOL opj_tcd_is_whole_tilecomp_decoding(opj_tcd_t *p_tcd,
OPJ_UINT32 compno)
diff --git a/contrib/libs/openjpeg/tcd.h b/contrib/libs/openjpeg/tcd.h
index f659869a134..3371b08cb27 100644
--- a/contrib/libs/openjpeg/tcd.h
+++ b/contrib/libs/openjpeg/tcd.h
@@ -141,6 +141,7 @@ typedef struct opj_tcd_cblk_dec {
OPJ_UINT32 numchunksalloc; /* Number of chunks item allocated */
/* Decoded code-block. Only used for subtile decoding. Otherwise tilec->data is directly updated */
OPJ_INT32* decoded_data;
+ OPJ_BOOL corrupted; /* whether the code block data is corrupted */
} opj_tcd_cblk_dec_t;
/** Precinct structure */
@@ -312,7 +313,7 @@ typedef struct opj_tcd_marker_info {
/**
Dump the content of a tcd structure
*/
-/*void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t *img);*/ /* TODO MSD shoul use the new v2 structures */
+/*void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t *img);*/ /* TODO MSD should use the new v2 structures */
/**
Create a new TCD handle
@@ -443,7 +444,7 @@ OPJ_BOOL opj_tcd_update_tile_data(opj_tcd_t *p_tcd,
OPJ_SIZE_T opj_tcd_get_encoder_input_buffer_size(opj_tcd_t *p_tcd);
/**
- * Initialize the tile coder and may reuse some meory.
+ * Initialize the tile coder and may reuse some memory.
*
* @param p_tcd TCD handle.
* @param p_tile_no current tile index to encode.
@@ -491,7 +492,7 @@ void opj_tcd_reinit_segment(opj_tcd_seg_t* seg);
* @param y0 Upper left y in subband coordinates
* @param x1 Lower right x in subband coordinates
* @param y1 Lower right y in subband coordinates
- * @return OPJ_TRUE whether the sub-band region contributs to the area of
+ * @return OPJ_TRUE whether the sub-band region contributes to the area of
* interest.
*/
OPJ_BOOL opj_tcd_is_subband_area_of_interest(opj_tcd_t *tcd,
diff --git a/contrib/libs/openjpeg/ya.make b/contrib/libs/openjpeg/ya.make
index e065d61445b..ebcca46a5fc 100644
--- a/contrib/libs/openjpeg/ya.make
+++ b/contrib/libs/openjpeg/ya.make
@@ -9,9 +9,9 @@ LICENSE(
LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
-VERSION(2.5.2)
+VERSION(2.5.3)
-ORIGINAL_SOURCE(https://github.com/uclouvain/openjpeg/archive/v2.5.2.tar.gz)
+ORIGINAL_SOURCE(https://github.com/uclouvain/openjpeg/archive/v2.5.3.tar.gz)
ADDINCL(
contrib/libs/openjpeg
diff --git a/contrib/libs/openssl/crypto/ya.make b/contrib/libs/openssl/crypto/ya.make
index 3bf6f03bdb2..0f66c819c14 100644
--- a/contrib/libs/openssl/crypto/ya.make
+++ b/contrib/libs/openssl/crypto/ya.make
@@ -40,1332 +40,10 @@ ADDINCL(
contrib/libs/openssl/include
)
-IF (NOT EXPORT_CMAKE OR NOT OPENSOURCE_REPLACE_OPENSSL)
-
-IF (OS_LINUX)
- IF (ARCH_ARM64)
- SET(LINUX_ARM64 yes)
- ELSEIF (ARCH_ARM7)
- SET(LINUX_ARMV7 yes)
- ELSEIF (ARCH_X86_64)
- SET(LINUX_X86_64 yes)
- ENDIF()
-ENDIF()
-
-IF (OS_IOS)
- IF (ARCH_ARM64)
- SET(IOS_ARM64 yes)
- ELSEIF (ARCH_ARM7)
- SET(IOS_ARMV7 yes)
- ELSEIF (ARCH_X86_64)
- SET(IOS_X86_64 yes)
- ELSEIF (ARCH_I386)
- SET(IOS_I386 yes)
- ENDIF()
-ENDIF()
-
-IF (OS_ANDROID)
- IF (ARCH_ARM64)
- SET(ANDROID_ARM64 yes)
- ELSEIF (ARCH_ARM7)
- SET(ANDROID_ARMV7 yes)
- ELSEIF (ARCH_X86_64)
- SET(ANDROID_X86_64 yes)
- ELSEIF (ARCH_I686)
- SET(ANDROID_I686 yes)
- ENDIF()
-ENDIF()
-
-IF (OS_WINDOWS)
- IF (ARCH_X86_64)
- SET(WINDOWS_X86_64 yes)
- ELSEIF (ARCH_I686)
- SET(WINDOWS_I686 yes)
- ENDIF()
-ENDIF()
-
-IF (OS_DARWIN AND ARCH_ARM64)
- SET(DARWIN_ARM64 yes)
-ENDIF()
-
-NO_COMPILER_WARNINGS()
-
-NO_RUNTIME()
-
-SUPPRESSIONS(ubsan.supp)
-
-CFLAGS(
- -DOPENSSL_BN_ASM_MONT
- -DOPENSSL_CPUID_OBJ
- -DSHA1_ASM
- -DSHA256_ASM
- -DSHA512_ASM
- -DZLIB
-)
-
-IF (NOT OS_IOS AND NOT DARWIN_ARM64)
- CFLAGS(
- -DDSO_NONE
- -DAESNI_ASM
- )
-ENDIF()
-
-IF (NOT WINDOWS_I686)
- CFLAGS(
- -DECP_NISTZ256_ASM
- -DPOLY1305_ASM
- )
-ENDIF()
-
-IF (NOT IOS_I386 AND NOT ANDROID_I686 AND NOT WINDOWS_I686)
- CFLAGS(
- -DKECCAK1600_ASM
- )
-ENDIF()
-
-IF (NOT IOS_ARMV7 AND NOT ANDROID_ARMV7 AND NOT LINUX_ARMV7)
- CFLAGS(
- -DVPAES_ASM
- )
-ENDIF()
-
-IF (NOT OS_WINDOWS)
- CFLAGS(
- -DENGINESDIR=\"/usr/local/lib/engines-1.1\"
- -DOPENSSLDIR=\"/usr/local/ssl\"
- )
-ENDIF()
-
-IF (OS_DARWIN AND ARCH_X86_64 OR OS_LINUX AND ARCH_X86_64 OR OS_WINDOWS AND ARCH_X86_64)
- CFLAGS(
- -DGHASH_ASM
- -DL_ENDIAN
- -DMD5_ASM
- -DOPENSSL_BN_ASM_GF2m
- -DOPENSSL_BN_ASM_MONT5
- -DOPENSSL_IA32_SSE2
- -DRC4_ASM
- -DX25519_ASM
- )
-ENDIF()
-
-IF (OS_LINUX AND ARCH_AARCH64 OR OS_LINUX AND ARCH_X86_64)
- CFLAGS(
- -DOPENSSL_USE_NODELETE
- )
-ENDIF()
-
-IF (OS_DARWIN AND ARCH_ARM64)
- CFLAGS(
- -DL_ENDIAN
- -DOPENSSL_PIC
- )
-ENDIF()
-
-IF (OS_WINDOWS)
- IF (ARCH_X86_64)
- CFLAGS(
- -DENGINESDIR="\"C:\\\\Program\ Files\\\\OpenSSL\\\\lib\\\\engines-1_1\""
- -DOPENSSLDIR="\"C:\\\\Program\ Files\\\\Common\ Files\\\\SSL\""
- )
- ELSEIF (ARCH_I386)
- CFLAGS(
- -DENGINESDIR="\"C:\\\\Program\ Files\ \(x86\)\\\\OpenSSL\\\\lib\\\\engines-1_1\""
- -DOPENSSLDIR="\"C:\\\\Program\ Files\ \(x86\)\\\\Common\ Files\\\\SSL\""
- )
- ENDIF()
- CFLAGS(
- -DOPENSSL_SYS_WIN32
- /GF
- )
-ENDIF()
-
-IF (SANITIZER_TYPE == memory)
- CFLAGS(
- -DPURIFY
- )
-ENDIF()
-
-IF (MUSL)
- CFLAGS(
- -DOPENSSL_NO_ASYNC
- )
-ENDIF()
-
-IF (ARCH_TYPE_32)
- CFLAGS(
- -DOPENSSL_NO_EC_NISTP_64_GCC_128
- )
-ENDIF()
-
-IF (ARCH_X86_64 AND NOT MSVC)
- SET_APPEND(
- SFLAGS
- -mavx512bw
- -mavx512ifma
- -mavx512vl
- )
-ENDIF()
-
-SRCS(
- aes/aes_cbc.c
- aes/aes_cfb.c
- aes/aes_ecb.c
- aes/aes_ige.c
- aes/aes_misc.c
- aes/aes_ofb.c
- aes/aes_wrap.c
- aria/aria.c
- asn1/a_bitstr.c
- asn1/a_d2i_fp.c
- asn1/a_digest.c
- asn1/a_dup.c
- asn1/a_gentm.c
- asn1/a_i2d_fp.c
- asn1/a_int.c
- asn1/a_mbstr.c
- asn1/a_object.c
- asn1/a_octet.c
- asn1/a_print.c
- asn1/a_sign.c
- asn1/a_strex.c
- asn1/a_strnid.c
- asn1/a_time.c
- asn1/a_type.c
- asn1/a_utctm.c
- asn1/a_utf8.c
- asn1/a_verify.c
- asn1/ameth_lib.c
- asn1/asn1_err.c
- asn1/asn1_gen.c
- asn1/asn1_item_list.c
- asn1/asn1_lib.c
- asn1/asn1_par.c
- asn1/asn_mime.c
- asn1/asn_moid.c
- asn1/asn_mstbl.c
- asn1/asn_pack.c
- asn1/bio_asn1.c
- asn1/bio_ndef.c
- asn1/d2i_pr.c
- asn1/d2i_pu.c
- asn1/evp_asn1.c
- asn1/f_int.c
- asn1/f_string.c
- asn1/i2d_pr.c
- asn1/i2d_pu.c
- asn1/n_pkey.c
- asn1/nsseq.c
- asn1/p5_pbe.c
- asn1/p5_pbev2.c
- asn1/p5_scrypt.c
- asn1/p8_pkey.c
- asn1/t_bitst.c
- asn1/t_pkey.c
- asn1/t_spki.c
- asn1/tasn_dec.c
- asn1/tasn_enc.c
- asn1/tasn_fre.c
- asn1/tasn_new.c
- asn1/tasn_prn.c
- asn1/tasn_scn.c
- asn1/tasn_typ.c
- asn1/tasn_utl.c
- asn1/x_algor.c
- asn1/x_bignum.c
- asn1/x_info.c
- asn1/x_int64.c
- asn1/x_long.c
- asn1/x_pkey.c
- asn1/x_sig.c
- asn1/x_spki.c
- asn1/x_val.c
- async/arch/async_null.c
- async/arch/async_posix.c
- async/arch/async_win.c
- async/async.c
- async/async_err.c
- async/async_wait.c
- bf/bf_cfb64.c
- bf/bf_ecb.c
- bf/bf_ofb64.c
- bf/bf_skey.c
- bio/b_addr.c
- bio/b_dump.c
- bio/b_print.c
- bio/b_sock.c
- bio/b_sock2.c
- bio/bf_buff.c
- bio/bf_lbuf.c
- bio/bf_nbio.c
- bio/bf_null.c
- bio/bio_cb.c
- bio/bio_err.c
- bio/bio_lib.c
- bio/bio_meth.c
- bio/bss_acpt.c
- bio/bss_bio.c
- bio/bss_conn.c
- bio/bss_dgram.c
- bio/bss_fd.c
- bio/bss_file.c
- bio/bss_log.c
- bio/bss_mem.c
- bio/bss_null.c
- bio/bss_sock.c
- blake2/blake2b.c
- blake2/blake2s.c
- blake2/m_blake2b.c
- blake2/m_blake2s.c
- bn/bn_add.c
- bn/bn_blind.c
- bn/bn_const.c
- bn/bn_ctx.c
- bn/bn_depr.c
- bn/bn_dh.c
- bn/bn_div.c
- bn/bn_err.c
- bn/bn_exp.c
- bn/bn_exp2.c
- bn/bn_gcd.c
- bn/bn_gf2m.c
- bn/bn_intern.c
- bn/bn_kron.c
- bn/bn_lib.c
- bn/bn_mod.c
- bn/bn_mont.c
- bn/bn_mpi.c
- bn/bn_mul.c
- bn/bn_nist.c
- bn/bn_prime.c
- bn/bn_print.c
- bn/bn_rand.c
- bn/bn_recp.c
- bn/bn_shift.c
- bn/bn_sqr.c
- bn/bn_sqrt.c
- bn/bn_srp.c
- bn/bn_word.c
- bn/bn_x931p.c
- buffer/buf_err.c
- buffer/buffer.c
- camellia/cmll_cfb.c
- camellia/cmll_ctr.c
- camellia/cmll_ecb.c
- camellia/cmll_ofb.c
- cast/c_cfb64.c
- cast/c_ecb.c
- cast/c_enc.c
- cast/c_ofb64.c
- cast/c_skey.c
- cmac/cm_ameth.c
- cmac/cm_pmeth.c
- cmac/cmac.c
- cms/cms_asn1.c
- cms/cms_att.c
- cms/cms_cd.c
- cms/cms_dd.c
- cms/cms_enc.c
- cms/cms_env.c
- cms/cms_err.c
- cms/cms_ess.c
- cms/cms_io.c
- cms/cms_kari.c
- cms/cms_lib.c
- cms/cms_pwri.c
- cms/cms_sd.c
- cms/cms_smime.c
- comp/c_zlib.c
- comp/comp_err.c
- comp/comp_lib.c
- conf/conf_api.c
- conf/conf_def.c
- conf/conf_err.c
- conf/conf_lib.c
- conf/conf_mall.c
- conf/conf_mod.c
- conf/conf_sap.c
- conf/conf_ssl.c
- cpt_err.c
- cryptlib.c
- ct/ct_b64.c
- ct/ct_err.c
- ct/ct_log.c
- ct/ct_oct.c
- ct/ct_policy.c
- ct/ct_prn.c
- ct/ct_sct.c
- ct/ct_sct_ctx.c
- ct/ct_vfy.c
- ct/ct_x509v3.c
- ctype.c
- cversion.c
- des/cbc_cksm.c
- des/cbc_enc.c
- des/cfb64ede.c
- des/cfb64enc.c
- des/cfb_enc.c
- des/ecb3_enc.c
- des/ecb_enc.c
- des/fcrypt.c
- des/ofb64ede.c
- des/ofb64enc.c
- des/ofb_enc.c
- des/pcbc_enc.c
- des/qud_cksm.c
- des/rand_key.c
- des/set_key.c
- des/str2key.c
- des/xcbc_enc.c
- dh/dh_ameth.c
- dh/dh_asn1.c
- dh/dh_check.c
- dh/dh_depr.c
- dh/dh_err.c
- dh/dh_gen.c
- dh/dh_kdf.c
- dh/dh_key.c
- dh/dh_lib.c
- dh/dh_meth.c
- dh/dh_pmeth.c
- dh/dh_prn.c
- dh/dh_rfc5114.c
- dh/dh_rfc7919.c
- dsa/dsa_ameth.c
- dsa/dsa_asn1.c
- dsa/dsa_depr.c
- dsa/dsa_err.c
- dsa/dsa_gen.c
- dsa/dsa_key.c
- dsa/dsa_lib.c
- dsa/dsa_meth.c
- dsa/dsa_ossl.c
- dsa/dsa_pmeth.c
- dsa/dsa_prn.c
- dsa/dsa_sign.c
- dsa/dsa_vrf.c
- dso/dso_dl.c
- dso/dso_err.c
- dso/dso_lib.c
- dso/dso_openssl.c
- dso/dso_vms.c
- dso/dso_win32.c
- ebcdic.c
- ec/curve25519.c
- ec/curve448/arch_32/f_impl.c
- ec/curve448/curve448.c
- ec/curve448/curve448_tables.c
- ec/curve448/eddsa.c
- ec/curve448/f_generic.c
- ec/curve448/scalar.c
- ec/ec2_oct.c
- ec/ec2_smpl.c
- ec/ec_ameth.c
- ec/ec_asn1.c
- ec/ec_check.c
- ec/ec_curve.c
- ec/ec_cvt.c
- ec/ec_err.c
- ec/ec_key.c
- ec/ec_kmeth.c
- ec/ec_lib.c
- ec/ec_mult.c
- ec/ec_oct.c
- ec/ec_pmeth.c
- ec/ec_print.c
- ec/ecdh_kdf.c
- ec/ecdh_ossl.c
- ec/ecdsa_ossl.c
- ec/ecdsa_sign.c
- ec/ecdsa_vrf.c
- ec/eck_prn.c
- ec/ecp_mont.c
- ec/ecp_nist.c
- ec/ecp_nistp224.c
- ec/ecp_nistp256.c
- ec/ecp_nistp521.c
- ec/ecp_nistputil.c
- ec/ecp_oct.c
- ec/ecp_smpl.c
- ec/ecx_meth.c
- engine/eng_all.c
- engine/eng_cnf.c
- engine/eng_ctrl.c
- engine/eng_dyn.c
- engine/eng_err.c
- engine/eng_fat.c
- engine/eng_init.c
- engine/eng_lib.c
- engine/eng_list.c
- engine/eng_openssl.c
- engine/eng_pkey.c
- engine/eng_rdrand.c
- engine/eng_table.c
- engine/tb_asnmth.c
- engine/tb_cipher.c
- engine/tb_dh.c
- engine/tb_digest.c
- engine/tb_dsa.c
- engine/tb_eckey.c
- engine/tb_pkmeth.c
- engine/tb_rand.c
- engine/tb_rsa.c
- err/err.c
- err/err_all.c
- err/err_prn.c
- evp/bio_b64.c
- evp/bio_enc.c
- evp/bio_md.c
- evp/bio_ok.c
- evp/c_allc.c
- evp/c_alld.c
- evp/cmeth_lib.c
- evp/digest.c
- evp/e_aes.c
- evp/e_aes_cbc_hmac_sha1.c
- evp/e_aes_cbc_hmac_sha256.c
- evp/e_aria.c
- evp/e_bf.c
- evp/e_camellia.c
- evp/e_cast.c
- evp/e_chacha20_poly1305.c
- evp/e_des.c
- evp/e_des3.c
- evp/e_idea.c
- evp/e_null.c
- evp/e_old.c
- evp/e_rc2.c
- evp/e_rc4.c
- evp/e_rc4_hmac_md5.c
- evp/e_rc5.c
- evp/e_seed.c
- evp/e_sm4.c
- evp/e_xcbc_d.c
- evp/encode.c
- evp/evp_cnf.c
- evp/evp_enc.c
- evp/evp_err.c
- evp/evp_key.c
- evp/evp_lib.c
- evp/evp_pbe.c
- evp/evp_pkey.c
- evp/m_md2.c
- evp/m_md4.c
- evp/m_md5.c
- evp/m_md5_sha1.c
- evp/m_mdc2.c
- evp/m_null.c
- evp/m_ripemd.c
- evp/m_sha1.c
- evp/m_sha3.c
- evp/m_sigver.c
- evp/m_wp.c
- evp/names.c
- evp/p5_crpt.c
- evp/p5_crpt2.c
- evp/p_dec.c
- evp/p_enc.c
- evp/p_lib.c
- evp/p_open.c
- evp/p_seal.c
- evp/p_sign.c
- evp/p_verify.c
- evp/pbe_scrypt.c
- evp/pmeth_fn.c
- evp/pmeth_gn.c
- evp/pmeth_lib.c
- ex_data.c
- getenv.c
- hmac/hm_ameth.c
- hmac/hm_pmeth.c
- hmac/hmac.c
- idea/i_cbc.c
- idea/i_cfb64.c
- idea/i_ecb.c
- idea/i_ofb64.c
- idea/i_skey.c
- init.c
- kdf/hkdf.c
- kdf/kdf_err.c
- kdf/scrypt.c
- kdf/tls1_prf.c
- lhash/lh_stats.c
- lhash/lhash.c
- md4/md4_dgst.c
- md4/md4_one.c
- md5/md5_dgst.c
- md5/md5_one.c
- mdc2/mdc2_one.c
- mdc2/mdc2dgst.c
- mem.c
- mem_dbg.c
- mem_sec.c
- modes/cbc128.c
- modes/ccm128.c
- modes/cfb128.c
- modes/ctr128.c
- modes/cts128.c
- modes/gcm128.c
- modes/ocb128.c
- modes/ofb128.c
- modes/wrap128.c
- modes/xts128.c
- o_dir.c
- o_fips.c
- o_fopen.c
- o_init.c
- o_str.c
- o_time.c
- objects/o_names.c
- objects/obj_dat.c
- objects/obj_err.c
- objects/obj_lib.c
- objects/obj_xref.c
- ocsp/ocsp_asn.c
- ocsp/ocsp_cl.c
- ocsp/ocsp_err.c
- ocsp/ocsp_ext.c
- ocsp/ocsp_ht.c
- ocsp/ocsp_lib.c
- ocsp/ocsp_prn.c
- ocsp/ocsp_srv.c
- ocsp/ocsp_vfy.c
- ocsp/v3_ocsp.c
- pem/pem_all.c
- pem/pem_err.c
- pem/pem_info.c
- pem/pem_lib.c
- pem/pem_oth.c
- pem/pem_pk8.c
- pem/pem_pkey.c
- pem/pem_sign.c
- pem/pem_x509.c
- pem/pem_xaux.c
- pem/pvkfmt.c
- pkcs12/p12_add.c
- pkcs12/p12_asn.c
- pkcs12/p12_attr.c
- pkcs12/p12_crpt.c
- pkcs12/p12_crt.c
- pkcs12/p12_decr.c
- pkcs12/p12_init.c
- pkcs12/p12_key.c
- pkcs12/p12_kiss.c
- pkcs12/p12_mutl.c
- pkcs12/p12_npas.c
- pkcs12/p12_p8d.c
- pkcs12/p12_p8e.c
- pkcs12/p12_sbag.c
- pkcs12/p12_utl.c
- pkcs12/pk12err.c
- pkcs7/bio_pk7.c
- pkcs7/pk7_asn1.c
- pkcs7/pk7_attr.c
- pkcs7/pk7_doit.c
- pkcs7/pk7_lib.c
- pkcs7/pk7_mime.c
- pkcs7/pk7_smime.c
- pkcs7/pkcs7err.c
- poly1305/poly1305.c
- poly1305/poly1305_ameth.c
- poly1305/poly1305_pmeth.c
- rand/drbg_ctr.c
- rand/drbg_lib.c
- rand/rand_egd.c
- rand/rand_err.c
- rand/rand_lib.c
- rand/rand_unix.c
- rand/rand_win.c
- rand/randfile.c
- rc2/rc2_cbc.c
- rc2/rc2_ecb.c
- rc2/rc2_skey.c
- rc2/rc2cfb64.c
- rc2/rc2ofb64.c
- ripemd/rmd_dgst.c
- ripemd/rmd_one.c
- rsa/rsa_ameth.c
- rsa/rsa_asn1.c
- rsa/rsa_chk.c
- rsa/rsa_crpt.c
- rsa/rsa_depr.c
- rsa/rsa_err.c
- rsa/rsa_gen.c
- rsa/rsa_lib.c
- rsa/rsa_meth.c
- rsa/rsa_mp.c
- rsa/rsa_none.c
- rsa/rsa_oaep.c
- rsa/rsa_ossl.c
- rsa/rsa_pk1.c
- rsa/rsa_pmeth.c
- rsa/rsa_prn.c
- rsa/rsa_pss.c
- rsa/rsa_saos.c
- rsa/rsa_sign.c
- rsa/rsa_ssl.c
- rsa/rsa_x931.c
- rsa/rsa_x931g.c
- seed/seed.c
- seed/seed_cbc.c
- seed/seed_cfb.c
- seed/seed_ecb.c
- seed/seed_ofb.c
- sha/sha1_one.c
- sha/sha1dgst.c
- sha/sha256.c
- sha/sha512.c
- siphash/siphash.c
- siphash/siphash_ameth.c
- siphash/siphash_pmeth.c
- sm2/sm2_crypt.c
- sm2/sm2_err.c
- sm2/sm2_pmeth.c
- sm2/sm2_sign.c
- sm3/m_sm3.c
- sm3/sm3.c
- sm4/sm4.c
- srp/srp_lib.c
- srp/srp_vfy.c
- stack/stack.c
- store/loader_file.c
- store/store_err.c
- store/store_init.c
- store/store_lib.c
- store/store_register.c
- store/store_strings.c
- threads_none.c
- threads_pthread.c
- threads_win.c
- ts/ts_asn1.c
- ts/ts_conf.c
- ts/ts_err.c
- ts/ts_lib.c
- ts/ts_req_print.c
- ts/ts_req_utils.c
- ts/ts_rsp_print.c
- ts/ts_rsp_sign.c
- ts/ts_rsp_utils.c
- ts/ts_rsp_verify.c
- ts/ts_verify_ctx.c
- txt_db/txt_db.c
- ui/ui_err.c
- ui/ui_lib.c
- ui/ui_null.c
- ui/ui_openssl.c
- ui/ui_util.c
- uid.c
- whrlpool/wp_dgst.c
- x509/by_dir.c
- x509/by_file.c
- x509/t_crl.c
- x509/t_req.c
- x509/t_x509.c
- x509/x509_att.c
- x509/x509_cmp.c
- x509/x509_d2.c
- x509/x509_def.c
- x509/x509_err.c
- x509/x509_ext.c
- x509/x509_lu.c
- x509/x509_meth.c
- x509/x509_obj.c
- x509/x509_r2x.c
- x509/x509_req.c
- x509/x509_set.c
- x509/x509_trs.c
- x509/x509_txt.c
- x509/x509_v3.c
- x509/x509_vfy.c
- x509/x509_vpm.c
- x509/x509cset.c
- x509/x509name.c
- x509/x509rset.c
- x509/x509spki.c
- x509/x509type.c
- x509/x_all.c
- x509/x_attrib.c
- x509/x_crl.c
- x509/x_exten.c
- x509/x_name.c
- x509/x_pubkey.c
- x509/x_req.c
- x509/x_x509.c
- x509/x_x509a.c
- x509v3/pcy_cache.c
- x509v3/pcy_data.c
- x509v3/pcy_lib.c
- x509v3/pcy_map.c
- x509v3/pcy_node.c
- x509v3/pcy_tree.c
- x509v3/v3_addr.c
- x509v3/v3_admis.c
- x509v3/v3_akey.c
- x509v3/v3_akeya.c
- x509v3/v3_alt.c
- x509v3/v3_asid.c
- x509v3/v3_bcons.c
- x509v3/v3_bitst.c
- x509v3/v3_conf.c
- x509v3/v3_cpols.c
- x509v3/v3_crld.c
- x509v3/v3_enum.c
- x509v3/v3_extku.c
- x509v3/v3_genn.c
- x509v3/v3_ia5.c
- x509v3/v3_info.c
- x509v3/v3_int.c
- x509v3/v3_lib.c
- x509v3/v3_ncons.c
- x509v3/v3_pci.c
- x509v3/v3_pcia.c
- x509v3/v3_pcons.c
- x509v3/v3_pku.c
- x509v3/v3_pmaps.c
- x509v3/v3_prn.c
- x509v3/v3_purp.c
- x509v3/v3_skey.c
- x509v3/v3_sxnet.c
- x509v3/v3_tlsf.c
- x509v3/v3_utl.c
- x509v3/v3err.c
-)
-
-IF (NOT WINDOWS_I686)
- SRCS(
- ec/ecp_nistz256.c
- )
-ENDIF()
-
-IF (NOT IOS_ARMV7 AND NOT ANDROID_ARMV7 AND NOT LINUX_ARMV7)
- SRCS(
- aes/aes_core.c
- )
-ENDIF()
-
-IF (NOT IOS_I386 AND NOT ANDROID_I686 AND NOT WINDOWS_I686)
- SRCS(
- bf/bf_enc.c
- camellia/cmll_misc.c
- des/des_enc.c
- des/fcrypt_b.c
- )
-ENDIF()
-
-IF (OS_DARWIN AND ARCH_X86_64 OR OS_LINUX AND ARCH_X86_64 OR OS_WINDOWS AND ARCH_X86_64)
- SRCS(
- bn/rsaz_exp.c
- )
-ENDIF()
-
-IF (OS_DARWIN AND ARCH_X86_64 OR OS_LINUX AND ARCH_X86_64)
- SRCS(
- bn/asm/x86_64-gcc.c
- )
-ENDIF()
-
-IF (OS_LINUX AND ARCH_AARCH64 OR OS_WINDOWS AND ARCH_X86_64 OR OS_LINUX AND ARCH_PPC64LE)
- SRCS(
- bn/bn_asm.c
- )
-ENDIF()
-
-IF (OS_DARWIN AND ARCH_X86_64)
- SRCS(
- ../asm/darwin/crypto/aes/aesni-mb-x86_64.s
- ../asm/darwin/crypto/aes/aesni-sha1-x86_64.s
- ../asm/darwin/crypto/aes/aesni-sha256-x86_64.s
- ../asm/darwin/crypto/aes/aesni-x86_64.s
- ../asm/darwin/crypto/aes/vpaes-x86_64.s
- ../asm/darwin/crypto/bn/rsaz-avx2.s
- ../asm/darwin/crypto/bn/rsaz-x86_64.s
- ../asm/darwin/crypto/bn/x86_64-gf2m.s
- ../asm/darwin/crypto/bn/x86_64-mont.s
- ../asm/darwin/crypto/bn/x86_64-mont5.s
- ../asm/darwin/crypto/camellia/cmll-x86_64.s
- ../asm/darwin/crypto/chacha/chacha-x86_64.s
- ../asm/darwin/crypto/ec/ecp_nistz256-x86_64.s
- ../asm/darwin/crypto/ec/x25519-x86_64.s
- ../asm/darwin/crypto/md5/md5-x86_64.s
- ../asm/darwin/crypto/modes/aesni-gcm-x86_64.s
- ../asm/darwin/crypto/modes/ghash-x86_64.s
- ../asm/darwin/crypto/poly1305/poly1305-x86_64.s
- ../asm/darwin/crypto/rc4/rc4-md5-x86_64.s
- ../asm/darwin/crypto/rc4/rc4-x86_64.s
- ../asm/darwin/crypto/sha/keccak1600-x86_64.s
- ../asm/darwin/crypto/sha/sha1-mb-x86_64.s
- ../asm/darwin/crypto/sha/sha1-x86_64.s
- ../asm/darwin/crypto/sha/sha256-mb-x86_64.s
- ../asm/darwin/crypto/sha/sha256-x86_64.s
- ../asm/darwin/crypto/sha/sha512-x86_64.s
- ../asm/darwin/crypto/whrlpool/wp-x86_64.s
- ../asm/darwin/crypto/x86_64cpuid.s
- )
-ENDIF()
-
-IF (OS_DARWIN AND ARCH_ARM64)
- SRCS(
- ../asm/darwin-arm64/crypto/sha/keccak1600-armv8.S
- ../asm/darwin-arm64/crypto/sha/sha512-armv8.S
- ../asm/darwin-arm64/crypto/sha/sha1-armv8.S
- ../asm/darwin-arm64/crypto/sha/sha256-armv8.S
- ../asm/darwin-arm64/crypto/poly1305/poly1305-armv8.S
- ../asm/darwin-arm64/crypto/ec/ecp_nistz256-armv8.S
- ../asm/darwin-arm64/crypto/chacha/chacha-armv8.S
- ../asm/darwin-arm64/crypto/bn/armv8-mont.S
- ../asm/darwin-arm64/crypto/arm64cpuid.S
- ../asm/darwin-arm64/crypto/aes/aesv8-armx.S
- ../asm/darwin-arm64/crypto/aes/vpaes-armv8.S
- ../asm/darwin-arm64/crypto/modes/ghashv8-armx.S
- armcap.c
- bn/bn_asm.c
- camellia/camellia.c
- camellia/cmll_cbc.c
- dso/dso_dlfcn.c
- rc4/rc4_enc.c
- rc4/rc4_skey.c
- whrlpool/wp_block.c
- )
-ENDIF()
-
-IF (OS_LINUX AND ARCH_ARM7)
- CFLAGS(
- -DOPENSSL_PIC
- -DOPENSSL_BN_ASM_GF2m
- -DAES_ASM
- -DBSAES_ASM
- -DGHASH_ASM
- )
- SRCS(
- ../asm/android/arm/crypto/ec/ecp_nistz256-armv4.S
- ../asm/android/arm/crypto/poly1305/poly1305-armv4.S
- ../asm/android/arm/crypto/armv4cpuid.S
- ../asm/android/arm/crypto/bn/armv4-mont.S
- ../asm/android/arm/crypto/bn/armv4-gf2m.S
- ../asm/android/arm/crypto/aes/aes-armv4.S
- ../asm/android/arm/crypto/aes/bsaes-armv7.S
- ../asm/android/arm/crypto/aes/aesv8-armx.S
- ../asm/android/arm/crypto/sha/keccak1600-armv4.S
- ../asm/android/arm/crypto/sha/sha256-armv4.S
- ../asm/android/arm/crypto/sha/sha512-armv4.S
- ../asm/android/arm/crypto/sha/sha1-armv4-large.S
- ../asm/android/arm/crypto/chacha/chacha-armv4.S
- ../asm/android/arm/crypto/modes/ghashv8-armx.S
- ../asm/android/arm/crypto/modes/ghash-armv4.S
- armcap.c
- bn/bn_asm.c
- camellia/camellia.c
- camellia/cmll_cbc.c
- dso/dso_dlfcn.c
- rand/rand_vms.c
- rc4/rc4_enc.c
- rc4/rc4_skey.c
- whrlpool/wp_block.c
- )
-ENDIF()
-
-IF (OS_LINUX AND ARCH_AARCH64)
- SRCS(
- ../asm/aarch64/crypto/aes/aesv8-armx.S
- ../asm/aarch64/crypto/aes/vpaes-armv8.S
- ../asm/aarch64/crypto/arm64cpuid.S
- ../asm/aarch64/crypto/bn/armv8-mont.S
- ../asm/aarch64/crypto/chacha/chacha-armv8.S
- ../asm/aarch64/crypto/ec/ecp_nistz256-armv8.S
- ../asm/aarch64/crypto/modes/ghashv8-armx.S
- ../asm/aarch64/crypto/poly1305/poly1305-armv8.S
- ../asm/aarch64/crypto/sha/keccak1600-armv8.S
- ../asm/aarch64/crypto/sha/sha1-armv8.S
- ../asm/aarch64/crypto/sha/sha256-armv8.S
- ../asm/aarch64/crypto/sha/sha512-armv8.S
- armcap.c
- camellia/camellia.c
- camellia/cmll_cbc.c
- rc4/rc4_enc.c
- rc4/rc4_skey.c
- whrlpool/wp_block.c
- )
-ENDIF()
-
-IF (OS_LINUX AND ARCH_PPC64LE)
- SRCS(
- ../asm/ppc64le/crypto/aes/aesp8-ppc.s
- ../asm/ppc64le/crypto/aes/vpaes-ppc.s
- ../asm/ppc64le/crypto/bn/bn-ppc.s
- ../asm/ppc64le/crypto/bn/ppc-mont.s
- ../asm/ppc64le/crypto/chacha/chacha-ppc.s
- ../asm/ppc64le/crypto/ec/ecp_nistz256-ppc64.s
- ../asm/ppc64le/crypto/ec/x25519-ppc64.s
- ../asm/ppc64le/crypto/modes/ghashp8-ppc.s
- ../asm/ppc64le/crypto/poly1305/poly1305-ppc.s
- ../asm/ppc64le/crypto/poly1305/poly1305-ppcfp.s
- ../asm/ppc64le/crypto/ppccpuid.s
- ../asm/ppc64le/crypto/sha/keccak1600-ppc64.s
- ../asm/ppc64le/crypto/sha/sha1-ppc.s
- ../asm/ppc64le/crypto/sha/sha256-ppc.s
- ../asm/ppc64le/crypto/sha/sha256p8-ppc.s
- ../asm/ppc64le/crypto/sha/sha512-ppc.s
- ../asm/ppc64le/crypto/sha/sha512p8-ppc.s
- ppccap.c
- camellia/camellia.c
- camellia/cmll_cbc.c
- rc4/rc4_enc.c
- rc4/rc4_skey.c
- whrlpool/wp_block.c
- )
-ENDIF()
-
-IF (OS_LINUX AND ARCH_X86_64)
- SRCS(
- ../asm/linux/crypto/aes/aesni-mb-x86_64.s
- ../asm/linux/crypto/aes/aesni-sha1-x86_64.s
- ../asm/linux/crypto/aes/aesni-sha256-x86_64.s
- ../asm/linux/crypto/aes/aesni-x86_64.s
- ../asm/linux/crypto/aes/vpaes-x86_64.s
- ../asm/linux/crypto/bn/rsaz-avx2.s
- ../asm/linux/crypto/bn/rsaz-x86_64.s
- ../asm/linux/crypto/bn/x86_64-gf2m.s
- ../asm/linux/crypto/bn/x86_64-mont.s
- ../asm/linux/crypto/bn/x86_64-mont5.s
- ../asm/linux/crypto/camellia/cmll-x86_64.s
- ../asm/linux/crypto/chacha/chacha-x86_64.s
- ../asm/linux/crypto/ec/ecp_nistz256-x86_64.s
- ../asm/linux/crypto/ec/x25519-x86_64.s
- ../asm/linux/crypto/md5/md5-x86_64.s
- ../asm/linux/crypto/modes/aesni-gcm-x86_64.s
- ../asm/linux/crypto/modes/ghash-x86_64.s
- ../asm/linux/crypto/poly1305/poly1305-x86_64.s
- ../asm/linux/crypto/rc4/rc4-md5-x86_64.s
- ../asm/linux/crypto/rc4/rc4-x86_64.s
- ../asm/linux/crypto/sha/keccak1600-x86_64.s
- ../asm/linux/crypto/sha/sha1-mb-x86_64.s
- ../asm/linux/crypto/sha/sha1-x86_64.s
- ../asm/linux/crypto/sha/sha256-mb-x86_64.s
- ../asm/linux/crypto/sha/sha256-x86_64.s
- ../asm/linux/crypto/sha/sha512-x86_64.s
- ../asm/linux/crypto/whrlpool/wp-x86_64.s
- ../asm/linux/crypto/x86_64cpuid.s
- )
-ENDIF()
-
-IF (OS_WINDOWS AND ARCH_X86_64)
- SRCS(
- ../asm/windows/crypto/aes/aesni-mb-x86_64.masm
- ../asm/windows/crypto/aes/aesni-sha1-x86_64.masm
- ../asm/windows/crypto/aes/aesni-sha256-x86_64.masm
- ../asm/windows/crypto/aes/aesni-x86_64.masm
- ../asm/windows/crypto/aes/vpaes-x86_64.masm
- ../asm/windows/crypto/bn/rsaz-avx2.masm
- ../asm/windows/crypto/bn/rsaz-x86_64.masm
- ../asm/windows/crypto/bn/x86_64-gf2m.masm
- ../asm/windows/crypto/bn/x86_64-mont.masm
- ../asm/windows/crypto/bn/x86_64-mont5.masm
- ../asm/windows/crypto/camellia/cmll-x86_64.masm
- ../asm/windows/crypto/chacha/chacha-x86_64.masm
- ../asm/windows/crypto/ec/ecp_nistz256-x86_64.masm
- ../asm/windows/crypto/ec/x25519-x86_64.masm
- ../asm/windows/crypto/md5/md5-x86_64.masm
- ../asm/windows/crypto/modes/aesni-gcm-x86_64.masm
- ../asm/windows/crypto/modes/ghash-x86_64.masm
- ../asm/windows/crypto/poly1305/poly1305-x86_64.masm
- ../asm/windows/crypto/rc4/rc4-md5-x86_64.masm
- ../asm/windows/crypto/rc4/rc4-x86_64.masm
- ../asm/windows/crypto/sha/keccak1600-x86_64.masm
- ../asm/windows/crypto/sha/sha1-mb-x86_64.masm
- ../asm/windows/crypto/sha/sha1-x86_64.masm
- ../asm/windows/crypto/sha/sha256-mb-x86_64.masm
- ../asm/windows/crypto/sha/sha256-x86_64.masm
- ../asm/windows/crypto/sha/sha512-x86_64.masm
- ../asm/windows/crypto/whrlpool/wp-x86_64.masm
- ../asm/windows/crypto/uplink-x86_64.masm
- ../asm/windows/crypto/x86_64cpuid.masm
- )
-ENDIF()
-
-IF (OS_WINDOWS AND ARCH_I386)
- CFLAGS(
- -DGHASH_ASM
- -DOPENSSL_BN_ASM_GF2m
- -DRC4_ASM
- -DMD5_ASM
- )
- MASMFLAGS(
- /safeseh
- )
- SRCS(
- ../asm/windows/crypto/aes/aesni-x86.masm
- ../asm/windows/crypto/aes/vpaes-x86.masm
- ../asm/windows/crypto/bn/x86-gf2m.masm
- ../asm/windows/crypto/bn/x86-mont.masm
- ../asm/windows/crypto/camellia/cmll-x86.masm
- ../asm/windows/crypto/chacha/chacha-x86.masm
- ../asm/windows/crypto/md5/md5-586.masm
- ../asm/windows/crypto/modes/ghash-x86.masm
- ../asm/windows/crypto/rc4/rc4-586.masm
- ../asm/windows/crypto/sha/sha1-586.masm
- ../asm/windows/crypto/sha/sha256-586.masm
- ../asm/windows/crypto/sha/sha512-586.masm
- ../asm/windows/crypto/x86cpuid.masm
- bf/bf_enc.c
- bn/bn_asm.c
- des/des_enc.c
- des/fcrypt_b.c
- sha/keccak1600.c
- whrlpool/wp_block.c
- )
-ENDIF()
-
-IF (OS_IOS AND ARCH_ARM64)
- CFLAGS(
- -DOPENSSL_PIC
- -D_REENTRANT
- )
- SRCS(
- ../asm/ios/arm64/crypto/aes/aesv8-armx.S
- ../asm/ios/arm64/crypto/aes/vpaes-armv8.S
- ../asm/ios/arm64/crypto/arm64cpuid.S
- ../asm/ios/arm64/crypto/bn/armv8-mont.S
- ../asm/ios/arm64/crypto/chacha/chacha-armv8.S
- ../asm/ios/arm64/crypto/ec/ecp_nistz256-armv8.S
- ../asm/ios/arm64/crypto/modes/ghashv8-armx.S
- ../asm/ios/arm64/crypto/poly1305/poly1305-armv8.S
- ../asm/ios/arm64/crypto/sha/keccak1600-armv8.S
- ../asm/ios/arm64/crypto/sha/sha1-armv8.S
- ../asm/ios/arm64/crypto/sha/sha256-armv8.S
- ../asm/ios/arm64/crypto/sha/sha512-armv8.S
- armcap.c
- bn/bn_asm.c
- camellia/camellia.c
- camellia/cmll_cbc.c
- dso/dso_dlfcn.c
- rand/rand_vms.c
- rc4/rc4_enc.c
- rc4/rc4_skey.c
- whrlpool/wp_block.c
- )
-ENDIF()
-
-IF (OS_IOS AND ARCH_X86_64)
- CFLAGS(
- -DL_ENDIAN
- -DOPENSSL_PIC
- -DOPENSSL_IA32_SSE2
- -DOPENSSL_BN_ASM_MONT5
- -DOPENSSL_BN_ASM_GF2m
- -DRC4_ASM
- -DMD5_ASM
- -DGHASH_ASM
- -DECP_NISTZ256_ASM
- -DX25519_ASM
- -D_REENTRANT
- )
- SRCS(
- ../asm/ios/x86_64/crypto/md5/md5-x86_64.s
- ../asm/ios/x86_64/crypto/rc4/rc4-md5-x86_64.s
- ../asm/ios/x86_64/crypto/rc4/rc4-x86_64.s
- ../asm/ios/x86_64/crypto/modes/ghash-x86_64.s
- ../asm/ios/x86_64/crypto/modes/aesni-gcm-x86_64.s
- ../asm/ios/x86_64/crypto/chacha/chacha-x86_64.s
- ../asm/ios/x86_64/crypto/ec/ecp_nistz256-x86_64.s
- ../asm/ios/x86_64/crypto/ec/x25519-x86_64.s
- ../asm/ios/x86_64/crypto/x86_64cpuid.s
- ../asm/ios/x86_64/crypto/poly1305/poly1305-x86_64.s
- ../asm/ios/x86_64/crypto/bn/rsaz-x86_64.s
- ../asm/ios/x86_64/crypto/bn/x86_64-mont.s
- ../asm/ios/x86_64/crypto/bn/x86_64-gf2m.s
- ../asm/ios/x86_64/crypto/bn/x86_64-mont5.s
- ../asm/ios/x86_64/crypto/bn/rsaz-avx2.s
- ../asm/ios/x86_64/crypto/sha/sha512-x86_64.s
- ../asm/ios/x86_64/crypto/sha/sha256-x86_64.s
- ../asm/ios/x86_64/crypto/sha/keccak1600-x86_64.s
- ../asm/ios/x86_64/crypto/sha/sha1-x86_64.s
- ../asm/ios/x86_64/crypto/sha/sha1-mb-x86_64.s
- ../asm/ios/x86_64/crypto/sha/sha256-mb-x86_64.s
- ../asm/ios/x86_64/crypto/camellia/cmll-x86_64.s
- ../asm/ios/x86_64/crypto/whrlpool/wp-x86_64.s
- ../asm/ios/x86_64/crypto/aes/vpaes-x86_64.s
- ../asm/ios/x86_64/crypto/aes/aesni-sha1-x86_64.s
- ../asm/ios/x86_64/crypto/aes/aesni-sha256-x86_64.s
- ../asm/ios/x86_64/crypto/aes/aesni-x86_64.s
- ../asm/ios/x86_64/crypto/aes/aesni-mb-x86_64.s
- bn/asm/x86_64-gcc.c
- bn/rsaz_exp.c
- dso/dso_dlfcn.c
- rand/rand_vms.c
- )
-ENDIF()
-
-IF (OS_ANDROID AND ARCH_X86_64)
- CFLAGS(
- -DOPENSSL_USE_NODELETE
- -DOPENSSL_PIC
- -DOPENSSL_IA32_SSE2
- -DOPENSSL_BN_ASM_MONT5
- -DOPENSSL_BN_ASM_GF2m
- -DRC4_ASM
- -DMD5_ASM
- -DGHASH_ASM
- -DX25519_ASM
- )
- SRCS(
- ../asm/android/x86_64/crypto/ec/x25519-x86_64.s
- ../asm/android/x86_64/crypto/ec/ecp_nistz256-x86_64.s
- ../asm/android/x86_64/crypto/md5/md5-x86_64.s
- ../asm/android/x86_64/crypto/rc4/rc4-x86_64.s
- ../asm/android/x86_64/crypto/rc4/rc4-md5-x86_64.s
- ../asm/android/x86_64/crypto/whrlpool/wp-x86_64.s
- ../asm/android/x86_64/crypto/poly1305/poly1305-x86_64.s
- ../asm/android/x86_64/crypto/x86_64cpuid.s
- ../asm/android/x86_64/crypto/camellia/cmll-x86_64.s
- ../asm/android/x86_64/crypto/bn/x86_64-mont5.s
- ../asm/android/x86_64/crypto/bn/rsaz-avx2.s
- ../asm/android/x86_64/crypto/bn/rsaz-x86_64.s
- ../asm/android/x86_64/crypto/bn/x86_64-mont.s
- ../asm/android/x86_64/crypto/bn/x86_64-gf2m.s
- ../asm/android/x86_64/crypto/aes/aesni-sha256-x86_64.s
- ../asm/android/x86_64/crypto/aes/aesni-mb-x86_64.s
- ../asm/android/x86_64/crypto/aes/aesni-x86_64.s
- ../asm/android/x86_64/crypto/aes/vpaes-x86_64.s
- ../asm/android/x86_64/crypto/aes/aesni-sha1-x86_64.s
- ../asm/android/x86_64/crypto/sha/sha256-x86_64.s
- ../asm/android/x86_64/crypto/sha/sha1-mb-x86_64.s
- ../asm/android/x86_64/crypto/sha/sha1-x86_64.s
- ../asm/android/x86_64/crypto/sha/sha256-mb-x86_64.s
- ../asm/android/x86_64/crypto/sha/sha512-x86_64.s
- ../asm/android/x86_64/crypto/sha/keccak1600-x86_64.s
- ../asm/android/x86_64/crypto/chacha/chacha-x86_64.s
- ../asm/android/x86_64/crypto/modes/ghash-x86_64.s
- ../asm/android/x86_64/crypto/modes/aesni-gcm-x86_64.s
- bn/asm/x86_64-gcc.c
- bn/rsaz_exp.c
- dso/dso_dlfcn.c
- rand/rand_vms.c
- )
-ENDIF()
-
-IF (OS_ANDROID AND ARCH_I686)
- CFLAGS(
- -DOPENSSL_PIC
- -DOPENSSL_BN_ASM_PART_WORDS
- -DOPENSSL_IA32_SSE2
- -DOPENSSL_BN_ASM_GF2m
- -DRC4_ASM
- -DMD5_ASM
- -DRMD160_ASM
- -DWHIRLPOOL_ASM
- -DGHASH_ASM
- )
- SRCS(
- ../asm/android/i686/crypto/ec/ecp_nistz256-x86.s
- ../asm/android/i686/crypto/bf/bf-586.s
- ../asm/android/i686/crypto/md5/md5-586.s
- ../asm/android/i686/crypto/rc4/rc4-586.s
- ../asm/android/i686/crypto/whrlpool/wp-mmx.s
- ../asm/android/i686/crypto/x86cpuid.s
- ../asm/android/i686/crypto/des/crypt586.s
- ../asm/android/i686/crypto/des/des-586.s
- ../asm/android/i686/crypto/poly1305/poly1305-x86.s
- ../asm/android/i686/crypto/ripemd/rmd-586.s
- ../asm/android/i686/crypto/camellia/cmll-x86.s
- ../asm/android/i686/crypto/bn/bn-586.s
- ../asm/android/i686/crypto/bn/co-586.s
- ../asm/android/i686/crypto/bn/x86-gf2m.s
- ../asm/android/i686/crypto/bn/x86-mont.s
- ../asm/android/i686/crypto/aes/aesni-x86.s
- ../asm/android/i686/crypto/aes/vpaes-x86.s
- ../asm/android/i686/crypto/sha/sha512-586.s
- ../asm/android/i686/crypto/sha/sha256-586.s
- ../asm/android/i686/crypto/sha/sha1-586.s
- ../asm/android/i686/crypto/chacha/chacha-x86.s
- ../asm/android/i686/crypto/modes/ghash-x86.s
- dso/dso_dlfcn.c
- rand/rand_vms.c
- sha/keccak1600.c
- whrlpool/wp_block.c
- )
-ENDIF()
-
-IF (OS_ANDROID AND ARCH_ARM7)
- IF (CLANG)
- # XXX: This is a workarond for 'out of range immediate fixup value'
- # error with clang integrated assembler:
- # https://github.com/openssl/openssl/issues/7878
- CFLAGS(
- -mno-thumb
- )
- ENDIF()
- CFLAGS(
- -DOPENSSL_PIC
- -DOPENSSL_BN_ASM_GF2m
- -DAES_ASM
- -DBSAES_ASM
- -DGHASH_ASM
- )
- SRCS(
- ../asm/android/arm/crypto/ec/ecp_nistz256-armv4.S
- ../asm/android/arm/crypto/poly1305/poly1305-armv4.S
- ../asm/android/arm/crypto/armv4cpuid.S
- ../asm/android/arm/crypto/bn/armv4-mont.S
- ../asm/android/arm/crypto/bn/armv4-gf2m.S
- ../asm/android/arm/crypto/aes/aes-armv4.S
- ../asm/android/arm/crypto/aes/bsaes-armv7.S
- ../asm/android/arm/crypto/aes/aesv8-armx.S
- ../asm/android/arm/crypto/sha/keccak1600-armv4.S
- ../asm/android/arm/crypto/sha/sha256-armv4.S
- ../asm/android/arm/crypto/sha/sha512-armv4.S
- ../asm/android/arm/crypto/sha/sha1-armv4-large.S
- ../asm/android/arm/crypto/chacha/chacha-armv4.S
- ../asm/android/arm/crypto/modes/ghashv8-armx.S
- ../asm/android/arm/crypto/modes/ghash-armv4.S
- armcap.c
- bn/bn_asm.c
- camellia/camellia.c
- camellia/cmll_cbc.c
- dso/dso_dlfcn.c
- rand/rand_vms.c
- rc4/rc4_enc.c
- rc4/rc4_skey.c
- whrlpool/wp_block.c
- )
-ENDIF()
-
-IF (OS_ANDROID AND ARCH_ARM64)
- CFLAGS(
- -DOPENSSL_PIC
- )
- SRCS(
- ../asm/android/arm64/crypto/ec/ecp_nistz256-armv8.S
- ../asm/android/arm64/crypto/poly1305/poly1305-armv8.S
- ../asm/android/arm64/crypto/bn/armv8-mont.S
- ../asm/android/arm64/crypto/aes/vpaes-armv8.S
- ../asm/android/arm64/crypto/aes/aesv8-armx.S
- ../asm/android/arm64/crypto/sha/sha512-armv8.S
- ../asm/android/arm64/crypto/sha/keccak1600-armv8.S
- ../asm/android/arm64/crypto/sha/sha1-armv8.S
- ../asm/android/arm64/crypto/sha/sha256-armv8.S
- ../asm/android/arm64/crypto/arm64cpuid.S
- ../asm/android/arm64/crypto/chacha/chacha-armv8.S
- ../asm/android/arm64/crypto/modes/ghashv8-armx.S
- armcap.c
- bn/bn_asm.c
- camellia/camellia.c
- camellia/cmll_cbc.c
- dso/dso_dlfcn.c
- rand/rand_vms.c
- rc4/rc4_enc.c
- rc4/rc4_skey.c
- whrlpool/wp_block.c
- )
-ENDIF()
-
-# mitigate SIGILL on some armv7 platforms
-# https://github.com/openssl/openssl/issues/17009
-IF (ARCADIA_OPENSSL_DISABLE_ARMV7_TICK)
- CFLAGS(
- -DARCADIA_OPENSSL_DISABLE_ARMV7_TICK
- )
-ENDIF()
+CFLAGS(-DOPENSSL_BUILD=1)
+IF (NOT EXPORT_CMAKE OR NOT OPENSOURCE_REPLACE_OPENSSL)
+PEERDIR(contrib/libs/openssl)
ENDIF() # IF (NOT EXPORT_CMAKE OR NOT OPENSOURCE_REPLACE_OPENSSL)
END()
diff --git a/contrib/libs/openssl/crypto/ya.make.inc b/contrib/libs/openssl/crypto/ya.make.inc
new file mode 100644
index 00000000000..f3394457d55
--- /dev/null
+++ b/contrib/libs/openssl/crypto/ya.make.inc
@@ -0,0 +1,1340 @@
+
+PEERDIR(
+ contrib/libs/zlib
+ library/cpp/sanitizer/include
+)
+
+ADDINCL(
+ contrib/libs/openssl
+ contrib/libs/openssl/crypto
+ contrib/libs/openssl/crypto/ec/curve448
+ contrib/libs/openssl/crypto/ec/curve448/arch_32
+ contrib/libs/openssl/crypto/modes
+ contrib/libs/openssl/include
+)
+
+CFLAGS(-DOPENSSL_BUILD=1)
+
+IF (OS_LINUX)
+ IF (ARCH_ARM64)
+ SET(LINUX_ARM64 yes)
+ ELSEIF (ARCH_ARM7)
+ SET(LINUX_ARMV7 yes)
+ ELSEIF (ARCH_X86_64)
+ SET(LINUX_X86_64 yes)
+ ENDIF()
+ENDIF()
+
+IF (OS_IOS)
+ IF (ARCH_ARM64)
+ SET(IOS_ARM64 yes)
+ ELSEIF (ARCH_ARM7)
+ SET(IOS_ARMV7 yes)
+ ELSEIF (ARCH_X86_64)
+ SET(IOS_X86_64 yes)
+ ELSEIF (ARCH_I386)
+ SET(IOS_I386 yes)
+ ENDIF()
+ENDIF()
+
+IF (OS_ANDROID)
+ IF (ARCH_ARM64)
+ SET(ANDROID_ARM64 yes)
+ ELSEIF (ARCH_ARM7)
+ SET(ANDROID_ARMV7 yes)
+ ELSEIF (ARCH_X86_64)
+ SET(ANDROID_X86_64 yes)
+ ELSEIF (ARCH_I686)
+ SET(ANDROID_I686 yes)
+ ENDIF()
+ENDIF()
+
+IF (OS_WINDOWS)
+ IF (ARCH_X86_64)
+ SET(WINDOWS_X86_64 yes)
+ ELSEIF (ARCH_I686)
+ SET(WINDOWS_I686 yes)
+ ENDIF()
+ENDIF()
+
+IF (OS_DARWIN AND ARCH_ARM64)
+ SET(DARWIN_ARM64 yes)
+ENDIF()
+
+NO_COMPILER_WARNINGS()
+
+NO_RUNTIME()
+
+SUPPRESSIONS(ubsan.supp)
+
+CFLAGS(
+ -DOPENSSL_BN_ASM_MONT
+ -DOPENSSL_CPUID_OBJ
+ -DSHA1_ASM
+ -DSHA256_ASM
+ -DSHA512_ASM
+ -DZLIB
+)
+
+IF (NOT OS_IOS AND NOT DARWIN_ARM64)
+ CFLAGS(
+ -DDSO_NONE
+ -DAESNI_ASM
+ )
+ENDIF()
+
+IF (NOT WINDOWS_I686)
+ CFLAGS(
+ -DECP_NISTZ256_ASM
+ -DPOLY1305_ASM
+ )
+ENDIF()
+
+IF (NOT IOS_I386 AND NOT ANDROID_I686 AND NOT WINDOWS_I686)
+ CFLAGS(
+ -DKECCAK1600_ASM
+ )
+ENDIF()
+
+IF (NOT IOS_ARMV7 AND NOT ANDROID_ARMV7 AND NOT LINUX_ARMV7)
+ CFLAGS(
+ -DVPAES_ASM
+ )
+ENDIF()
+
+IF (NOT OS_WINDOWS)
+ CFLAGS(
+ -DENGINESDIR=\"/usr/local/lib/engines-1.1\"
+ -DOPENSSLDIR=\"/usr/local/ssl\"
+ )
+ENDIF()
+
+IF (OS_DARWIN AND ARCH_X86_64 OR OS_LINUX AND ARCH_X86_64 OR OS_WINDOWS AND ARCH_X86_64)
+ CFLAGS(
+ -DGHASH_ASM
+ -DL_ENDIAN
+ -DMD5_ASM
+ -DOPENSSL_BN_ASM_GF2m
+ -DOPENSSL_BN_ASM_MONT5
+ -DOPENSSL_IA32_SSE2
+ -DRC4_ASM
+ -DX25519_ASM
+ )
+ENDIF()
+
+IF (OS_LINUX AND ARCH_AARCH64 OR OS_LINUX AND ARCH_X86_64)
+ CFLAGS(
+ -DOPENSSL_USE_NODELETE
+ )
+ENDIF()
+
+IF (OS_DARWIN AND ARCH_ARM64)
+ CFLAGS(
+ -DL_ENDIAN
+ -DOPENSSL_PIC
+ )
+ENDIF()
+
+IF (OS_WINDOWS)
+ IF (ARCH_X86_64)
+ CFLAGS(
+ -DENGINESDIR="\"C:\\\\Program\ Files\\\\OpenSSL\\\\lib\\\\engines-1_1\""
+ -DOPENSSLDIR="\"C:\\\\Program\ Files\\\\Common\ Files\\\\SSL\""
+ )
+ ELSEIF (ARCH_I386)
+ CFLAGS(
+ -DENGINESDIR="\"C:\\\\Program\ Files\ \(x86\)\\\\OpenSSL\\\\lib\\\\engines-1_1\""
+ -DOPENSSLDIR="\"C:\\\\Program\ Files\ \(x86\)\\\\Common\ Files\\\\SSL\""
+ )
+ ENDIF()
+ CFLAGS(
+ -DOPENSSL_SYS_WIN32
+ /GF
+ )
+ENDIF()
+
+IF (SANITIZER_TYPE == memory)
+ CFLAGS(
+ -DPURIFY
+ )
+ENDIF()
+
+IF (MUSL)
+ CFLAGS(
+ -DOPENSSL_NO_ASYNC
+ )
+ENDIF()
+
+IF (ARCH_TYPE_32)
+ CFLAGS(
+ -DOPENSSL_NO_EC_NISTP_64_GCC_128
+ )
+ENDIF()
+
+IF (ARCH_X86_64 AND NOT MSVC)
+ SET_APPEND(
+ SFLAGS
+ -mavx512bw
+ -mavx512ifma
+ -mavx512vl
+ )
+ENDIF()
+
+SRCS(
+ aes/aes_cbc.c
+ aes/aes_cfb.c
+ aes/aes_ecb.c
+ aes/aes_ige.c
+ aes/aes_misc.c
+ aes/aes_ofb.c
+ aes/aes_wrap.c
+ aria/aria.c
+ asn1/a_bitstr.c
+ asn1/a_d2i_fp.c
+ asn1/a_digest.c
+ asn1/a_dup.c
+ asn1/a_gentm.c
+ asn1/a_i2d_fp.c
+ asn1/a_int.c
+ asn1/a_mbstr.c
+ asn1/a_object.c
+ asn1/a_octet.c
+ asn1/a_print.c
+ asn1/a_sign.c
+ asn1/a_strex.c
+ asn1/a_strnid.c
+ asn1/a_time.c
+ asn1/a_type.c
+ asn1/a_utctm.c
+ asn1/a_utf8.c
+ asn1/a_verify.c
+ asn1/ameth_lib.c
+ asn1/asn1_err.c
+ asn1/asn1_gen.c
+ asn1/asn1_item_list.c
+ asn1/asn1_lib.c
+ asn1/asn1_par.c
+ asn1/asn_mime.c
+ asn1/asn_moid.c
+ asn1/asn_mstbl.c
+ asn1/asn_pack.c
+ asn1/bio_asn1.c
+ asn1/bio_ndef.c
+ asn1/d2i_pr.c
+ asn1/d2i_pu.c
+ asn1/evp_asn1.c
+ asn1/f_int.c
+ asn1/f_string.c
+ asn1/i2d_pr.c
+ asn1/i2d_pu.c
+ asn1/n_pkey.c
+ asn1/nsseq.c
+ asn1/p5_pbe.c
+ asn1/p5_pbev2.c
+ asn1/p5_scrypt.c
+ asn1/p8_pkey.c
+ asn1/t_bitst.c
+ asn1/t_pkey.c
+ asn1/t_spki.c
+ asn1/tasn_dec.c
+ asn1/tasn_enc.c
+ asn1/tasn_fre.c
+ asn1/tasn_new.c
+ asn1/tasn_prn.c
+ asn1/tasn_scn.c
+ asn1/tasn_typ.c
+ asn1/tasn_utl.c
+ asn1/x_algor.c
+ asn1/x_bignum.c
+ asn1/x_info.c
+ asn1/x_int64.c
+ asn1/x_long.c
+ asn1/x_pkey.c
+ asn1/x_sig.c
+ asn1/x_spki.c
+ asn1/x_val.c
+ async/arch/async_null.c
+ async/arch/async_posix.c
+ async/arch/async_win.c
+ async/async.c
+ async/async_err.c
+ async/async_wait.c
+ bf/bf_cfb64.c
+ bf/bf_ecb.c
+ bf/bf_ofb64.c
+ bf/bf_skey.c
+ bio/b_addr.c
+ bio/b_dump.c
+ bio/b_print.c
+ bio/b_sock.c
+ bio/b_sock2.c
+ bio/bf_buff.c
+ bio/bf_lbuf.c
+ bio/bf_nbio.c
+ bio/bf_null.c
+ bio/bio_cb.c
+ bio/bio_err.c
+ bio/bio_lib.c
+ bio/bio_meth.c
+ bio/bss_acpt.c
+ bio/bss_bio.c
+ bio/bss_conn.c
+ bio/bss_dgram.c
+ bio/bss_fd.c
+ bio/bss_file.c
+ bio/bss_log.c
+ bio/bss_mem.c
+ bio/bss_null.c
+ bio/bss_sock.c
+ blake2/blake2b.c
+ blake2/blake2s.c
+ blake2/m_blake2b.c
+ blake2/m_blake2s.c
+ bn/bn_add.c
+ bn/bn_blind.c
+ bn/bn_const.c
+ bn/bn_ctx.c
+ bn/bn_depr.c
+ bn/bn_dh.c
+ bn/bn_div.c
+ bn/bn_err.c
+ bn/bn_exp.c
+ bn/bn_exp2.c
+ bn/bn_gcd.c
+ bn/bn_gf2m.c
+ bn/bn_intern.c
+ bn/bn_kron.c
+ bn/bn_lib.c
+ bn/bn_mod.c
+ bn/bn_mont.c
+ bn/bn_mpi.c
+ bn/bn_mul.c
+ bn/bn_nist.c
+ bn/bn_prime.c
+ bn/bn_print.c
+ bn/bn_rand.c
+ bn/bn_recp.c
+ bn/bn_shift.c
+ bn/bn_sqr.c
+ bn/bn_sqrt.c
+ bn/bn_srp.c
+ bn/bn_word.c
+ bn/bn_x931p.c
+ buffer/buf_err.c
+ buffer/buffer.c
+ camellia/cmll_cfb.c
+ camellia/cmll_ctr.c
+ camellia/cmll_ecb.c
+ camellia/cmll_ofb.c
+ cast/c_cfb64.c
+ cast/c_ecb.c
+ cast/c_enc.c
+ cast/c_ofb64.c
+ cast/c_skey.c
+ cmac/cm_ameth.c
+ cmac/cm_pmeth.c
+ cmac/cmac.c
+ cms/cms_asn1.c
+ cms/cms_att.c
+ cms/cms_cd.c
+ cms/cms_dd.c
+ cms/cms_enc.c
+ cms/cms_env.c
+ cms/cms_err.c
+ cms/cms_ess.c
+ cms/cms_io.c
+ cms/cms_kari.c
+ cms/cms_lib.c
+ cms/cms_pwri.c
+ cms/cms_sd.c
+ cms/cms_smime.c
+ comp/c_zlib.c
+ comp/comp_err.c
+ comp/comp_lib.c
+ conf/conf_api.c
+ conf/conf_def.c
+ conf/conf_err.c
+ conf/conf_lib.c
+ conf/conf_mall.c
+ conf/conf_mod.c
+ conf/conf_sap.c
+ conf/conf_ssl.c
+ cpt_err.c
+ cryptlib.c
+ ct/ct_b64.c
+ ct/ct_err.c
+ ct/ct_log.c
+ ct/ct_oct.c
+ ct/ct_policy.c
+ ct/ct_prn.c
+ ct/ct_sct.c
+ ct/ct_sct_ctx.c
+ ct/ct_vfy.c
+ ct/ct_x509v3.c
+ ctype.c
+ cversion.c
+ des/cbc_cksm.c
+ des/cbc_enc.c
+ des/cfb64ede.c
+ des/cfb64enc.c
+ des/cfb_enc.c
+ des/ecb3_enc.c
+ des/ecb_enc.c
+ des/fcrypt.c
+ des/ofb64ede.c
+ des/ofb64enc.c
+ des/ofb_enc.c
+ des/pcbc_enc.c
+ des/qud_cksm.c
+ des/rand_key.c
+ des/set_key.c
+ des/str2key.c
+ des/xcbc_enc.c
+ dh/dh_ameth.c
+ dh/dh_asn1.c
+ dh/dh_check.c
+ dh/dh_depr.c
+ dh/dh_err.c
+ dh/dh_gen.c
+ dh/dh_kdf.c
+ dh/dh_key.c
+ dh/dh_lib.c
+ dh/dh_meth.c
+ dh/dh_pmeth.c
+ dh/dh_prn.c
+ dh/dh_rfc5114.c
+ dh/dh_rfc7919.c
+ dsa/dsa_ameth.c
+ dsa/dsa_asn1.c
+ dsa/dsa_depr.c
+ dsa/dsa_err.c
+ dsa/dsa_gen.c
+ dsa/dsa_key.c
+ dsa/dsa_lib.c
+ dsa/dsa_meth.c
+ dsa/dsa_ossl.c
+ dsa/dsa_pmeth.c
+ dsa/dsa_prn.c
+ dsa/dsa_sign.c
+ dsa/dsa_vrf.c
+ dso/dso_dl.c
+ dso/dso_err.c
+ dso/dso_lib.c
+ dso/dso_openssl.c
+ dso/dso_vms.c
+ dso/dso_win32.c
+ ebcdic.c
+ ec/curve25519.c
+ ec/curve448/arch_32/f_impl.c
+ ec/curve448/curve448.c
+ ec/curve448/curve448_tables.c
+ ec/curve448/eddsa.c
+ ec/curve448/f_generic.c
+ ec/curve448/scalar.c
+ ec/ec2_oct.c
+ ec/ec2_smpl.c
+ ec/ec_ameth.c
+ ec/ec_asn1.c
+ ec/ec_check.c
+ ec/ec_curve.c
+ ec/ec_cvt.c
+ ec/ec_err.c
+ ec/ec_key.c
+ ec/ec_kmeth.c
+ ec/ec_lib.c
+ ec/ec_mult.c
+ ec/ec_oct.c
+ ec/ec_pmeth.c
+ ec/ec_print.c
+ ec/ecdh_kdf.c
+ ec/ecdh_ossl.c
+ ec/ecdsa_ossl.c
+ ec/ecdsa_sign.c
+ ec/ecdsa_vrf.c
+ ec/eck_prn.c
+ ec/ecp_mont.c
+ ec/ecp_nist.c
+ ec/ecp_nistp224.c
+ ec/ecp_nistp256.c
+ ec/ecp_nistp521.c
+ ec/ecp_nistputil.c
+ ec/ecp_oct.c
+ ec/ecp_smpl.c
+ ec/ecx_meth.c
+ engine/eng_all.c
+ engine/eng_cnf.c
+ engine/eng_ctrl.c
+ engine/eng_dyn.c
+ engine/eng_err.c
+ engine/eng_fat.c
+ engine/eng_init.c
+ engine/eng_lib.c
+ engine/eng_list.c
+ engine/eng_openssl.c
+ engine/eng_pkey.c
+ engine/eng_rdrand.c
+ engine/eng_table.c
+ engine/tb_asnmth.c
+ engine/tb_cipher.c
+ engine/tb_dh.c
+ engine/tb_digest.c
+ engine/tb_dsa.c
+ engine/tb_eckey.c
+ engine/tb_pkmeth.c
+ engine/tb_rand.c
+ engine/tb_rsa.c
+ err/err.c
+ err/err_all.c
+ err/err_prn.c
+ evp/bio_b64.c
+ evp/bio_enc.c
+ evp/bio_md.c
+ evp/bio_ok.c
+ evp/c_allc.c
+ evp/c_alld.c
+ evp/cmeth_lib.c
+ evp/digest.c
+ evp/e_aes.c
+ evp/e_aes_cbc_hmac_sha1.c
+ evp/e_aes_cbc_hmac_sha256.c
+ evp/e_aria.c
+ evp/e_bf.c
+ evp/e_camellia.c
+ evp/e_cast.c
+ evp/e_chacha20_poly1305.c
+ evp/e_des.c
+ evp/e_des3.c
+ evp/e_idea.c
+ evp/e_null.c
+ evp/e_old.c
+ evp/e_rc2.c
+ evp/e_rc4.c
+ evp/e_rc4_hmac_md5.c
+ evp/e_rc5.c
+ evp/e_seed.c
+ evp/e_sm4.c
+ evp/e_xcbc_d.c
+ evp/encode.c
+ evp/evp_cnf.c
+ evp/evp_enc.c
+ evp/evp_err.c
+ evp/evp_key.c
+ evp/evp_lib.c
+ evp/evp_pbe.c
+ evp/evp_pkey.c
+ evp/m_md2.c
+ evp/m_md4.c
+ evp/m_md5.c
+ evp/m_md5_sha1.c
+ evp/m_mdc2.c
+ evp/m_null.c
+ evp/m_ripemd.c
+ evp/m_sha1.c
+ evp/m_sha3.c
+ evp/m_sigver.c
+ evp/m_wp.c
+ evp/names.c
+ evp/p5_crpt.c
+ evp/p5_crpt2.c
+ evp/p_dec.c
+ evp/p_enc.c
+ evp/p_lib.c
+ evp/p_open.c
+ evp/p_seal.c
+ evp/p_sign.c
+ evp/p_verify.c
+ evp/pbe_scrypt.c
+ evp/pmeth_fn.c
+ evp/pmeth_gn.c
+ evp/pmeth_lib.c
+ ex_data.c
+ getenv.c
+ hmac/hm_ameth.c
+ hmac/hm_pmeth.c
+ hmac/hmac.c
+ idea/i_cbc.c
+ idea/i_cfb64.c
+ idea/i_ecb.c
+ idea/i_ofb64.c
+ idea/i_skey.c
+ init.c
+ kdf/hkdf.c
+ kdf/kdf_err.c
+ kdf/scrypt.c
+ kdf/tls1_prf.c
+ lhash/lh_stats.c
+ lhash/lhash.c
+ md4/md4_dgst.c
+ md4/md4_one.c
+ md5/md5_dgst.c
+ md5/md5_one.c
+ mdc2/mdc2_one.c
+ mdc2/mdc2dgst.c
+ mem.c
+ mem_dbg.c
+ mem_sec.c
+ modes/cbc128.c
+ modes/ccm128.c
+ modes/cfb128.c
+ modes/ctr128.c
+ modes/cts128.c
+ modes/gcm128.c
+ modes/ocb128.c
+ modes/ofb128.c
+ modes/wrap128.c
+ modes/xts128.c
+ o_dir.c
+ o_fips.c
+ o_fopen.c
+ o_init.c
+ o_str.c
+ o_time.c
+ objects/o_names.c
+ objects/obj_dat.c
+ objects/obj_err.c
+ objects/obj_lib.c
+ objects/obj_xref.c
+ ocsp/ocsp_asn.c
+ ocsp/ocsp_cl.c
+ ocsp/ocsp_err.c
+ ocsp/ocsp_ext.c
+ ocsp/ocsp_ht.c
+ ocsp/ocsp_lib.c
+ ocsp/ocsp_prn.c
+ ocsp/ocsp_srv.c
+ ocsp/ocsp_vfy.c
+ ocsp/v3_ocsp.c
+ pem/pem_all.c
+ pem/pem_err.c
+ pem/pem_info.c
+ pem/pem_lib.c
+ pem/pem_oth.c
+ pem/pem_pk8.c
+ pem/pem_pkey.c
+ pem/pem_sign.c
+ pem/pem_x509.c
+ pem/pem_xaux.c
+ pem/pvkfmt.c
+ pkcs12/p12_add.c
+ pkcs12/p12_asn.c
+ pkcs12/p12_attr.c
+ pkcs12/p12_crpt.c
+ pkcs12/p12_crt.c
+ pkcs12/p12_decr.c
+ pkcs12/p12_init.c
+ pkcs12/p12_key.c
+ pkcs12/p12_kiss.c
+ pkcs12/p12_mutl.c
+ pkcs12/p12_npas.c
+ pkcs12/p12_p8d.c
+ pkcs12/p12_p8e.c
+ pkcs12/p12_sbag.c
+ pkcs12/p12_utl.c
+ pkcs12/pk12err.c
+ pkcs7/bio_pk7.c
+ pkcs7/pk7_asn1.c
+ pkcs7/pk7_attr.c
+ pkcs7/pk7_doit.c
+ pkcs7/pk7_lib.c
+ pkcs7/pk7_mime.c
+ pkcs7/pk7_smime.c
+ pkcs7/pkcs7err.c
+ poly1305/poly1305.c
+ poly1305/poly1305_ameth.c
+ poly1305/poly1305_pmeth.c
+ rand/drbg_ctr.c
+ rand/drbg_lib.c
+ rand/rand_egd.c
+ rand/rand_err.c
+ rand/rand_lib.c
+ rand/rand_unix.c
+ rand/rand_win.c
+ rand/randfile.c
+ rc2/rc2_cbc.c
+ rc2/rc2_ecb.c
+ rc2/rc2_skey.c
+ rc2/rc2cfb64.c
+ rc2/rc2ofb64.c
+ ripemd/rmd_dgst.c
+ ripemd/rmd_one.c
+ rsa/rsa_ameth.c
+ rsa/rsa_asn1.c
+ rsa/rsa_chk.c
+ rsa/rsa_crpt.c
+ rsa/rsa_depr.c
+ rsa/rsa_err.c
+ rsa/rsa_gen.c
+ rsa/rsa_lib.c
+ rsa/rsa_meth.c
+ rsa/rsa_mp.c
+ rsa/rsa_none.c
+ rsa/rsa_oaep.c
+ rsa/rsa_ossl.c
+ rsa/rsa_pk1.c
+ rsa/rsa_pmeth.c
+ rsa/rsa_prn.c
+ rsa/rsa_pss.c
+ rsa/rsa_saos.c
+ rsa/rsa_sign.c
+ rsa/rsa_ssl.c
+ rsa/rsa_x931.c
+ rsa/rsa_x931g.c
+ seed/seed.c
+ seed/seed_cbc.c
+ seed/seed_cfb.c
+ seed/seed_ecb.c
+ seed/seed_ofb.c
+ sha/sha1_one.c
+ sha/sha1dgst.c
+ sha/sha256.c
+ sha/sha512.c
+ siphash/siphash.c
+ siphash/siphash_ameth.c
+ siphash/siphash_pmeth.c
+ sm2/sm2_crypt.c
+ sm2/sm2_err.c
+ sm2/sm2_pmeth.c
+ sm2/sm2_sign.c
+ sm3/m_sm3.c
+ sm3/sm3.c
+ sm4/sm4.c
+ srp/srp_lib.c
+ srp/srp_vfy.c
+ stack/stack.c
+ store/loader_file.c
+ store/store_err.c
+ store/store_init.c
+ store/store_lib.c
+ store/store_register.c
+ store/store_strings.c
+ threads_none.c
+ threads_pthread.c
+ threads_win.c
+ ts/ts_asn1.c
+ ts/ts_conf.c
+ ts/ts_err.c
+ ts/ts_lib.c
+ ts/ts_req_print.c
+ ts/ts_req_utils.c
+ ts/ts_rsp_print.c
+ ts/ts_rsp_sign.c
+ ts/ts_rsp_utils.c
+ ts/ts_rsp_verify.c
+ ts/ts_verify_ctx.c
+ txt_db/txt_db.c
+ ui/ui_err.c
+ ui/ui_lib.c
+ ui/ui_null.c
+ ui/ui_openssl.c
+ ui/ui_util.c
+ uid.c
+ whrlpool/wp_dgst.c
+ x509/by_dir.c
+ x509/by_file.c
+ x509/t_crl.c
+ x509/t_req.c
+ x509/t_x509.c
+ x509/x509_att.c
+ x509/x509_cmp.c
+ x509/x509_d2.c
+ x509/x509_def.c
+ x509/x509_err.c
+ x509/x509_ext.c
+ x509/x509_lu.c
+ x509/x509_meth.c
+ x509/x509_obj.c
+ x509/x509_r2x.c
+ x509/x509_req.c
+ x509/x509_set.c
+ x509/x509_trs.c
+ x509/x509_txt.c
+ x509/x509_v3.c
+ x509/x509_vfy.c
+ x509/x509_vpm.c
+ x509/x509cset.c
+ x509/x509name.c
+ x509/x509rset.c
+ x509/x509spki.c
+ x509/x509type.c
+ x509/x_all.c
+ x509/x_attrib.c
+ x509/x_crl.c
+ x509/x_exten.c
+ x509/x_name.c
+ x509/x_pubkey.c
+ x509/x_req.c
+ x509/x_x509.c
+ x509/x_x509a.c
+ x509v3/pcy_cache.c
+ x509v3/pcy_data.c
+ x509v3/pcy_lib.c
+ x509v3/pcy_map.c
+ x509v3/pcy_node.c
+ x509v3/pcy_tree.c
+ x509v3/v3_addr.c
+ x509v3/v3_admis.c
+ x509v3/v3_akey.c
+ x509v3/v3_akeya.c
+ x509v3/v3_alt.c
+ x509v3/v3_asid.c
+ x509v3/v3_bcons.c
+ x509v3/v3_bitst.c
+ x509v3/v3_conf.c
+ x509v3/v3_cpols.c
+ x509v3/v3_crld.c
+ x509v3/v3_enum.c
+ x509v3/v3_extku.c
+ x509v3/v3_genn.c
+ x509v3/v3_ia5.c
+ x509v3/v3_info.c
+ x509v3/v3_int.c
+ x509v3/v3_lib.c
+ x509v3/v3_ncons.c
+ x509v3/v3_pci.c
+ x509v3/v3_pcia.c
+ x509v3/v3_pcons.c
+ x509v3/v3_pku.c
+ x509v3/v3_pmaps.c
+ x509v3/v3_prn.c
+ x509v3/v3_purp.c
+ x509v3/v3_skey.c
+ x509v3/v3_sxnet.c
+ x509v3/v3_tlsf.c
+ x509v3/v3_utl.c
+ x509v3/v3err.c
+)
+
+IF (NOT WINDOWS_I686)
+ SRCS(
+ ec/ecp_nistz256.c
+ )
+ENDIF()
+
+IF (NOT IOS_ARMV7 AND NOT ANDROID_ARMV7 AND NOT LINUX_ARMV7)
+ SRCS(
+ aes/aes_core.c
+ )
+ENDIF()
+
+IF (NOT IOS_I386 AND NOT ANDROID_I686 AND NOT WINDOWS_I686)
+ SRCS(
+ bf/bf_enc.c
+ camellia/cmll_misc.c
+ des/des_enc.c
+ des/fcrypt_b.c
+ )
+ENDIF()
+
+IF (OS_DARWIN AND ARCH_X86_64 OR OS_LINUX AND ARCH_X86_64 OR OS_WINDOWS AND ARCH_X86_64)
+ SRCS(
+ bn/rsaz_exp.c
+ )
+ENDIF()
+
+IF (OS_DARWIN AND ARCH_X86_64 OR OS_LINUX AND ARCH_X86_64)
+ SRCS(
+ bn/asm/x86_64-gcc.c
+ )
+ENDIF()
+
+IF (OS_LINUX AND ARCH_AARCH64 OR OS_WINDOWS AND ARCH_X86_64 OR OS_LINUX AND ARCH_PPC64LE)
+ SRCS(
+ bn/bn_asm.c
+ )
+ENDIF()
+
+IF (OS_DARWIN AND ARCH_X86_64)
+ SRCS(
+ ../asm/darwin/crypto/aes/aesni-mb-x86_64.s
+ ../asm/darwin/crypto/aes/aesni-sha1-x86_64.s
+ ../asm/darwin/crypto/aes/aesni-sha256-x86_64.s
+ ../asm/darwin/crypto/aes/aesni-x86_64.s
+ ../asm/darwin/crypto/aes/vpaes-x86_64.s
+ ../asm/darwin/crypto/bn/rsaz-avx2.s
+ ../asm/darwin/crypto/bn/rsaz-x86_64.s
+ ../asm/darwin/crypto/bn/x86_64-gf2m.s
+ ../asm/darwin/crypto/bn/x86_64-mont.s
+ ../asm/darwin/crypto/bn/x86_64-mont5.s
+ ../asm/darwin/crypto/camellia/cmll-x86_64.s
+ ../asm/darwin/crypto/chacha/chacha-x86_64.s
+ ../asm/darwin/crypto/ec/ecp_nistz256-x86_64.s
+ ../asm/darwin/crypto/ec/x25519-x86_64.s
+ ../asm/darwin/crypto/md5/md5-x86_64.s
+ ../asm/darwin/crypto/modes/aesni-gcm-x86_64.s
+ ../asm/darwin/crypto/modes/ghash-x86_64.s
+ ../asm/darwin/crypto/poly1305/poly1305-x86_64.s
+ ../asm/darwin/crypto/rc4/rc4-md5-x86_64.s
+ ../asm/darwin/crypto/rc4/rc4-x86_64.s
+ ../asm/darwin/crypto/sha/keccak1600-x86_64.s
+ ../asm/darwin/crypto/sha/sha1-mb-x86_64.s
+ ../asm/darwin/crypto/sha/sha1-x86_64.s
+ ../asm/darwin/crypto/sha/sha256-mb-x86_64.s
+ ../asm/darwin/crypto/sha/sha256-x86_64.s
+ ../asm/darwin/crypto/sha/sha512-x86_64.s
+ ../asm/darwin/crypto/whrlpool/wp-x86_64.s
+ ../asm/darwin/crypto/x86_64cpuid.s
+ )
+ENDIF()
+
+IF (OS_DARWIN AND ARCH_ARM64)
+ SRCS(
+ ../asm/darwin-arm64/crypto/sha/keccak1600-armv8.S
+ ../asm/darwin-arm64/crypto/sha/sha512-armv8.S
+ ../asm/darwin-arm64/crypto/sha/sha1-armv8.S
+ ../asm/darwin-arm64/crypto/sha/sha256-armv8.S
+ ../asm/darwin-arm64/crypto/poly1305/poly1305-armv8.S
+ ../asm/darwin-arm64/crypto/ec/ecp_nistz256-armv8.S
+ ../asm/darwin-arm64/crypto/chacha/chacha-armv8.S
+ ../asm/darwin-arm64/crypto/bn/armv8-mont.S
+ ../asm/darwin-arm64/crypto/arm64cpuid.S
+ ../asm/darwin-arm64/crypto/aes/aesv8-armx.S
+ ../asm/darwin-arm64/crypto/aes/vpaes-armv8.S
+ ../asm/darwin-arm64/crypto/modes/ghashv8-armx.S
+ armcap.c
+ bn/bn_asm.c
+ camellia/camellia.c
+ camellia/cmll_cbc.c
+ dso/dso_dlfcn.c
+ rc4/rc4_enc.c
+ rc4/rc4_skey.c
+ whrlpool/wp_block.c
+ )
+ENDIF()
+
+IF (OS_LINUX AND ARCH_ARM7)
+ CFLAGS(
+ -DOPENSSL_PIC
+ -DOPENSSL_BN_ASM_GF2m
+ -DAES_ASM
+ -DBSAES_ASM
+ -DGHASH_ASM
+ )
+ SRCS(
+ ../asm/android/arm/crypto/ec/ecp_nistz256-armv4.S
+ ../asm/android/arm/crypto/poly1305/poly1305-armv4.S
+ ../asm/android/arm/crypto/armv4cpuid.S
+ ../asm/android/arm/crypto/bn/armv4-mont.S
+ ../asm/android/arm/crypto/bn/armv4-gf2m.S
+ ../asm/android/arm/crypto/aes/aes-armv4.S
+ ../asm/android/arm/crypto/aes/bsaes-armv7.S
+ ../asm/android/arm/crypto/aes/aesv8-armx.S
+ ../asm/android/arm/crypto/sha/keccak1600-armv4.S
+ ../asm/android/arm/crypto/sha/sha256-armv4.S
+ ../asm/android/arm/crypto/sha/sha512-armv4.S
+ ../asm/android/arm/crypto/sha/sha1-armv4-large.S
+ ../asm/android/arm/crypto/chacha/chacha-armv4.S
+ ../asm/android/arm/crypto/modes/ghashv8-armx.S
+ ../asm/android/arm/crypto/modes/ghash-armv4.S
+ armcap.c
+ bn/bn_asm.c
+ camellia/camellia.c
+ camellia/cmll_cbc.c
+ dso/dso_dlfcn.c
+ rand/rand_vms.c
+ rc4/rc4_enc.c
+ rc4/rc4_skey.c
+ whrlpool/wp_block.c
+ )
+ENDIF()
+
+IF (OS_LINUX AND ARCH_AARCH64)
+ SRCS(
+ ../asm/aarch64/crypto/aes/aesv8-armx.S
+ ../asm/aarch64/crypto/aes/vpaes-armv8.S
+ ../asm/aarch64/crypto/arm64cpuid.S
+ ../asm/aarch64/crypto/bn/armv8-mont.S
+ ../asm/aarch64/crypto/chacha/chacha-armv8.S
+ ../asm/aarch64/crypto/ec/ecp_nistz256-armv8.S
+ ../asm/aarch64/crypto/modes/ghashv8-armx.S
+ ../asm/aarch64/crypto/poly1305/poly1305-armv8.S
+ ../asm/aarch64/crypto/sha/keccak1600-armv8.S
+ ../asm/aarch64/crypto/sha/sha1-armv8.S
+ ../asm/aarch64/crypto/sha/sha256-armv8.S
+ ../asm/aarch64/crypto/sha/sha512-armv8.S
+ armcap.c
+ camellia/camellia.c
+ camellia/cmll_cbc.c
+ rc4/rc4_enc.c
+ rc4/rc4_skey.c
+ whrlpool/wp_block.c
+ )
+ENDIF()
+
+IF (OS_LINUX AND ARCH_PPC64LE)
+ SRCS(
+ ../asm/ppc64le/crypto/aes/aesp8-ppc.s
+ ../asm/ppc64le/crypto/aes/vpaes-ppc.s
+ ../asm/ppc64le/crypto/bn/bn-ppc.s
+ ../asm/ppc64le/crypto/bn/ppc-mont.s
+ ../asm/ppc64le/crypto/chacha/chacha-ppc.s
+ ../asm/ppc64le/crypto/ec/ecp_nistz256-ppc64.s
+ ../asm/ppc64le/crypto/ec/x25519-ppc64.s
+ ../asm/ppc64le/crypto/modes/ghashp8-ppc.s
+ ../asm/ppc64le/crypto/poly1305/poly1305-ppc.s
+ ../asm/ppc64le/crypto/poly1305/poly1305-ppcfp.s
+ ../asm/ppc64le/crypto/ppccpuid.s
+ ../asm/ppc64le/crypto/sha/keccak1600-ppc64.s
+ ../asm/ppc64le/crypto/sha/sha1-ppc.s
+ ../asm/ppc64le/crypto/sha/sha256-ppc.s
+ ../asm/ppc64le/crypto/sha/sha256p8-ppc.s
+ ../asm/ppc64le/crypto/sha/sha512-ppc.s
+ ../asm/ppc64le/crypto/sha/sha512p8-ppc.s
+ ppccap.c
+ camellia/camellia.c
+ camellia/cmll_cbc.c
+ rc4/rc4_enc.c
+ rc4/rc4_skey.c
+ whrlpool/wp_block.c
+ )
+ENDIF()
+
+IF (OS_LINUX AND ARCH_X86_64)
+ SRCS(
+ ../asm/linux/crypto/aes/aesni-mb-x86_64.s
+ ../asm/linux/crypto/aes/aesni-sha1-x86_64.s
+ ../asm/linux/crypto/aes/aesni-sha256-x86_64.s
+ ../asm/linux/crypto/aes/aesni-x86_64.s
+ ../asm/linux/crypto/aes/vpaes-x86_64.s
+ ../asm/linux/crypto/bn/rsaz-avx2.s
+ ../asm/linux/crypto/bn/rsaz-x86_64.s
+ ../asm/linux/crypto/bn/x86_64-gf2m.s
+ ../asm/linux/crypto/bn/x86_64-mont.s
+ ../asm/linux/crypto/bn/x86_64-mont5.s
+ ../asm/linux/crypto/camellia/cmll-x86_64.s
+ ../asm/linux/crypto/chacha/chacha-x86_64.s
+ ../asm/linux/crypto/ec/ecp_nistz256-x86_64.s
+ ../asm/linux/crypto/ec/x25519-x86_64.s
+ ../asm/linux/crypto/md5/md5-x86_64.s
+ ../asm/linux/crypto/modes/aesni-gcm-x86_64.s
+ ../asm/linux/crypto/modes/ghash-x86_64.s
+ ../asm/linux/crypto/poly1305/poly1305-x86_64.s
+ ../asm/linux/crypto/rc4/rc4-md5-x86_64.s
+ ../asm/linux/crypto/rc4/rc4-x86_64.s
+ ../asm/linux/crypto/sha/keccak1600-x86_64.s
+ ../asm/linux/crypto/sha/sha1-mb-x86_64.s
+ ../asm/linux/crypto/sha/sha1-x86_64.s
+ ../asm/linux/crypto/sha/sha256-mb-x86_64.s
+ ../asm/linux/crypto/sha/sha256-x86_64.s
+ ../asm/linux/crypto/sha/sha512-x86_64.s
+ ../asm/linux/crypto/whrlpool/wp-x86_64.s
+ ../asm/linux/crypto/x86_64cpuid.s
+ )
+ENDIF()
+
+IF (OS_WINDOWS AND ARCH_X86_64)
+ SRCS(
+ ../asm/windows/crypto/aes/aesni-mb-x86_64.masm
+ ../asm/windows/crypto/aes/aesni-sha1-x86_64.masm
+ ../asm/windows/crypto/aes/aesni-sha256-x86_64.masm
+ ../asm/windows/crypto/aes/aesni-x86_64.masm
+ ../asm/windows/crypto/aes/vpaes-x86_64.masm
+ ../asm/windows/crypto/bn/rsaz-avx2.masm
+ ../asm/windows/crypto/bn/rsaz-x86_64.masm
+ ../asm/windows/crypto/bn/x86_64-gf2m.masm
+ ../asm/windows/crypto/bn/x86_64-mont.masm
+ ../asm/windows/crypto/bn/x86_64-mont5.masm
+ ../asm/windows/crypto/camellia/cmll-x86_64.masm
+ ../asm/windows/crypto/chacha/chacha-x86_64.masm
+ ../asm/windows/crypto/ec/ecp_nistz256-x86_64.masm
+ ../asm/windows/crypto/ec/x25519-x86_64.masm
+ ../asm/windows/crypto/md5/md5-x86_64.masm
+ ../asm/windows/crypto/modes/aesni-gcm-x86_64.masm
+ ../asm/windows/crypto/modes/ghash-x86_64.masm
+ ../asm/windows/crypto/poly1305/poly1305-x86_64.masm
+ ../asm/windows/crypto/rc4/rc4-md5-x86_64.masm
+ ../asm/windows/crypto/rc4/rc4-x86_64.masm
+ ../asm/windows/crypto/sha/keccak1600-x86_64.masm
+ ../asm/windows/crypto/sha/sha1-mb-x86_64.masm
+ ../asm/windows/crypto/sha/sha1-x86_64.masm
+ ../asm/windows/crypto/sha/sha256-mb-x86_64.masm
+ ../asm/windows/crypto/sha/sha256-x86_64.masm
+ ../asm/windows/crypto/sha/sha512-x86_64.masm
+ ../asm/windows/crypto/whrlpool/wp-x86_64.masm
+ ../asm/windows/crypto/uplink-x86_64.masm
+ ../asm/windows/crypto/x86_64cpuid.masm
+ )
+ENDIF()
+
+IF (OS_WINDOWS AND ARCH_I386)
+ CFLAGS(
+ -DGHASH_ASM
+ -DOPENSSL_BN_ASM_GF2m
+ -DRC4_ASM
+ -DMD5_ASM
+ )
+ MASMFLAGS(
+ /safeseh
+ )
+ SRCS(
+ ../asm/windows/crypto/aes/aesni-x86.masm
+ ../asm/windows/crypto/aes/vpaes-x86.masm
+ ../asm/windows/crypto/bn/x86-gf2m.masm
+ ../asm/windows/crypto/bn/x86-mont.masm
+ ../asm/windows/crypto/camellia/cmll-x86.masm
+ ../asm/windows/crypto/chacha/chacha-x86.masm
+ ../asm/windows/crypto/md5/md5-586.masm
+ ../asm/windows/crypto/modes/ghash-x86.masm
+ ../asm/windows/crypto/rc4/rc4-586.masm
+ ../asm/windows/crypto/sha/sha1-586.masm
+ ../asm/windows/crypto/sha/sha256-586.masm
+ ../asm/windows/crypto/sha/sha512-586.masm
+ ../asm/windows/crypto/x86cpuid.masm
+ bf/bf_enc.c
+ bn/bn_asm.c
+ des/des_enc.c
+ des/fcrypt_b.c
+ sha/keccak1600.c
+ whrlpool/wp_block.c
+ )
+ENDIF()
+
+IF (OS_IOS AND ARCH_ARM64)
+ CFLAGS(
+ -DOPENSSL_PIC
+ -D_REENTRANT
+ )
+ SRCS(
+ ../asm/ios/arm64/crypto/aes/aesv8-armx.S
+ ../asm/ios/arm64/crypto/aes/vpaes-armv8.S
+ ../asm/ios/arm64/crypto/arm64cpuid.S
+ ../asm/ios/arm64/crypto/bn/armv8-mont.S
+ ../asm/ios/arm64/crypto/chacha/chacha-armv8.S
+ ../asm/ios/arm64/crypto/ec/ecp_nistz256-armv8.S
+ ../asm/ios/arm64/crypto/modes/ghashv8-armx.S
+ ../asm/ios/arm64/crypto/poly1305/poly1305-armv8.S
+ ../asm/ios/arm64/crypto/sha/keccak1600-armv8.S
+ ../asm/ios/arm64/crypto/sha/sha1-armv8.S
+ ../asm/ios/arm64/crypto/sha/sha256-armv8.S
+ ../asm/ios/arm64/crypto/sha/sha512-armv8.S
+ armcap.c
+ bn/bn_asm.c
+ camellia/camellia.c
+ camellia/cmll_cbc.c
+ dso/dso_dlfcn.c
+ rand/rand_vms.c
+ rc4/rc4_enc.c
+ rc4/rc4_skey.c
+ whrlpool/wp_block.c
+ )
+ENDIF()
+
+IF (OS_IOS AND ARCH_X86_64)
+ CFLAGS(
+ -DL_ENDIAN
+ -DOPENSSL_PIC
+ -DOPENSSL_IA32_SSE2
+ -DOPENSSL_BN_ASM_MONT5
+ -DOPENSSL_BN_ASM_GF2m
+ -DRC4_ASM
+ -DMD5_ASM
+ -DGHASH_ASM
+ -DECP_NISTZ256_ASM
+ -DX25519_ASM
+ -D_REENTRANT
+ )
+ SRCS(
+ ../asm/ios/x86_64/crypto/md5/md5-x86_64.s
+ ../asm/ios/x86_64/crypto/rc4/rc4-md5-x86_64.s
+ ../asm/ios/x86_64/crypto/rc4/rc4-x86_64.s
+ ../asm/ios/x86_64/crypto/modes/ghash-x86_64.s
+ ../asm/ios/x86_64/crypto/modes/aesni-gcm-x86_64.s
+ ../asm/ios/x86_64/crypto/chacha/chacha-x86_64.s
+ ../asm/ios/x86_64/crypto/ec/ecp_nistz256-x86_64.s
+ ../asm/ios/x86_64/crypto/ec/x25519-x86_64.s
+ ../asm/ios/x86_64/crypto/x86_64cpuid.s
+ ../asm/ios/x86_64/crypto/poly1305/poly1305-x86_64.s
+ ../asm/ios/x86_64/crypto/bn/rsaz-x86_64.s
+ ../asm/ios/x86_64/crypto/bn/x86_64-mont.s
+ ../asm/ios/x86_64/crypto/bn/x86_64-gf2m.s
+ ../asm/ios/x86_64/crypto/bn/x86_64-mont5.s
+ ../asm/ios/x86_64/crypto/bn/rsaz-avx2.s
+ ../asm/ios/x86_64/crypto/sha/sha512-x86_64.s
+ ../asm/ios/x86_64/crypto/sha/sha256-x86_64.s
+ ../asm/ios/x86_64/crypto/sha/keccak1600-x86_64.s
+ ../asm/ios/x86_64/crypto/sha/sha1-x86_64.s
+ ../asm/ios/x86_64/crypto/sha/sha1-mb-x86_64.s
+ ../asm/ios/x86_64/crypto/sha/sha256-mb-x86_64.s
+ ../asm/ios/x86_64/crypto/camellia/cmll-x86_64.s
+ ../asm/ios/x86_64/crypto/whrlpool/wp-x86_64.s
+ ../asm/ios/x86_64/crypto/aes/vpaes-x86_64.s
+ ../asm/ios/x86_64/crypto/aes/aesni-sha1-x86_64.s
+ ../asm/ios/x86_64/crypto/aes/aesni-sha256-x86_64.s
+ ../asm/ios/x86_64/crypto/aes/aesni-x86_64.s
+ ../asm/ios/x86_64/crypto/aes/aesni-mb-x86_64.s
+ bn/asm/x86_64-gcc.c
+ bn/rsaz_exp.c
+ dso/dso_dlfcn.c
+ rand/rand_vms.c
+ )
+ENDIF()
+
+IF (OS_ANDROID AND ARCH_X86_64)
+ CFLAGS(
+ -DOPENSSL_USE_NODELETE
+ -DOPENSSL_PIC
+ -DOPENSSL_IA32_SSE2
+ -DOPENSSL_BN_ASM_MONT5
+ -DOPENSSL_BN_ASM_GF2m
+ -DRC4_ASM
+ -DMD5_ASM
+ -DGHASH_ASM
+ -DX25519_ASM
+ )
+ SRCS(
+ ../asm/android/x86_64/crypto/ec/x25519-x86_64.s
+ ../asm/android/x86_64/crypto/ec/ecp_nistz256-x86_64.s
+ ../asm/android/x86_64/crypto/md5/md5-x86_64.s
+ ../asm/android/x86_64/crypto/rc4/rc4-x86_64.s
+ ../asm/android/x86_64/crypto/rc4/rc4-md5-x86_64.s
+ ../asm/android/x86_64/crypto/whrlpool/wp-x86_64.s
+ ../asm/android/x86_64/crypto/poly1305/poly1305-x86_64.s
+ ../asm/android/x86_64/crypto/x86_64cpuid.s
+ ../asm/android/x86_64/crypto/camellia/cmll-x86_64.s
+ ../asm/android/x86_64/crypto/bn/x86_64-mont5.s
+ ../asm/android/x86_64/crypto/bn/rsaz-avx2.s
+ ../asm/android/x86_64/crypto/bn/rsaz-x86_64.s
+ ../asm/android/x86_64/crypto/bn/x86_64-mont.s
+ ../asm/android/x86_64/crypto/bn/x86_64-gf2m.s
+ ../asm/android/x86_64/crypto/aes/aesni-sha256-x86_64.s
+ ../asm/android/x86_64/crypto/aes/aesni-mb-x86_64.s
+ ../asm/android/x86_64/crypto/aes/aesni-x86_64.s
+ ../asm/android/x86_64/crypto/aes/vpaes-x86_64.s
+ ../asm/android/x86_64/crypto/aes/aesni-sha1-x86_64.s
+ ../asm/android/x86_64/crypto/sha/sha256-x86_64.s
+ ../asm/android/x86_64/crypto/sha/sha1-mb-x86_64.s
+ ../asm/android/x86_64/crypto/sha/sha1-x86_64.s
+ ../asm/android/x86_64/crypto/sha/sha256-mb-x86_64.s
+ ../asm/android/x86_64/crypto/sha/sha512-x86_64.s
+ ../asm/android/x86_64/crypto/sha/keccak1600-x86_64.s
+ ../asm/android/x86_64/crypto/chacha/chacha-x86_64.s
+ ../asm/android/x86_64/crypto/modes/ghash-x86_64.s
+ ../asm/android/x86_64/crypto/modes/aesni-gcm-x86_64.s
+ bn/asm/x86_64-gcc.c
+ bn/rsaz_exp.c
+ dso/dso_dlfcn.c
+ rand/rand_vms.c
+ )
+ENDIF()
+
+IF (OS_ANDROID AND ARCH_I686)
+ CFLAGS(
+ -DOPENSSL_PIC
+ -DOPENSSL_BN_ASM_PART_WORDS
+ -DOPENSSL_IA32_SSE2
+ -DOPENSSL_BN_ASM_GF2m
+ -DRC4_ASM
+ -DMD5_ASM
+ -DRMD160_ASM
+ -DWHIRLPOOL_ASM
+ -DGHASH_ASM
+ )
+ SRCS(
+ ../asm/android/i686/crypto/ec/ecp_nistz256-x86.s
+ ../asm/android/i686/crypto/bf/bf-586.s
+ ../asm/android/i686/crypto/md5/md5-586.s
+ ../asm/android/i686/crypto/rc4/rc4-586.s
+ ../asm/android/i686/crypto/whrlpool/wp-mmx.s
+ ../asm/android/i686/crypto/x86cpuid.s
+ ../asm/android/i686/crypto/des/crypt586.s
+ ../asm/android/i686/crypto/des/des-586.s
+ ../asm/android/i686/crypto/poly1305/poly1305-x86.s
+ ../asm/android/i686/crypto/ripemd/rmd-586.s
+ ../asm/android/i686/crypto/camellia/cmll-x86.s
+ ../asm/android/i686/crypto/bn/bn-586.s
+ ../asm/android/i686/crypto/bn/co-586.s
+ ../asm/android/i686/crypto/bn/x86-gf2m.s
+ ../asm/android/i686/crypto/bn/x86-mont.s
+ ../asm/android/i686/crypto/aes/aesni-x86.s
+ ../asm/android/i686/crypto/aes/vpaes-x86.s
+ ../asm/android/i686/crypto/sha/sha512-586.s
+ ../asm/android/i686/crypto/sha/sha256-586.s
+ ../asm/android/i686/crypto/sha/sha1-586.s
+ ../asm/android/i686/crypto/chacha/chacha-x86.s
+ ../asm/android/i686/crypto/modes/ghash-x86.s
+ dso/dso_dlfcn.c
+ rand/rand_vms.c
+ sha/keccak1600.c
+ whrlpool/wp_block.c
+ )
+ENDIF()
+
+IF (OS_ANDROID AND ARCH_ARM7)
+ IF (CLANG)
+ # XXX: This is a workarond for 'out of range immediate fixup value'
+ # error with clang integrated assembler:
+ # https://github.com/openssl/openssl/issues/7878
+ CFLAGS(
+ -mno-thumb
+ )
+ ENDIF()
+ CFLAGS(
+ -DOPENSSL_PIC
+ -DOPENSSL_BN_ASM_GF2m
+ -DAES_ASM
+ -DBSAES_ASM
+ -DGHASH_ASM
+ )
+ SRCS(
+ ../asm/android/arm/crypto/ec/ecp_nistz256-armv4.S
+ ../asm/android/arm/crypto/poly1305/poly1305-armv4.S
+ ../asm/android/arm/crypto/armv4cpuid.S
+ ../asm/android/arm/crypto/bn/armv4-mont.S
+ ../asm/android/arm/crypto/bn/armv4-gf2m.S
+ ../asm/android/arm/crypto/aes/aes-armv4.S
+ ../asm/android/arm/crypto/aes/bsaes-armv7.S
+ ../asm/android/arm/crypto/aes/aesv8-armx.S
+ ../asm/android/arm/crypto/sha/keccak1600-armv4.S
+ ../asm/android/arm/crypto/sha/sha256-armv4.S
+ ../asm/android/arm/crypto/sha/sha512-armv4.S
+ ../asm/android/arm/crypto/sha/sha1-armv4-large.S
+ ../asm/android/arm/crypto/chacha/chacha-armv4.S
+ ../asm/android/arm/crypto/modes/ghashv8-armx.S
+ ../asm/android/arm/crypto/modes/ghash-armv4.S
+ armcap.c
+ bn/bn_asm.c
+ camellia/camellia.c
+ camellia/cmll_cbc.c
+ dso/dso_dlfcn.c
+ rand/rand_vms.c
+ rc4/rc4_enc.c
+ rc4/rc4_skey.c
+ whrlpool/wp_block.c
+ )
+ENDIF()
+
+IF (OS_ANDROID AND ARCH_ARM64)
+ CFLAGS(
+ -DOPENSSL_PIC
+ )
+ SRCS(
+ ../asm/android/arm64/crypto/ec/ecp_nistz256-armv8.S
+ ../asm/android/arm64/crypto/poly1305/poly1305-armv8.S
+ ../asm/android/arm64/crypto/bn/armv8-mont.S
+ ../asm/android/arm64/crypto/aes/vpaes-armv8.S
+ ../asm/android/arm64/crypto/aes/aesv8-armx.S
+ ../asm/android/arm64/crypto/sha/sha512-armv8.S
+ ../asm/android/arm64/crypto/sha/keccak1600-armv8.S
+ ../asm/android/arm64/crypto/sha/sha1-armv8.S
+ ../asm/android/arm64/crypto/sha/sha256-armv8.S
+ ../asm/android/arm64/crypto/arm64cpuid.S
+ ../asm/android/arm64/crypto/chacha/chacha-armv8.S
+ ../asm/android/arm64/crypto/modes/ghashv8-armx.S
+ armcap.c
+ bn/bn_asm.c
+ camellia/camellia.c
+ camellia/cmll_cbc.c
+ dso/dso_dlfcn.c
+ rand/rand_vms.c
+ rc4/rc4_enc.c
+ rc4/rc4_skey.c
+ whrlpool/wp_block.c
+ )
+ENDIF()
+
+# mitigate SIGILL on some armv7 platforms
+# https://github.com/openssl/openssl/issues/17009
+IF (ARCADIA_OPENSSL_DISABLE_ARMV7_TICK)
+ CFLAGS(
+ -DARCADIA_OPENSSL_DISABLE_ARMV7_TICK
+ )
+ENDIF()
diff --git a/contrib/libs/openssl/include/crypto/aria.h b/contrib/libs/openssl/include/crypto/aria.h
index 03a62950ae4..62ca8d98f46 100644
--- a/contrib/libs/openssl/include/crypto/aria.h
+++ b/contrib/libs/openssl/include/crypto/aria.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved.
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
diff --git a/contrib/libs/openssl/include/crypto/asn1.h b/contrib/libs/openssl/include/crypto/asn1.h
index 9c9b4d89745..2ae5f59e15a 100644
--- a/contrib/libs/openssl/include/crypto/asn1.h
+++ b/contrib/libs/openssl/include/crypto/asn1.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/crypto/async.h b/contrib/libs/openssl/include/crypto/async.h
index dc8e937b0ce..1b4ea1c7096 100644
--- a/contrib/libs/openssl/include/crypto/async.h
+++ b/contrib/libs/openssl/include/crypto/async.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/crypto/bn.h b/contrib/libs/openssl/include/crypto/bn.h
index 250914c46a2..9dc1de12019 100644
--- a/contrib/libs/openssl/include/crypto/bn.h
+++ b/contrib/libs/openssl/include/crypto/bn.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2014-2023 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/crypto/bn_conf-android-arm.h b/contrib/libs/openssl/include/crypto/bn_conf-android-arm.h
index 16d6e93a00d..8e0ff3e967b 100644
--- a/contrib/libs/openssl/include/crypto/bn_conf-android-arm.h
+++ b/contrib/libs/openssl/include/crypto/bn_conf-android-arm.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/* WARNING: do not edit! */
/* Generated by Makefile from ../include/crypto/bn_conf.h.in */
/*
diff --git a/contrib/libs/openssl/include/crypto/bn_conf-android-arm64.h b/contrib/libs/openssl/include/crypto/bn_conf-android-arm64.h
index 0bacac0ee3e..ba4222b5abe 100644
--- a/contrib/libs/openssl/include/crypto/bn_conf-android-arm64.h
+++ b/contrib/libs/openssl/include/crypto/bn_conf-android-arm64.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/* WARNING: do not edit! */
/* Generated by Makefile from ../include/crypto/bn_conf.h.in */
/*
diff --git a/contrib/libs/openssl/include/crypto/bn_conf-android-i686.h b/contrib/libs/openssl/include/crypto/bn_conf-android-i686.h
index 16d6e93a00d..8e0ff3e967b 100644
--- a/contrib/libs/openssl/include/crypto/bn_conf-android-i686.h
+++ b/contrib/libs/openssl/include/crypto/bn_conf-android-i686.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/* WARNING: do not edit! */
/* Generated by Makefile from ../include/crypto/bn_conf.h.in */
/*
diff --git a/contrib/libs/openssl/include/crypto/bn_conf-android-x86_64.h b/contrib/libs/openssl/include/crypto/bn_conf-android-x86_64.h
index 0bacac0ee3e..ba4222b5abe 100644
--- a/contrib/libs/openssl/include/crypto/bn_conf-android-x86_64.h
+++ b/contrib/libs/openssl/include/crypto/bn_conf-android-x86_64.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/* WARNING: do not edit! */
/* Generated by Makefile from ../include/crypto/bn_conf.h.in */
/*
diff --git a/contrib/libs/openssl/include/crypto/bn_conf-ios-arm64.h b/contrib/libs/openssl/include/crypto/bn_conf-ios-arm64.h
index 0bacac0ee3e..ba4222b5abe 100644
--- a/contrib/libs/openssl/include/crypto/bn_conf-ios-arm64.h
+++ b/contrib/libs/openssl/include/crypto/bn_conf-ios-arm64.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/* WARNING: do not edit! */
/* Generated by Makefile from ../include/crypto/bn_conf.h.in */
/*
diff --git a/contrib/libs/openssl/include/crypto/bn_conf-ios-x86_64.h b/contrib/libs/openssl/include/crypto/bn_conf-ios-x86_64.h
index 0bacac0ee3e..ba4222b5abe 100644
--- a/contrib/libs/openssl/include/crypto/bn_conf-ios-x86_64.h
+++ b/contrib/libs/openssl/include/crypto/bn_conf-ios-x86_64.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/* WARNING: do not edit! */
/* Generated by Makefile from ../include/crypto/bn_conf.h.in */
/*
diff --git a/contrib/libs/openssl/include/crypto/bn_conf-linux-aarch64.h b/contrib/libs/openssl/include/crypto/bn_conf-linux-aarch64.h
index 0bacac0ee3e..ba4222b5abe 100644
--- a/contrib/libs/openssl/include/crypto/bn_conf-linux-aarch64.h
+++ b/contrib/libs/openssl/include/crypto/bn_conf-linux-aarch64.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/* WARNING: do not edit! */
/* Generated by Makefile from ../include/crypto/bn_conf.h.in */
/*
diff --git a/contrib/libs/openssl/include/crypto/bn_conf-linux-arm.h b/contrib/libs/openssl/include/crypto/bn_conf-linux-arm.h
index 16d6e93a00d..8e0ff3e967b 100644
--- a/contrib/libs/openssl/include/crypto/bn_conf-linux-arm.h
+++ b/contrib/libs/openssl/include/crypto/bn_conf-linux-arm.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/* WARNING: do not edit! */
/* Generated by Makefile from ../include/crypto/bn_conf.h.in */
/*
diff --git a/contrib/libs/openssl/include/crypto/bn_conf-linux.h b/contrib/libs/openssl/include/crypto/bn_conf-linux.h
index 5312ef5a7ac..122dc0d4462 100644
--- a/contrib/libs/openssl/include/crypto/bn_conf-linux.h
+++ b/contrib/libs/openssl/include/crypto/bn_conf-linux.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/* WARNING: do not edit! */
/* Generated by Makefile from include/crypto/bn_conf.h.in */
/*
diff --git a/contrib/libs/openssl/include/crypto/bn_conf-win-i686.h b/contrib/libs/openssl/include/crypto/bn_conf-win-i686.h
index bf6adeb11da..8c0c1b634df 100644
--- a/contrib/libs/openssl/include/crypto/bn_conf-win-i686.h
+++ b/contrib/libs/openssl/include/crypto/bn_conf-win-i686.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/* WARNING: do not edit! */
/* Generated by makefile from include\crypto\bn_conf.h.in */
/*
diff --git a/contrib/libs/openssl/include/crypto/bn_conf-win-x86_64.h b/contrib/libs/openssl/include/crypto/bn_conf-win-x86_64.h
index 2d8fa641fb4..701ec323712 100644
--- a/contrib/libs/openssl/include/crypto/bn_conf-win-x86_64.h
+++ b/contrib/libs/openssl/include/crypto/bn_conf-win-x86_64.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/* WARNING: do not edit! */
/* Generated by makefile from ..\include\crypto\bn_conf.h.in */
/*
diff --git a/contrib/libs/openssl/include/crypto/bn_conf.h b/contrib/libs/openssl/include/crypto/bn_conf.h
index 5557ad09f81..6fcd0eb83b7 100644
--- a/contrib/libs/openssl/include/crypto/bn_conf.h
+++ b/contrib/libs/openssl/include/crypto/bn_conf.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
#pragma once
#if defined(__ANDROID__) && defined(__arm__)
diff --git a/contrib/libs/openssl/include/crypto/bn_dh.h b/contrib/libs/openssl/include/crypto/bn_dh.h
index 70ebca28753..f24cdb911b1 100644
--- a/contrib/libs/openssl/include/crypto/bn_dh.h
+++ b/contrib/libs/openssl/include/crypto/bn_dh.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/crypto/bn_srp.h b/contrib/libs/openssl/include/crypto/bn_srp.h
index d4b282a6bbb..acc41d2ea99 100644
--- a/contrib/libs/openssl/include/crypto/bn_srp.h
+++ b/contrib/libs/openssl/include/crypto/bn_srp.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/crypto/chacha.h b/contrib/libs/openssl/include/crypto/chacha.h
index 4029400a670..ca6122dddcc 100644
--- a/contrib/libs/openssl/include/crypto/chacha.h
+++ b/contrib/libs/openssl/include/crypto/chacha.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/crypto/cryptlib.h b/contrib/libs/openssl/include/crypto/cryptlib.h
index 38b5dac9a36..3997434530d 100644
--- a/contrib/libs/openssl/include/crypto/cryptlib.h
+++ b/contrib/libs/openssl/include/crypto/cryptlib.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/crypto/ctype.h b/contrib/libs/openssl/include/crypto/ctype.h
index 81ef8f5cf7e..151e6176350 100644
--- a/contrib/libs/openssl/include/crypto/ctype.h
+++ b/contrib/libs/openssl/include/crypto/ctype.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2017-2019 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/crypto/dso_conf-android.h b/contrib/libs/openssl/include/crypto/dso_conf-android.h
index 2c3b4797c3f..4b39d64c950 100644
--- a/contrib/libs/openssl/include/crypto/dso_conf-android.h
+++ b/contrib/libs/openssl/include/crypto/dso_conf-android.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/* WARNING: do not edit! */
/* Generated by Makefile from ../include/crypto/dso_conf.h.in */
/*
diff --git a/contrib/libs/openssl/include/crypto/dso_conf-ios-arm64.h b/contrib/libs/openssl/include/crypto/dso_conf-ios-arm64.h
index 7ba83eb01f1..14cebffdb1b 100644
--- a/contrib/libs/openssl/include/crypto/dso_conf-ios-arm64.h
+++ b/contrib/libs/openssl/include/crypto/dso_conf-ios-arm64.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
#pragma once
#include "dso_conf-osx-arm64.h"
diff --git a/contrib/libs/openssl/include/crypto/dso_conf-linux-aarch64.h b/contrib/libs/openssl/include/crypto/dso_conf-linux-aarch64.h
index 8cc3aaf172d..3625be86d6b 100644
--- a/contrib/libs/openssl/include/crypto/dso_conf-linux-aarch64.h
+++ b/contrib/libs/openssl/include/crypto/dso_conf-linux-aarch64.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/* WARNING: do not edit! */
/* Generated by Makefile from include/crypto/dso_conf.h.in */
/*
diff --git a/contrib/libs/openssl/include/crypto/dso_conf-linux.h b/contrib/libs/openssl/include/crypto/dso_conf-linux.h
index 8cc3aaf172d..3625be86d6b 100644
--- a/contrib/libs/openssl/include/crypto/dso_conf-linux.h
+++ b/contrib/libs/openssl/include/crypto/dso_conf-linux.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/* WARNING: do not edit! */
/* Generated by Makefile from include/crypto/dso_conf.h.in */
/*
diff --git a/contrib/libs/openssl/include/crypto/dso_conf-osx-arm64.h b/contrib/libs/openssl/include/crypto/dso_conf-osx-arm64.h
index d2e22e2c03b..fddab085785 100644
--- a/contrib/libs/openssl/include/crypto/dso_conf-osx-arm64.h
+++ b/contrib/libs/openssl/include/crypto/dso_conf-osx-arm64.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/* WARNING: do not edit! */
/* Generated by Makefile from ../include/crypto/dso_conf.h.in */
/*
diff --git a/contrib/libs/openssl/include/crypto/dso_conf-win.h b/contrib/libs/openssl/include/crypto/dso_conf-win.h
index 576fcbe9ed1..542dc0f6479 100644
--- a/contrib/libs/openssl/include/crypto/dso_conf-win.h
+++ b/contrib/libs/openssl/include/crypto/dso_conf-win.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/* WARNING: do not edit! */
/* Generated by makefile from ..\include\crypto\dso_conf.h.in */
/*
diff --git a/contrib/libs/openssl/include/crypto/dso_conf.h b/contrib/libs/openssl/include/crypto/dso_conf.h
index 39695b0aaa8..fd60cdfe832 100644
--- a/contrib/libs/openssl/include/crypto/dso_conf.h
+++ b/contrib/libs/openssl/include/crypto/dso_conf.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
#pragma once
#if defined(__ANDROID__)
diff --git a/contrib/libs/openssl/include/crypto/ec.h b/contrib/libs/openssl/include/crypto/ec.h
index fe52ae704bb..692c80b1728 100644
--- a/contrib/libs/openssl/include/crypto/ec.h
+++ b/contrib/libs/openssl/include/crypto/ec.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/crypto/engine.h b/contrib/libs/openssl/include/crypto/engine.h
index f80ae3ec30c..51bad4f2064 100644
--- a/contrib/libs/openssl/include/crypto/engine.h
+++ b/contrib/libs/openssl/include/crypto/engine.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/crypto/err.h b/contrib/libs/openssl/include/crypto/err.h
index 8ab0e5baaa2..6ddd10fdfe2 100644
--- a/contrib/libs/openssl/include/crypto/err.h
+++ b/contrib/libs/openssl/include/crypto/err.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/crypto/evp.h b/contrib/libs/openssl/include/crypto/evp.h
index d86aed36f07..3a85dcac172 100644
--- a/contrib/libs/openssl/include/crypto/evp.h
+++ b/contrib/libs/openssl/include/crypto/evp.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/crypto/lhash.h b/contrib/libs/openssl/include/crypto/lhash.h
index ab060cce74b..d0de7e08e9f 100644
--- a/contrib/libs/openssl/include/crypto/lhash.h
+++ b/contrib/libs/openssl/include/crypto/lhash.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/crypto/md32_common.h b/contrib/libs/openssl/include/crypto/md32_common.h
index 1124e9c24b2..3ada03ab519 100644
--- a/contrib/libs/openssl/include/crypto/md32_common.h
+++ b/contrib/libs/openssl/include/crypto/md32_common.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/crypto/objects.h b/contrib/libs/openssl/include/crypto/objects.h
index 76e1b4d9883..5b0e68ad9e4 100644
--- a/contrib/libs/openssl/include/crypto/objects.h
+++ b/contrib/libs/openssl/include/crypto/objects.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/crypto/poly1305.h b/contrib/libs/openssl/include/crypto/poly1305.h
index 5fef239d0f8..a3b1354c245 100644
--- a/contrib/libs/openssl/include/crypto/poly1305.h
+++ b/contrib/libs/openssl/include/crypto/poly1305.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/crypto/rand.h b/contrib/libs/openssl/include/crypto/rand.h
index 9e02bb0e504..5c3205d65e0 100644
--- a/contrib/libs/openssl/include/crypto/rand.h
+++ b/contrib/libs/openssl/include/crypto/rand.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/crypto/sha.h b/contrib/libs/openssl/include/crypto/sha.h
index 6d15edb9e57..4c8ac809acb 100644
--- a/contrib/libs/openssl/include/crypto/sha.h
+++ b/contrib/libs/openssl/include/crypto/sha.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2018 The OpenSSL Project Authors. All Rights Reserved.
* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
diff --git a/contrib/libs/openssl/include/crypto/siphash.h b/contrib/libs/openssl/include/crypto/siphash.h
index 9573680f0f1..4c7da551640 100644
--- a/contrib/libs/openssl/include/crypto/siphash.h
+++ b/contrib/libs/openssl/include/crypto/siphash.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/crypto/sm2.h b/contrib/libs/openssl/include/crypto/sm2.h
index a7f5548c084..71b1b55452f 100644
--- a/contrib/libs/openssl/include/crypto/sm2.h
+++ b/contrib/libs/openssl/include/crypto/sm2.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.
* Copyright 2017 Ribose Inc. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/crypto/sm2err.h b/contrib/libs/openssl/include/crypto/sm2err.h
index d1c0ee25918..97c40403268 100644
--- a/contrib/libs/openssl/include/crypto/sm2err.h
+++ b/contrib/libs/openssl/include/crypto/sm2err.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/crypto/sm3.h b/contrib/libs/openssl/include/crypto/sm3.h
index 97e74603333..5a6de5c9928 100644
--- a/contrib/libs/openssl/include/crypto/sm3.h
+++ b/contrib/libs/openssl/include/crypto/sm3.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2017 The OpenSSL Project Authors. All Rights Reserved.
* Copyright 2017 Ribose Inc. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/crypto/sm4.h b/contrib/libs/openssl/include/crypto/sm4.h
index abe28f385e0..8607cd7cdd0 100644
--- a/contrib/libs/openssl/include/crypto/sm4.h
+++ b/contrib/libs/openssl/include/crypto/sm4.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2017 The OpenSSL Project Authors. All Rights Reserved.
* Copyright 2017 Ribose Inc. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/crypto/store.h b/contrib/libs/openssl/include/crypto/store.h
index 428d3c60e13..fc3197e3796 100644
--- a/contrib/libs/openssl/include/crypto/store.h
+++ b/contrib/libs/openssl/include/crypto/store.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/crypto/x509.h b/contrib/libs/openssl/include/crypto/x509.h
index 243ea74f6f4..b9b5014ae7e 100644
--- a/contrib/libs/openssl/include/crypto/x509.h
+++ b/contrib/libs/openssl/include/crypto/x509.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/internal/bio.h b/contrib/libs/openssl/include/internal/bio.h
index c343b276295..1463aa3a882 100644
--- a/contrib/libs/openssl/include/internal/bio.h
+++ b/contrib/libs/openssl/include/internal/bio.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/internal/comp.h b/contrib/libs/openssl/include/internal/comp.h
index ac6e38b4741..dac3832fd34 100644
--- a/contrib/libs/openssl/include/internal/comp.h
+++ b/contrib/libs/openssl/include/internal/comp.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/internal/conf.h b/contrib/libs/openssl/include/internal/conf.h
index 163fea8de41..abc0e9bffc7 100644
--- a/contrib/libs/openssl/include/internal/conf.h
+++ b/contrib/libs/openssl/include/internal/conf.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/internal/constant_time.h b/contrib/libs/openssl/include/internal/constant_time.h
index 6600a1d72ae..de280674c6b 100644
--- a/contrib/libs/openssl/include/internal/constant_time.h
+++ b/contrib/libs/openssl/include/internal/constant_time.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2014-2019 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/internal/cryptlib.h b/contrib/libs/openssl/include/internal/cryptlib.h
index 6e7291ae41b..960f1faa3f0 100644
--- a/contrib/libs/openssl/include/internal/cryptlib.h
+++ b/contrib/libs/openssl/include/internal/cryptlib.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/internal/dane.h b/contrib/libs/openssl/include/internal/dane.h
index 7a39bd7d7d4..5f1e51fdad5 100644
--- a/contrib/libs/openssl/include/internal/dane.h
+++ b/contrib/libs/openssl/include/internal/dane.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/internal/dso.h b/contrib/libs/openssl/include/internal/dso.h
index c57c0c40759..cf221834477 100644
--- a/contrib/libs/openssl/include/internal/dso.h
+++ b/contrib/libs/openssl/include/internal/dso.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/internal/dsoerr.h b/contrib/libs/openssl/include/internal/dsoerr.h
index 94d642a22d8..5f7eaf19824 100644
--- a/contrib/libs/openssl/include/internal/dsoerr.h
+++ b/contrib/libs/openssl/include/internal/dsoerr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/internal/err.h b/contrib/libs/openssl/include/internal/err.h
index 88dde705915..0f46e602541 100644
--- a/contrib/libs/openssl/include/internal/err.h
+++ b/contrib/libs/openssl/include/internal/err.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/internal/nelem.h b/contrib/libs/openssl/include/internal/nelem.h
index 699ef88ee52..05db4cb7730 100644
--- a/contrib/libs/openssl/include/internal/nelem.h
+++ b/contrib/libs/openssl/include/internal/nelem.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2017 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/internal/numbers.h b/contrib/libs/openssl/include/internal/numbers.h
index f5ade5226e5..9b4d74a7011 100644
--- a/contrib/libs/openssl/include/internal/numbers.h
+++ b/contrib/libs/openssl/include/internal/numbers.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/internal/o_dir.h b/contrib/libs/openssl/include/internal/o_dir.h
index dafc8dd2e74..3e888d9d836 100644
--- a/contrib/libs/openssl/include/internal/o_dir.h
+++ b/contrib/libs/openssl/include/internal/o_dir.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/internal/o_str.h b/contrib/libs/openssl/include/internal/o_str.h
index 15c12e820d2..1b053a0e857 100644
--- a/contrib/libs/openssl/include/internal/o_str.h
+++ b/contrib/libs/openssl/include/internal/o_str.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2003-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/internal/refcount.h b/contrib/libs/openssl/include/internal/refcount.h
index fcc74778bd8..0bf984e15af 100644
--- a/contrib/libs/openssl/include/internal/refcount.h
+++ b/contrib/libs/openssl/include/internal/refcount.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/internal/sockets.h b/contrib/libs/openssl/include/internal/sockets.h
index 79bf1dfda6c..1a30f950d70 100644
--- a/contrib/libs/openssl/include/internal/sockets.h
+++ b/contrib/libs/openssl/include/internal/sockets.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/internal/sslconf.h b/contrib/libs/openssl/include/internal/sslconf.h
index 92c8941d025..b2250746d35 100644
--- a/contrib/libs/openssl/include/internal/sslconf.h
+++ b/contrib/libs/openssl/include/internal/sslconf.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/internal/thread_once.h b/contrib/libs/openssl/include/internal/thread_once.h
index 8f8aa6e1c4b..fb744f534ad 100644
--- a/contrib/libs/openssl/include/internal/thread_once.h
+++ b/contrib/libs/openssl/include/internal/thread_once.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/internal/tsan_assist.h b/contrib/libs/openssl/include/internal/tsan_assist.h
index cc30162eb74..718316ffb4c 100644
--- a/contrib/libs/openssl/include/internal/tsan_assist.h
+++ b/contrib/libs/openssl/include/internal/tsan_assist.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2018-2019 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/aes.h b/contrib/libs/openssl/include/openssl/aes.h
index 245c552abd0..4f022211695 100644
--- a/contrib/libs/openssl/include/openssl/aes.h
+++ b/contrib/libs/openssl/include/openssl/aes.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/asn1.h b/contrib/libs/openssl/include/openssl/asn1.h
index 9522eec18f7..d5748d952ef 100644
--- a/contrib/libs/openssl/include/openssl/asn1.h
+++ b/contrib/libs/openssl/include/openssl/asn1.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/asn1_mac.h b/contrib/libs/openssl/include/openssl/asn1_mac.h
index 7ac1782a3f2..81e504c3caf 100644
--- a/contrib/libs/openssl/include/openssl/asn1_mac.h
+++ b/contrib/libs/openssl/include/openssl/asn1_mac.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/asn1err.h b/contrib/libs/openssl/include/openssl/asn1err.h
index e1ad1fefeca..814f54d0586 100644
--- a/contrib/libs/openssl/include/openssl/asn1err.h
+++ b/contrib/libs/openssl/include/openssl/asn1err.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/asn1t.h b/contrib/libs/openssl/include/openssl/asn1t.h
index a450ba0d9de..4ed5892f5c2 100644
--- a/contrib/libs/openssl/include/openssl/asn1t.h
+++ b/contrib/libs/openssl/include/openssl/asn1t.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/async.h b/contrib/libs/openssl/include/openssl/async.h
index 7052b89052a..2b666ab6d62 100644
--- a/contrib/libs/openssl/include/openssl/async.h
+++ b/contrib/libs/openssl/include/openssl/async.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/asyncerr.h b/contrib/libs/openssl/include/openssl/asyncerr.h
index 91afbbb2f5b..60ba1499e90 100644
--- a/contrib/libs/openssl/include/openssl/asyncerr.h
+++ b/contrib/libs/openssl/include/openssl/asyncerr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/bio.h b/contrib/libs/openssl/include/openssl/bio.h
index ae559a51050..b5000bc13ca 100644
--- a/contrib/libs/openssl/include/openssl/bio.h
+++ b/contrib/libs/openssl/include/openssl/bio.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/bioerr.h b/contrib/libs/openssl/include/openssl/bioerr.h
index 46e2c96ee35..13b9517a6e5 100644
--- a/contrib/libs/openssl/include/openssl/bioerr.h
+++ b/contrib/libs/openssl/include/openssl/bioerr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/blowfish.h b/contrib/libs/openssl/include/openssl/blowfish.h
index cd3e460e98f..69ca7c35940 100644
--- a/contrib/libs/openssl/include/openssl/blowfish.h
+++ b/contrib/libs/openssl/include/openssl/blowfish.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/bn.h b/contrib/libs/openssl/include/openssl/bn.h
index d87766049a4..7f5b32b49ce 100644
--- a/contrib/libs/openssl/include/openssl/bn.h
+++ b/contrib/libs/openssl/include/openssl/bn.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
diff --git a/contrib/libs/openssl/include/openssl/bnerr.h b/contrib/libs/openssl/include/openssl/bnerr.h
index 5c83777f9f0..8157683f775 100644
--- a/contrib/libs/openssl/include/openssl/bnerr.h
+++ b/contrib/libs/openssl/include/openssl/bnerr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/buffer.h b/contrib/libs/openssl/include/openssl/buffer.h
index d2765766b7c..67838036a9c 100644
--- a/contrib/libs/openssl/include/openssl/buffer.h
+++ b/contrib/libs/openssl/include/openssl/buffer.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/buffererr.h b/contrib/libs/openssl/include/openssl/buffererr.h
index 04f6ff7a839..5ed0c94b1c9 100644
--- a/contrib/libs/openssl/include/openssl/buffererr.h
+++ b/contrib/libs/openssl/include/openssl/buffererr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/camellia.h b/contrib/libs/openssl/include/openssl/camellia.h
index 151f3c13491..f0abe17686d 100644
--- a/contrib/libs/openssl/include/openssl/camellia.h
+++ b/contrib/libs/openssl/include/openssl/camellia.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/cast.h b/contrib/libs/openssl/include/openssl/cast.h
index 2cc89ae0133..6e656600679 100644
--- a/contrib/libs/openssl/include/openssl/cast.h
+++ b/contrib/libs/openssl/include/openssl/cast.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/cmac.h b/contrib/libs/openssl/include/openssl/cmac.h
index 3535a9abf75..b392950d9aa 100644
--- a/contrib/libs/openssl/include/openssl/cmac.h
+++ b/contrib/libs/openssl/include/openssl/cmac.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/cms.h b/contrib/libs/openssl/include/openssl/cms.h
index c7627968c7a..13507e660e0 100644
--- a/contrib/libs/openssl/include/openssl/cms.h
+++ b/contrib/libs/openssl/include/openssl/cms.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2008-2019 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/cmserr.h b/contrib/libs/openssl/include/openssl/cmserr.h
index d589f592c80..4bf6ab5d974 100644
--- a/contrib/libs/openssl/include/openssl/cmserr.h
+++ b/contrib/libs/openssl/include/openssl/cmserr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/comp.h b/contrib/libs/openssl/include/openssl/comp.h
index d814d3cf251..d79c8c59860 100644
--- a/contrib/libs/openssl/include/openssl/comp.h
+++ b/contrib/libs/openssl/include/openssl/comp.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/comperr.h b/contrib/libs/openssl/include/openssl/comperr.h
index 90231e9aa34..63bbcaa21bc 100644
--- a/contrib/libs/openssl/include/openssl/comperr.h
+++ b/contrib/libs/openssl/include/openssl/comperr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/conf.h b/contrib/libs/openssl/include/openssl/conf.h
index 7336cd2f1d1..15abd9a3c79 100644
--- a/contrib/libs/openssl/include/openssl/conf.h
+++ b/contrib/libs/openssl/include/openssl/conf.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/conf_api.h b/contrib/libs/openssl/include/openssl/conf_api.h
index a0275ad79bc..063fe37221b 100644
--- a/contrib/libs/openssl/include/openssl/conf_api.h
+++ b/contrib/libs/openssl/include/openssl/conf_api.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/conferr.h b/contrib/libs/openssl/include/openssl/conferr.h
index 32b92291856..91d1590b407 100644
--- a/contrib/libs/openssl/include/openssl/conferr.h
+++ b/contrib/libs/openssl/include/openssl/conferr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/crypto.h b/contrib/libs/openssl/include/openssl/crypto.h
index 5fdd7c3d04d..4f83eb01281 100644
--- a/contrib/libs/openssl/include/openssl/crypto.h
+++ b/contrib/libs/openssl/include/openssl/crypto.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
diff --git a/contrib/libs/openssl/include/openssl/cryptoerr.h b/contrib/libs/openssl/include/openssl/cryptoerr.h
index 3db5a4ee991..e05945e6c47 100644
--- a/contrib/libs/openssl/include/openssl/cryptoerr.h
+++ b/contrib/libs/openssl/include/openssl/cryptoerr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/ct.h b/contrib/libs/openssl/include/openssl/ct.h
index ebdba34d677..33b426b44e0 100644
--- a/contrib/libs/openssl/include/openssl/ct.h
+++ b/contrib/libs/openssl/include/openssl/ct.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/cterr.h b/contrib/libs/openssl/include/openssl/cterr.h
index feb7bc56632..e6ec1fb0bbf 100644
--- a/contrib/libs/openssl/include/openssl/cterr.h
+++ b/contrib/libs/openssl/include/openssl/cterr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/des.h b/contrib/libs/openssl/include/openssl/des.h
index be4abbdfd0e..4113e688f0d 100644
--- a/contrib/libs/openssl/include/openssl/des.h
+++ b/contrib/libs/openssl/include/openssl/des.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/dh.h b/contrib/libs/openssl/include/openssl/dh.h
index 892e31559d2..040ae7f4a0d 100644
--- a/contrib/libs/openssl/include/openssl/dh.h
+++ b/contrib/libs/openssl/include/openssl/dh.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/dherr.h b/contrib/libs/openssl/include/openssl/dherr.h
index 9955f24652c..5c93d80077a 100644
--- a/contrib/libs/openssl/include/openssl/dherr.h
+++ b/contrib/libs/openssl/include/openssl/dherr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/dsa.h b/contrib/libs/openssl/include/openssl/dsa.h
index 6d8a18a4ad5..e3dd45b8cca 100644
--- a/contrib/libs/openssl/include/openssl/dsa.h
+++ b/contrib/libs/openssl/include/openssl/dsa.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/dsaerr.h b/contrib/libs/openssl/include/openssl/dsaerr.h
index 495a1ac89d6..cd92029e81a 100644
--- a/contrib/libs/openssl/include/openssl/dsaerr.h
+++ b/contrib/libs/openssl/include/openssl/dsaerr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/dtls1.h b/contrib/libs/openssl/include/openssl/dtls1.h
index d55ca9c332d..c22fe89366a 100644
--- a/contrib/libs/openssl/include/openssl/dtls1.h
+++ b/contrib/libs/openssl/include/openssl/dtls1.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2005-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/e_os2.h b/contrib/libs/openssl/include/openssl/e_os2.h
index 5c88e519491..e76b4147c01 100644
--- a/contrib/libs/openssl/include/openssl/e_os2.h
+++ b/contrib/libs/openssl/include/openssl/e_os2.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/ebcdic.h b/contrib/libs/openssl/include/openssl/ebcdic.h
index aa012855999..107ecac7c29 100644
--- a/contrib/libs/openssl/include/openssl/ebcdic.h
+++ b/contrib/libs/openssl/include/openssl/ebcdic.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/ec.h b/contrib/libs/openssl/include/openssl/ec.h
index 24baf53c34d..798d81165b0 100644
--- a/contrib/libs/openssl/include/openssl/ec.h
+++ b/contrib/libs/openssl/include/openssl/ec.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2002-2021 The OpenSSL Project Authors. All Rights Reserved.
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
diff --git a/contrib/libs/openssl/include/openssl/ecdh.h b/contrib/libs/openssl/include/openssl/ecdh.h
index 681f3d5e557..4580eb9c270 100644
--- a/contrib/libs/openssl/include/openssl/ecdh.h
+++ b/contrib/libs/openssl/include/openssl/ecdh.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/ecdsa.h b/contrib/libs/openssl/include/openssl/ecdsa.h
index 681f3d5e557..4580eb9c270 100644
--- a/contrib/libs/openssl/include/openssl/ecdsa.h
+++ b/contrib/libs/openssl/include/openssl/ecdsa.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/ecerr.h b/contrib/libs/openssl/include/openssl/ecerr.h
index 51738113dc7..c385cbb865e 100644
--- a/contrib/libs/openssl/include/openssl/ecerr.h
+++ b/contrib/libs/openssl/include/openssl/ecerr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/engine.h b/contrib/libs/openssl/include/openssl/engine.h
index d707eaeb6ee..8362cafa9d7 100644
--- a/contrib/libs/openssl/include/openssl/engine.h
+++ b/contrib/libs/openssl/include/openssl/engine.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2000-2022 The OpenSSL Project Authors. All Rights Reserved.
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
diff --git a/contrib/libs/openssl/include/openssl/engineerr.h b/contrib/libs/openssl/include/openssl/engineerr.h
index 05e84bd2a24..44d58eb41f4 100644
--- a/contrib/libs/openssl/include/openssl/engineerr.h
+++ b/contrib/libs/openssl/include/openssl/engineerr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/err.h b/contrib/libs/openssl/include/openssl/err.h
index b49f88129e2..671b822c9a8 100644
--- a/contrib/libs/openssl/include/openssl/err.h
+++ b/contrib/libs/openssl/include/openssl/err.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/evp.h b/contrib/libs/openssl/include/openssl/evp.h
index 275b7a4acca..c16431cb754 100644
--- a/contrib/libs/openssl/include/openssl/evp.h
+++ b/contrib/libs/openssl/include/openssl/evp.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/evperr.h b/contrib/libs/openssl/include/openssl/evperr.h
index b4ea90ae9df..bc48179dc32 100644
--- a/contrib/libs/openssl/include/openssl/evperr.h
+++ b/contrib/libs/openssl/include/openssl/evperr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/hmac.h b/contrib/libs/openssl/include/openssl/hmac.h
index 458efc1d518..d3eb5fe0335 100644
--- a/contrib/libs/openssl/include/openssl/hmac.h
+++ b/contrib/libs/openssl/include/openssl/hmac.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/idea.h b/contrib/libs/openssl/include/openssl/idea.h
index 4334f3ea71a..239dc47f769 100644
--- a/contrib/libs/openssl/include/openssl/idea.h
+++ b/contrib/libs/openssl/include/openssl/idea.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/kdf.h b/contrib/libs/openssl/include/openssl/kdf.h
index 5abd4c37147..d68dc72116a 100644
--- a/contrib/libs/openssl/include/openssl/kdf.h
+++ b/contrib/libs/openssl/include/openssl/kdf.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/kdferr.h b/contrib/libs/openssl/include/openssl/kdferr.h
index 3f51bd0228a..eaa53c9cda1 100644
--- a/contrib/libs/openssl/include/openssl/kdferr.h
+++ b/contrib/libs/openssl/include/openssl/kdferr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/lhash.h b/contrib/libs/openssl/include/openssl/lhash.h
index 2e42d727d4d..fbf58eaab63 100644
--- a/contrib/libs/openssl/include/openssl/lhash.h
+++ b/contrib/libs/openssl/include/openssl/lhash.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/md2.h b/contrib/libs/openssl/include/openssl/md2.h
index 7faf8e3d656..1e66c0936d3 100644
--- a/contrib/libs/openssl/include/openssl/md2.h
+++ b/contrib/libs/openssl/include/openssl/md2.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/md4.h b/contrib/libs/openssl/include/openssl/md4.h
index 940e29db409..6358c99069c 100644
--- a/contrib/libs/openssl/include/openssl/md4.h
+++ b/contrib/libs/openssl/include/openssl/md4.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/md5.h b/contrib/libs/openssl/include/openssl/md5.h
index 2deb772118f..42dc91697f9 100644
--- a/contrib/libs/openssl/include/openssl/md5.h
+++ b/contrib/libs/openssl/include/openssl/md5.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/mdc2.h b/contrib/libs/openssl/include/openssl/mdc2.h
index aabd2bfaad8..7d433ac7b09 100644
--- a/contrib/libs/openssl/include/openssl/mdc2.h
+++ b/contrib/libs/openssl/include/openssl/mdc2.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/modes.h b/contrib/libs/openssl/include/openssl/modes.h
index d544f98d558..4d4c8660606 100644
--- a/contrib/libs/openssl/include/openssl/modes.h
+++ b/contrib/libs/openssl/include/openssl/modes.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/obj_mac.h b/contrib/libs/openssl/include/openssl/obj_mac.h
index 53516a06c69..f56dcc13edf 100644
--- a/contrib/libs/openssl/include/openssl/obj_mac.h
+++ b/contrib/libs/openssl/include/openssl/obj_mac.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* WARNING: do not edit!
* Generated by crypto/objects/objects.pl
diff --git a/contrib/libs/openssl/include/openssl/objects.h b/contrib/libs/openssl/include/openssl/objects.h
index 5e8b5762f87..bc1ccd871a9 100644
--- a/contrib/libs/openssl/include/openssl/objects.h
+++ b/contrib/libs/openssl/include/openssl/objects.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/objectserr.h b/contrib/libs/openssl/include/openssl/objectserr.h
index 02e166f1ac6..b42175cda36 100644
--- a/contrib/libs/openssl/include/openssl/objectserr.h
+++ b/contrib/libs/openssl/include/openssl/objectserr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/ocsp.h b/contrib/libs/openssl/include/openssl/ocsp.h
index 4d759a49de4..3106f003629 100644
--- a/contrib/libs/openssl/include/openssl/ocsp.h
+++ b/contrib/libs/openssl/include/openssl/ocsp.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/ocsperr.h b/contrib/libs/openssl/include/openssl/ocsperr.h
index 8dd9e01a172..524ddef6d33 100644
--- a/contrib/libs/openssl/include/openssl/ocsperr.h
+++ b/contrib/libs/openssl/include/openssl/ocsperr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/opensslconf-android-arm.h b/contrib/libs/openssl/include/openssl/opensslconf-android-arm.h
index a313ba33844..82f8e424add 100644
--- a/contrib/libs/openssl/include/openssl/opensslconf-android-arm.h
+++ b/contrib/libs/openssl/include/openssl/opensslconf-android-arm.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* WARNING: do not edit!
* Generated by Makefile from ../include/openssl/opensslconf.h.in
diff --git a/contrib/libs/openssl/include/openssl/opensslconf-android-arm64.h b/contrib/libs/openssl/include/openssl/opensslconf-android-arm64.h
index a0641d3ae24..8c014efaee7 100644
--- a/contrib/libs/openssl/include/openssl/opensslconf-android-arm64.h
+++ b/contrib/libs/openssl/include/openssl/opensslconf-android-arm64.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* WARNING: do not edit!
* Generated by Makefile from ../include/openssl/opensslconf.h.in
diff --git a/contrib/libs/openssl/include/openssl/opensslconf-android-i686.h b/contrib/libs/openssl/include/openssl/opensslconf-android-i686.h
index aa918cfb5bb..8db2e8571c3 100644
--- a/contrib/libs/openssl/include/openssl/opensslconf-android-i686.h
+++ b/contrib/libs/openssl/include/openssl/opensslconf-android-i686.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* WARNING: do not edit!
* Generated by Makefile from ../include/openssl/opensslconf.h.in
diff --git a/contrib/libs/openssl/include/openssl/opensslconf-android-x86_64.h b/contrib/libs/openssl/include/openssl/opensslconf-android-x86_64.h
index 7f82d097780..f7932a1919f 100644
--- a/contrib/libs/openssl/include/openssl/opensslconf-android-x86_64.h
+++ b/contrib/libs/openssl/include/openssl/opensslconf-android-x86_64.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* WARNING: do not edit!
* Generated by Makefile from ../include/openssl/opensslconf.h.in
diff --git a/contrib/libs/openssl/include/openssl/opensslconf-ios-arm64.h b/contrib/libs/openssl/include/openssl/opensslconf-ios-arm64.h
index fc7f39c7cf7..820b902b5b6 100644
--- a/contrib/libs/openssl/include/openssl/opensslconf-ios-arm64.h
+++ b/contrib/libs/openssl/include/openssl/opensslconf-ios-arm64.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* WARNING: do not edit!
* Generated by Makefile from ../include/openssl/opensslconf.h.in
diff --git a/contrib/libs/openssl/include/openssl/opensslconf-ios-x86_64.h b/contrib/libs/openssl/include/openssl/opensslconf-ios-x86_64.h
index aa49c01bfb9..c9b197d909e 100644
--- a/contrib/libs/openssl/include/openssl/opensslconf-ios-x86_64.h
+++ b/contrib/libs/openssl/include/openssl/opensslconf-ios-x86_64.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* WARNING: do not edit!
* Generated by Makefile from ../include/openssl/opensslconf.h.in
diff --git a/contrib/libs/openssl/include/openssl/opensslconf-linux-aarch64.h b/contrib/libs/openssl/include/openssl/opensslconf-linux-aarch64.h
index 3d75389ec23..61952cc5ebc 100644
--- a/contrib/libs/openssl/include/openssl/opensslconf-linux-aarch64.h
+++ b/contrib/libs/openssl/include/openssl/opensslconf-linux-aarch64.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* WARNING: do not edit!
* Generated by Makefile from ../include/openssl/opensslconf.h.in
diff --git a/contrib/libs/openssl/include/openssl/opensslconf-linux-arm.h b/contrib/libs/openssl/include/openssl/opensslconf-linux-arm.h
index 976864ad8b6..47089a26eae 100644
--- a/contrib/libs/openssl/include/openssl/opensslconf-linux-arm.h
+++ b/contrib/libs/openssl/include/openssl/opensslconf-linux-arm.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* WARNING: do not edit!
* Generated by Makefile from ../../openssl-1.1.1d/include/openssl/opensslconf.h.in
diff --git a/contrib/libs/openssl/include/openssl/opensslconf-linux.h b/contrib/libs/openssl/include/openssl/opensslconf-linux.h
index e5e3a766226..69182c51e61 100644
--- a/contrib/libs/openssl/include/openssl/opensslconf-linux.h
+++ b/contrib/libs/openssl/include/openssl/opensslconf-linux.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* WARNING: do not edit!
* Generated by Makefile from include/openssl/opensslconf.h.in
diff --git a/contrib/libs/openssl/include/openssl/opensslconf-osx-arm64.h b/contrib/libs/openssl/include/openssl/opensslconf-osx-arm64.h
index aa49c01bfb9..c9b197d909e 100644
--- a/contrib/libs/openssl/include/openssl/opensslconf-osx-arm64.h
+++ b/contrib/libs/openssl/include/openssl/opensslconf-osx-arm64.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* WARNING: do not edit!
* Generated by Makefile from ../include/openssl/opensslconf.h.in
diff --git a/contrib/libs/openssl/include/openssl/opensslconf-osx.h b/contrib/libs/openssl/include/openssl/opensslconf-osx.h
index aa49c01bfb9..c9b197d909e 100644
--- a/contrib/libs/openssl/include/openssl/opensslconf-osx.h
+++ b/contrib/libs/openssl/include/openssl/opensslconf-osx.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* WARNING: do not edit!
* Generated by Makefile from ../include/openssl/opensslconf.h.in
diff --git a/contrib/libs/openssl/include/openssl/opensslconf-win-i686.h b/contrib/libs/openssl/include/openssl/opensslconf-win-i686.h
index cce696ec4f6..009ba79fcda 100644
--- a/contrib/libs/openssl/include/openssl/opensslconf-win-i686.h
+++ b/contrib/libs/openssl/include/openssl/opensslconf-win-i686.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* WARNING: do not edit!
* Generated by makefile from include\openssl\opensslconf.h.in
diff --git a/contrib/libs/openssl/include/openssl/opensslconf-win-x86_64.h b/contrib/libs/openssl/include/openssl/opensslconf-win-x86_64.h
index ee82b249258..c81b93dfa6f 100644
--- a/contrib/libs/openssl/include/openssl/opensslconf-win-x86_64.h
+++ b/contrib/libs/openssl/include/openssl/opensslconf-win-x86_64.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* WARNING: do not edit!
* Generated by makefile from ..\include\openssl\opensslconf.h.in
diff --git a/contrib/libs/openssl/include/openssl/opensslconf.h b/contrib/libs/openssl/include/openssl/opensslconf.h
index fb7225732b7..beaa22b6e2a 100644
--- a/contrib/libs/openssl/include/openssl/opensslconf.h
+++ b/contrib/libs/openssl/include/openssl/opensslconf.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
#pragma once
#if defined(__ANDROID__) && defined(__arm__)
diff --git a/contrib/libs/openssl/include/openssl/opensslv.h b/contrib/libs/openssl/include/openssl/opensslv.h
index 7b6c212fa09..ff647db6e1d 100644
--- a/contrib/libs/openssl/include/openssl/opensslv.h
+++ b/contrib/libs/openssl/include/openssl/opensslv.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/ossl_typ.h b/contrib/libs/openssl/include/openssl/ossl_typ.h
index d2fdce8fdf6..05ecf27472d 100644
--- a/contrib/libs/openssl/include/openssl/ossl_typ.h
+++ b/contrib/libs/openssl/include/openssl/ossl_typ.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/pem.h b/contrib/libs/openssl/include/openssl/pem.h
index 2ef5b5d04c6..fc0239aed43 100644
--- a/contrib/libs/openssl/include/openssl/pem.h
+++ b/contrib/libs/openssl/include/openssl/pem.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/pem2.h b/contrib/libs/openssl/include/openssl/pem2.h
index 038fe790ace..a06cfc315cf 100644
--- a/contrib/libs/openssl/include/openssl/pem2.h
+++ b/contrib/libs/openssl/include/openssl/pem2.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/pemerr.h b/contrib/libs/openssl/include/openssl/pemerr.h
index 4f7e3574b34..1c181b601d7 100644
--- a/contrib/libs/openssl/include/openssl/pemerr.h
+++ b/contrib/libs/openssl/include/openssl/pemerr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/pkcs12.h b/contrib/libs/openssl/include/openssl/pkcs12.h
index 3f43dad6d96..8682fd19ef4 100644
--- a/contrib/libs/openssl/include/openssl/pkcs12.h
+++ b/contrib/libs/openssl/include/openssl/pkcs12.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/pkcs12err.h b/contrib/libs/openssl/include/openssl/pkcs12err.h
index eff5eb26028..71713e3f012 100644
--- a/contrib/libs/openssl/include/openssl/pkcs12err.h
+++ b/contrib/libs/openssl/include/openssl/pkcs12err.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/pkcs7.h b/contrib/libs/openssl/include/openssl/pkcs7.h
index 9b66e002d28..43755b27a51 100644
--- a/contrib/libs/openssl/include/openssl/pkcs7.h
+++ b/contrib/libs/openssl/include/openssl/pkcs7.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/pkcs7err.h b/contrib/libs/openssl/include/openssl/pkcs7err.h
index 02e0299a3ce..19dcb3d2e32 100644
--- a/contrib/libs/openssl/include/openssl/pkcs7err.h
+++ b/contrib/libs/openssl/include/openssl/pkcs7err.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/rand.h b/contrib/libs/openssl/include/openssl/rand.h
index 38a2a2718f8..3427a4508cc 100644
--- a/contrib/libs/openssl/include/openssl/rand.h
+++ b/contrib/libs/openssl/include/openssl/rand.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/rand_drbg.h b/contrib/libs/openssl/include/openssl/rand_drbg.h
index 45b731b73c2..fce28c5f419 100644
--- a/contrib/libs/openssl/include/openssl/rand_drbg.h
+++ b/contrib/libs/openssl/include/openssl/rand_drbg.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/randerr.h b/contrib/libs/openssl/include/openssl/randerr.h
index 79d57905e3c..3fb6c20d41d 100644
--- a/contrib/libs/openssl/include/openssl/randerr.h
+++ b/contrib/libs/openssl/include/openssl/randerr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/rc2.h b/contrib/libs/openssl/include/openssl/rc2.h
index 585f9e4c380..0d126242a87 100644
--- a/contrib/libs/openssl/include/openssl/rc2.h
+++ b/contrib/libs/openssl/include/openssl/rc2.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/rc4.h b/contrib/libs/openssl/include/openssl/rc4.h
index 86803b37fbe..f1544e90d30 100644
--- a/contrib/libs/openssl/include/openssl/rc4.h
+++ b/contrib/libs/openssl/include/openssl/rc4.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/rc5.h b/contrib/libs/openssl/include/openssl/rc5.h
index 793f88e4e81..79043f0e8b8 100644
--- a/contrib/libs/openssl/include/openssl/rc5.h
+++ b/contrib/libs/openssl/include/openssl/rc5.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/ripemd.h b/contrib/libs/openssl/include/openssl/ripemd.h
index c42026aa42f..46b4a6e6817 100644
--- a/contrib/libs/openssl/include/openssl/ripemd.h
+++ b/contrib/libs/openssl/include/openssl/ripemd.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/rsa.h b/contrib/libs/openssl/include/openssl/rsa.h
index 5e76365c0df..1a5b1792d0c 100644
--- a/contrib/libs/openssl/include/openssl/rsa.h
+++ b/contrib/libs/openssl/include/openssl/rsa.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/rsaerr.h b/contrib/libs/openssl/include/openssl/rsaerr.h
index 59b15e13e96..c7a6cd8656e 100644
--- a/contrib/libs/openssl/include/openssl/rsaerr.h
+++ b/contrib/libs/openssl/include/openssl/rsaerr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/safestack.h b/contrib/libs/openssl/include/openssl/safestack.h
index 38b5578978c..3201ba18ad3 100644
--- a/contrib/libs/openssl/include/openssl/safestack.h
+++ b/contrib/libs/openssl/include/openssl/safestack.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1999-2019 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/seed.h b/contrib/libs/openssl/include/openssl/seed.h
index de10b085720..bd716b7bc7b 100644
--- a/contrib/libs/openssl/include/openssl/seed.h
+++ b/contrib/libs/openssl/include/openssl/seed.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/sha.h b/contrib/libs/openssl/include/openssl/sha.h
index 6a1eb0de8bd..2fdc711dc4f 100644
--- a/contrib/libs/openssl/include/openssl/sha.h
+++ b/contrib/libs/openssl/include/openssl/sha.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/srp.h b/contrib/libs/openssl/include/openssl/srp.h
index aaf13558e3c..84e212d1650 100644
--- a/contrib/libs/openssl/include/openssl/srp.h
+++ b/contrib/libs/openssl/include/openssl/srp.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved.
* Copyright (c) 2004, EdelKey Project. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/srtp.h b/contrib/libs/openssl/include/openssl/srtp.h
index 0b57c2356c9..a5380b64cc4 100644
--- a/contrib/libs/openssl/include/openssl/srtp.h
+++ b/contrib/libs/openssl/include/openssl/srtp.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/ssl.h b/contrib/libs/openssl/include/openssl/ssl.h
index 63ee3baae74..f961b98ece0 100644
--- a/contrib/libs/openssl/include/openssl/ssl.h
+++ b/contrib/libs/openssl/include/openssl/ssl.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved.
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
diff --git a/contrib/libs/openssl/include/openssl/ssl2.h b/contrib/libs/openssl/include/openssl/ssl2.h
index 5321bd272cb..d8d17746e0c 100644
--- a/contrib/libs/openssl/include/openssl/ssl2.h
+++ b/contrib/libs/openssl/include/openssl/ssl2.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/ssl3.h b/contrib/libs/openssl/include/openssl/ssl3.h
index 07effba287d..ef4552efa19 100644
--- a/contrib/libs/openssl/include/openssl/ssl3.h
+++ b/contrib/libs/openssl/include/openssl/ssl3.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
diff --git a/contrib/libs/openssl/include/openssl/sslerr.h b/contrib/libs/openssl/include/openssl/sslerr.h
index 64e152cc517..dce2bec4a3a 100644
--- a/contrib/libs/openssl/include/openssl/sslerr.h
+++ b/contrib/libs/openssl/include/openssl/sslerr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/stack.h b/contrib/libs/openssl/include/openssl/stack.h
index cfc075057ae..40c414733d8 100644
--- a/contrib/libs/openssl/include/openssl/stack.h
+++ b/contrib/libs/openssl/include/openssl/stack.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/store.h b/contrib/libs/openssl/include/openssl/store.h
index a40a7339e61..afcb18e2880 100644
--- a/contrib/libs/openssl/include/openssl/store.h
+++ b/contrib/libs/openssl/include/openssl/store.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/storeerr.h b/contrib/libs/openssl/include/openssl/storeerr.h
index 190eab07fb0..b5c82584970 100644
--- a/contrib/libs/openssl/include/openssl/storeerr.h
+++ b/contrib/libs/openssl/include/openssl/storeerr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/symhacks.h b/contrib/libs/openssl/include/openssl/symhacks.h
index 156ea6e4ee9..70ada24e4a6 100644
--- a/contrib/libs/openssl/include/openssl/symhacks.h
+++ b/contrib/libs/openssl/include/openssl/symhacks.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/tls1.h b/contrib/libs/openssl/include/openssl/tls1.h
index 2cbf53265f8..ab9bae3337f 100644
--- a/contrib/libs/openssl/include/openssl/tls1.h
+++ b/contrib/libs/openssl/include/openssl/tls1.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
diff --git a/contrib/libs/openssl/include/openssl/ts.h b/contrib/libs/openssl/include/openssl/ts.h
index 3b58aa527ed..151878e1b67 100644
--- a/contrib/libs/openssl/include/openssl/ts.h
+++ b/contrib/libs/openssl/include/openssl/ts.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/tserr.h b/contrib/libs/openssl/include/openssl/tserr.h
index 07f23339c81..5079f3dd542 100644
--- a/contrib/libs/openssl/include/openssl/tserr.h
+++ b/contrib/libs/openssl/include/openssl/tserr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/txt_db.h b/contrib/libs/openssl/include/openssl/txt_db.h
index ec981a439fe..13183675ef8 100644
--- a/contrib/libs/openssl/include/openssl/txt_db.h
+++ b/contrib/libs/openssl/include/openssl/txt_db.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/ui.h b/contrib/libs/openssl/include/openssl/ui.h
index 7c721ec818d..adb123fe053 100644
--- a/contrib/libs/openssl/include/openssl/ui.h
+++ b/contrib/libs/openssl/include/openssl/ui.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/uierr.h b/contrib/libs/openssl/include/openssl/uierr.h
index bd68864d0d8..d843da5645a 100644
--- a/contrib/libs/openssl/include/openssl/uierr.h
+++ b/contrib/libs/openssl/include/openssl/uierr.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/whrlpool.h b/contrib/libs/openssl/include/openssl/whrlpool.h
index 20ea3503b76..518936f69f9 100644
--- a/contrib/libs/openssl/include/openssl/whrlpool.h
+++ b/contrib/libs/openssl/include/openssl/whrlpool.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/x509.h b/contrib/libs/openssl/include/openssl/x509.h
index 3ff86ec7b54..12ec813b270 100644
--- a/contrib/libs/openssl/include/openssl/x509.h
+++ b/contrib/libs/openssl/include/openssl/x509.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
diff --git a/contrib/libs/openssl/include/openssl/x509_vfy.h b/contrib/libs/openssl/include/openssl/x509_vfy.h
index 25c79f1be2f..32dc41dc1cd 100644
--- a/contrib/libs/openssl/include/openssl/x509_vfy.h
+++ b/contrib/libs/openssl/include/openssl/x509_vfy.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/x509err.h b/contrib/libs/openssl/include/openssl/x509err.h
index cd08673f8f6..83bcf85fde4 100644
--- a/contrib/libs/openssl/include/openssl/x509err.h
+++ b/contrib/libs/openssl/include/openssl/x509err.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/include/openssl/x509v3.h b/contrib/libs/openssl/include/openssl/x509v3.h
index 3a4f04c183e..5eda72eb4b8 100644
--- a/contrib/libs/openssl/include/openssl/x509v3.h
+++ b/contrib/libs/openssl/include/openssl/x509v3.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Copyright 1999-2023 The OpenSSL Project Authors. All Rights Reserved.
*
diff --git a/contrib/libs/openssl/include/openssl/x509v3err.h b/contrib/libs/openssl/include/openssl/x509v3err.h
index 3b9f7139d80..724cc423791 100644
--- a/contrib/libs/openssl/include/openssl/x509v3err.h
+++ b/contrib/libs/openssl/include/openssl/x509v3err.h
@@ -1,3 +1,4 @@
+#include <contrib/libs/openssl/redef.h>
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/contrib/libs/openssl/redef.h b/contrib/libs/openssl/redef.h
new file mode 100644
index 00000000000..017967ebbd5
--- /dev/null
+++ b/contrib/libs/openssl/redef.h
@@ -0,0 +1,6282 @@
+#pragma once
+
+#if !defined(OPENSSL_BUILD) && !defined(_MSC_VER)
+#define a2d_ASN1_OBJECT v1_a2d_ASN1_OBJECT
+#define a2i_ASN1_ENUMERATED v1_a2i_ASN1_ENUMERATED
+#define a2i_ASN1_INTEGER v1_a2i_ASN1_INTEGER
+#define a2i_ASN1_STRING v1_a2i_ASN1_STRING
+#define a2i_GENERAL_NAME v1_a2i_GENERAL_NAME
+#define a2i_ipadd v1_a2i_ipadd
+#define a2i_IPADDRESS v1_a2i_IPADDRESS
+#define a2i_IPADDRESS_NC v1_a2i_IPADDRESS_NC
+#define ACCESS_DESCRIPTION_free v1_ACCESS_DESCRIPTION_free
+#define ACCESS_DESCRIPTION_it v1_ACCESS_DESCRIPTION_it
+#define ACCESS_DESCRIPTION_new v1_ACCESS_DESCRIPTION_new
+#define ADMISSIONS_free v1_ADMISSIONS_free
+#define ADMISSIONS_get0_admissionAuthority v1_ADMISSIONS_get0_admissionAuthority
+#define ADMISSIONS_get0_namingAuthority v1_ADMISSIONS_get0_namingAuthority
+#define ADMISSIONS_get0_professionInfos v1_ADMISSIONS_get0_professionInfos
+#define ADMISSIONS_it v1_ADMISSIONS_it
+#define ADMISSIONS_new v1_ADMISSIONS_new
+#define ADMISSIONS_set0_admissionAuthority v1_ADMISSIONS_set0_admissionAuthority
+#define ADMISSIONS_set0_namingAuthority v1_ADMISSIONS_set0_namingAuthority
+#define ADMISSIONS_set0_professionInfos v1_ADMISSIONS_set0_professionInfos
+#define ADMISSION_SYNTAX_free v1_ADMISSION_SYNTAX_free
+#define ADMISSION_SYNTAX_get0_admissionAuthority v1_ADMISSION_SYNTAX_get0_admissionAuthority
+#define ADMISSION_SYNTAX_get0_contentsOfAdmissions v1_ADMISSION_SYNTAX_get0_contentsOfAdmissions
+#define ADMISSION_SYNTAX_it v1_ADMISSION_SYNTAX_it
+#define ADMISSION_SYNTAX_new v1_ADMISSION_SYNTAX_new
+#define ADMISSION_SYNTAX_set0_admissionAuthority v1_ADMISSION_SYNTAX_set0_admissionAuthority
+#define ADMISSION_SYNTAX_set0_contentsOfAdmissions v1_ADMISSION_SYNTAX_set0_contentsOfAdmissions
+#define AES_bi_ige_encrypt v1_AES_bi_ige_encrypt
+#define AES_cbc_encrypt v1_AES_cbc_encrypt
+#define AES_cfb128_encrypt v1_AES_cfb128_encrypt
+#define AES_cfb1_encrypt v1_AES_cfb1_encrypt
+#define AES_cfb8_encrypt v1_AES_cfb8_encrypt
+#define AES_decrypt v1_AES_decrypt
+#define AES_ecb_encrypt v1_AES_ecb_encrypt
+#define AES_encrypt v1_AES_encrypt
+#define AES_ige_encrypt v1_AES_ige_encrypt
+#define aesni_cbc_encrypt v1_aesni_cbc_encrypt
+#define aesni_cbc_sha1_enc v1_aesni_cbc_sha1_enc
+#define aesni_cbc_sha256_enc v1_aesni_cbc_sha256_enc
+#define aesni_ccm64_decrypt_blocks v1_aesni_ccm64_decrypt_blocks
+#define aesni_ccm64_encrypt_blocks v1_aesni_ccm64_encrypt_blocks
+#define aesni_ctr32_encrypt_blocks v1_aesni_ctr32_encrypt_blocks
+#define aesni_decrypt v1_aesni_decrypt
+#define aesni_ecb_encrypt v1_aesni_ecb_encrypt
+#define aesni_encrypt v1_aesni_encrypt
+#define aesni_gcm_decrypt v1_aesni_gcm_decrypt
+#define aesni_gcm_encrypt v1_aesni_gcm_encrypt
+#define aesni_multi_cbc_decrypt v1_aesni_multi_cbc_decrypt
+#define aesni_multi_cbc_encrypt v1_aesni_multi_cbc_encrypt
+#define aesni_ocb_decrypt v1_aesni_ocb_decrypt
+#define aesni_ocb_encrypt v1_aesni_ocb_encrypt
+#define aesni_set_decrypt_key v1_aesni_set_decrypt_key
+#define aesni_set_encrypt_key v1_aesni_set_encrypt_key
+#define aesni_xts_decrypt v1_aesni_xts_decrypt
+#define aesni_xts_encrypt v1_aesni_xts_encrypt
+#define AES_ofb128_encrypt v1_AES_ofb128_encrypt
+#define AES_options v1_AES_options
+#define AES_set_decrypt_key v1_AES_set_decrypt_key
+#define AES_set_encrypt_key v1_AES_set_encrypt_key
+#define AES_unwrap_key v1_AES_unwrap_key
+#define AES_wrap_key v1_AES_wrap_key
+#define aria_encrypt v1_aria_encrypt
+#define aria_set_decrypt_key v1_aria_set_decrypt_key
+#define aria_set_encrypt_key v1_aria_set_encrypt_key
+#define ascii_isdigit v1_ascii_isdigit
+#define ASIdentifierChoice_free v1_ASIdentifierChoice_free
+#define ASIdentifierChoice_it v1_ASIdentifierChoice_it
+#define ASIdentifierChoice_new v1_ASIdentifierChoice_new
+#define ASIdentifiers_free v1_ASIdentifiers_free
+#define ASIdentifiers_it v1_ASIdentifiers_it
+#define ASIdentifiers_new v1_ASIdentifiers_new
+#define ASIdOrRange_free v1_ASIdOrRange_free
+#define ASIdOrRange_it v1_ASIdOrRange_it
+#define ASIdOrRange_new v1_ASIdOrRange_new
+#define ASN1_add_oid_module v1_ASN1_add_oid_module
+#define ASN1_add_stable_module v1_ASN1_add_stable_module
+#define ASN1_ANY_it v1_ASN1_ANY_it
+#define ASN1_BIT_STRING_check v1_ASN1_BIT_STRING_check
+#define ASN1_BIT_STRING_free v1_ASN1_BIT_STRING_free
+#define ASN1_BIT_STRING_get_bit v1_ASN1_BIT_STRING_get_bit
+#define ASN1_BIT_STRING_it v1_ASN1_BIT_STRING_it
+#define ASN1_BIT_STRING_name_print v1_ASN1_BIT_STRING_name_print
+#define ASN1_BIT_STRING_new v1_ASN1_BIT_STRING_new
+#define ASN1_BIT_STRING_num_asc v1_ASN1_BIT_STRING_num_asc
+#define ASN1_BIT_STRING_set v1_ASN1_BIT_STRING_set
+#define ASN1_BIT_STRING_set_asc v1_ASN1_BIT_STRING_set_asc
+#define ASN1_BIT_STRING_set_bit v1_ASN1_BIT_STRING_set_bit
+#define ASN1_BMPSTRING_free v1_ASN1_BMPSTRING_free
+#define ASN1_BMPSTRING_it v1_ASN1_BMPSTRING_it
+#define ASN1_BMPSTRING_new v1_ASN1_BMPSTRING_new
+#define ASN1_bn_print v1_ASN1_bn_print
+#define ASN1_BOOLEAN_it v1_ASN1_BOOLEAN_it
+#define ASN1_buf_print v1_ASN1_buf_print
+#define ASN1_check_infinite_end v1_ASN1_check_infinite_end
+#define ASN1_const_check_infinite_end v1_ASN1_const_check_infinite_end
+#define ASN1_d2i_bio v1_ASN1_d2i_bio
+#define ASN1_d2i_fp v1_ASN1_d2i_fp
+#define asn1_d2i_read_bio v1_asn1_d2i_read_bio
+#define ASN1_digest v1_ASN1_digest
+#define asn1_do_adb v1_asn1_do_adb
+#define asn1_do_lock v1_asn1_do_lock
+#define ASN1_dup v1_ASN1_dup
+#define asn1_enc_free v1_asn1_enc_free
+#define asn1_enc_init v1_asn1_enc_init
+#define asn1_enc_restore v1_asn1_enc_restore
+#define asn1_enc_save v1_asn1_enc_save
+#define ASN1_ENUMERATED_free v1_ASN1_ENUMERATED_free
+#define ASN1_ENUMERATED_get v1_ASN1_ENUMERATED_get
+#define ASN1_ENUMERATED_get_int64 v1_ASN1_ENUMERATED_get_int64
+#define ASN1_ENUMERATED_it v1_ASN1_ENUMERATED_it
+#define ASN1_ENUMERATED_new v1_ASN1_ENUMERATED_new
+#define ASN1_ENUMERATED_set v1_ASN1_ENUMERATED_set
+#define ASN1_ENUMERATED_set_int64 v1_ASN1_ENUMERATED_set_int64
+#define ASN1_ENUMERATED_to_BN v1_ASN1_ENUMERATED_to_BN
+#define ASN1_FBOOLEAN_it v1_ASN1_FBOOLEAN_it
+#define ASN1_GENERALIZEDTIME_adj v1_ASN1_GENERALIZEDTIME_adj
+#define ASN1_GENERALIZEDTIME_check v1_ASN1_GENERALIZEDTIME_check
+#define ASN1_GENERALIZEDTIME_free v1_ASN1_GENERALIZEDTIME_free
+#define ASN1_GENERALIZEDTIME_it v1_ASN1_GENERALIZEDTIME_it
+#define ASN1_GENERALIZEDTIME_new v1_ASN1_GENERALIZEDTIME_new
+#define ASN1_GENERALIZEDTIME_print v1_ASN1_GENERALIZEDTIME_print
+#define ASN1_GENERALIZEDTIME_set v1_ASN1_GENERALIZEDTIME_set
+#define ASN1_GENERALIZEDTIME_set_string v1_ASN1_GENERALIZEDTIME_set_string
+#define asn1_generalizedtime_to_tm v1_asn1_generalizedtime_to_tm
+#define ASN1_GENERALSTRING_free v1_ASN1_GENERALSTRING_free
+#define ASN1_GENERALSTRING_it v1_ASN1_GENERALSTRING_it
+#define ASN1_GENERALSTRING_new v1_ASN1_GENERALSTRING_new
+#define ASN1_generate_nconf v1_ASN1_generate_nconf
+#define ASN1_generate_v3 v1_ASN1_generate_v3
+#define asn1_get_choice_selector v1_asn1_get_choice_selector
+#define asn1_get_field_ptr v1_asn1_get_field_ptr
+#define ASN1_get_object v1_ASN1_get_object
+#define ASN1_i2d_bio v1_ASN1_i2d_bio
+#define ASN1_i2d_fp v1_ASN1_i2d_fp
+#define ASN1_IA5STRING_free v1_ASN1_IA5STRING_free
+#define ASN1_IA5STRING_it v1_ASN1_IA5STRING_it
+#define ASN1_IA5STRING_new v1_ASN1_IA5STRING_new
+#define ASN1_INTEGER_cmp v1_ASN1_INTEGER_cmp
+#define ASN1_INTEGER_dup v1_ASN1_INTEGER_dup
+#define ASN1_INTEGER_free v1_ASN1_INTEGER_free
+#define ASN1_INTEGER_get v1_ASN1_INTEGER_get
+#define ASN1_INTEGER_get_int64 v1_ASN1_INTEGER_get_int64
+#define ASN1_INTEGER_get_uint64 v1_ASN1_INTEGER_get_uint64
+#define ASN1_INTEGER_it v1_ASN1_INTEGER_it
+#define ASN1_INTEGER_new v1_ASN1_INTEGER_new
+#define ASN1_INTEGER_set v1_ASN1_INTEGER_set
+#define ASN1_INTEGER_set_int64 v1_ASN1_INTEGER_set_int64
+#define ASN1_INTEGER_set_uint64 v1_ASN1_INTEGER_set_uint64
+#define ASN1_INTEGER_to_BN v1_ASN1_INTEGER_to_BN
+#define ASN1_item_d2i v1_ASN1_item_d2i
+#define ASN1_item_d2i_bio v1_ASN1_item_d2i_bio
+#define ASN1_item_d2i_fp v1_ASN1_item_d2i_fp
+#define ASN1_item_digest v1_ASN1_item_digest
+#define ASN1_item_dup v1_ASN1_item_dup
+#define asn1_item_embed_free v1_asn1_item_embed_free
+#define ASN1_item_ex_d2i v1_ASN1_item_ex_d2i
+#define ASN1_item_ex_free v1_ASN1_item_ex_free
+#define ASN1_item_ex_i2d v1_ASN1_item_ex_i2d
+#define ASN1_item_ex_new v1_ASN1_item_ex_new
+#define ASN1_item_free v1_ASN1_item_free
+#define ASN1_ITEM_get v1_ASN1_ITEM_get
+#define ASN1_item_i2d v1_ASN1_item_i2d
+#define ASN1_item_i2d_bio v1_ASN1_item_i2d_bio
+#define ASN1_item_i2d_fp v1_ASN1_item_i2d_fp
+#define ASN1_ITEM_lookup v1_ASN1_ITEM_lookup
+#define ASN1_item_ndef_i2d v1_ASN1_item_ndef_i2d
+#define ASN1_item_new v1_ASN1_item_new
+#define ASN1_item_pack v1_ASN1_item_pack
+#define ASN1_item_print v1_ASN1_item_print
+#define ASN1_item_sign v1_ASN1_item_sign
+#define ASN1_item_sign_ctx v1_ASN1_item_sign_ctx
+#define ASN1_item_unpack v1_ASN1_item_unpack
+#define ASN1_item_verify v1_ASN1_item_verify
+#define ASN1_mbstring_copy v1_ASN1_mbstring_copy
+#define ASN1_mbstring_ncopy v1_ASN1_mbstring_ncopy
+#define ASN1_NULL_free v1_ASN1_NULL_free
+#define ASN1_NULL_it v1_ASN1_NULL_it
+#define ASN1_NULL_new v1_ASN1_NULL_new
+#define ASN1_OBJECT_create v1_ASN1_OBJECT_create
+#define ASN1_OBJECT_free v1_ASN1_OBJECT_free
+#define ASN1_OBJECT_it v1_ASN1_OBJECT_it
+#define ASN1_OBJECT_new v1_ASN1_OBJECT_new
+#define ASN1_object_size v1_ASN1_object_size
+#define ASN1_OCTET_STRING_cmp v1_ASN1_OCTET_STRING_cmp
+#define ASN1_OCTET_STRING_dup v1_ASN1_OCTET_STRING_dup
+#define ASN1_OCTET_STRING_free v1_ASN1_OCTET_STRING_free
+#define ASN1_OCTET_STRING_it v1_ASN1_OCTET_STRING_it
+#define ASN1_OCTET_STRING_NDEF_it v1_ASN1_OCTET_STRING_NDEF_it
+#define ASN1_OCTET_STRING_new v1_ASN1_OCTET_STRING_new
+#define ASN1_OCTET_STRING_set v1_ASN1_OCTET_STRING_set
+#define ASN1_parse v1_ASN1_parse
+#define ASN1_parse_dump v1_ASN1_parse_dump
+#define ASN1_PCTX_free v1_ASN1_PCTX_free
+#define ASN1_PCTX_get_cert_flags v1_ASN1_PCTX_get_cert_flags
+#define ASN1_PCTX_get_flags v1_ASN1_PCTX_get_flags
+#define ASN1_PCTX_get_nm_flags v1_ASN1_PCTX_get_nm_flags
+#define ASN1_PCTX_get_oid_flags v1_ASN1_PCTX_get_oid_flags
+#define ASN1_PCTX_get_str_flags v1_ASN1_PCTX_get_str_flags
+#define ASN1_PCTX_new v1_ASN1_PCTX_new
+#define ASN1_PCTX_set_cert_flags v1_ASN1_PCTX_set_cert_flags
+#define ASN1_PCTX_set_flags v1_ASN1_PCTX_set_flags
+#define ASN1_PCTX_set_nm_flags v1_ASN1_PCTX_set_nm_flags
+#define ASN1_PCTX_set_oid_flags v1_ASN1_PCTX_set_oid_flags
+#define ASN1_PCTX_set_str_flags v1_ASN1_PCTX_set_str_flags
+#define asn1_primitive_free v1_asn1_primitive_free
+#define ASN1_PRINTABLE_free v1_ASN1_PRINTABLE_free
+#define ASN1_PRINTABLE_it v1_ASN1_PRINTABLE_it
+#define ASN1_PRINTABLE_new v1_ASN1_PRINTABLE_new
+#define ASN1_PRINTABLESTRING_free v1_ASN1_PRINTABLESTRING_free
+#define ASN1_PRINTABLESTRING_it v1_ASN1_PRINTABLESTRING_it
+#define ASN1_PRINTABLESTRING_new v1_ASN1_PRINTABLESTRING_new
+#define ASN1_PRINTABLE_type v1_ASN1_PRINTABLE_type
+#define ASN1_put_eoc v1_ASN1_put_eoc
+#define ASN1_put_object v1_ASN1_put_object
+#define ASN1_SCTX_free v1_ASN1_SCTX_free
+#define ASN1_SCTX_get_app_data v1_ASN1_SCTX_get_app_data
+#define ASN1_SCTX_get_flags v1_ASN1_SCTX_get_flags
+#define ASN1_SCTX_get_item v1_ASN1_SCTX_get_item
+#define ASN1_SCTX_get_template v1_ASN1_SCTX_get_template
+#define ASN1_SCTX_new v1_ASN1_SCTX_new
+#define ASN1_SCTX_set_app_data v1_ASN1_SCTX_set_app_data
+#define ASN1_SEQUENCE_ANY_it v1_ASN1_SEQUENCE_ANY_it
+#define ASN1_SEQUENCE_it v1_ASN1_SEQUENCE_it
+#define ASN1_SET_ANY_it v1_ASN1_SET_ANY_it
+#define asn1_set_choice_selector v1_asn1_set_choice_selector
+#define ASN1_sign v1_ASN1_sign
+#define ASN1_str2mask v1_ASN1_str2mask
+#define ASN1_STRING_clear_free v1_ASN1_STRING_clear_free
+#define ASN1_STRING_cmp v1_ASN1_STRING_cmp
+#define ASN1_STRING_copy v1_ASN1_STRING_copy
+#define ASN1_STRING_data v1_ASN1_STRING_data
+#define ASN1_STRING_dup v1_ASN1_STRING_dup
+#define asn1_string_embed_free v1_asn1_string_embed_free
+#define ASN1_STRING_free v1_ASN1_STRING_free
+#define ASN1_STRING_get0_data v1_ASN1_STRING_get0_data
+#define ASN1_STRING_get_default_mask v1_ASN1_STRING_get_default_mask
+#define ASN1_STRING_length v1_ASN1_STRING_length
+#define ASN1_STRING_length_set v1_ASN1_STRING_length_set
+#define ASN1_STRING_new v1_ASN1_STRING_new
+#define ASN1_STRING_print v1_ASN1_STRING_print
+#define ASN1_STRING_print_ex v1_ASN1_STRING_print_ex
+#define ASN1_STRING_print_ex_fp v1_ASN1_STRING_print_ex_fp
+#define ASN1_STRING_set v1_ASN1_STRING_set
+#define ASN1_STRING_set0 v1_ASN1_STRING_set0
+#define ASN1_STRING_set_by_NID v1_ASN1_STRING_set_by_NID
+#define ASN1_STRING_set_default_mask v1_ASN1_STRING_set_default_mask
+#define ASN1_STRING_set_default_mask_asc v1_ASN1_STRING_set_default_mask_asc
+#define ASN1_STRING_TABLE_add v1_ASN1_STRING_TABLE_add
+#define ASN1_STRING_TABLE_cleanup v1_ASN1_STRING_TABLE_cleanup
+#define ASN1_STRING_TABLE_get v1_ASN1_STRING_TABLE_get
+#define ASN1_STRING_to_UTF8 v1_ASN1_STRING_to_UTF8
+#define ASN1_STRING_type v1_ASN1_STRING_type
+#define ASN1_STRING_type_new v1_ASN1_STRING_type_new
+#define ASN1_T61STRING_free v1_ASN1_T61STRING_free
+#define ASN1_T61STRING_it v1_ASN1_T61STRING_it
+#define ASN1_T61STRING_new v1_ASN1_T61STRING_new
+#define ASN1_tag2bit v1_ASN1_tag2bit
+#define ASN1_tag2str v1_ASN1_tag2str
+#define ASN1_TBOOLEAN_it v1_ASN1_TBOOLEAN_it
+#define asn1_template_free v1_asn1_template_free
+#define ASN1_TIME_adj v1_ASN1_TIME_adj
+#define ASN1_TIME_check v1_ASN1_TIME_check
+#define ASN1_TIME_cmp_time_t v1_ASN1_TIME_cmp_time_t
+#define ASN1_TIME_compare v1_ASN1_TIME_compare
+#define ASN1_TIME_diff v1_ASN1_TIME_diff
+#define ASN1_TIME_free v1_ASN1_TIME_free
+#define asn1_time_from_tm v1_asn1_time_from_tm
+#define ASN1_TIME_it v1_ASN1_TIME_it
+#define ASN1_TIME_new v1_ASN1_TIME_new
+#define ASN1_TIME_normalize v1_ASN1_TIME_normalize
+#define ASN1_TIME_print v1_ASN1_TIME_print
+#define ASN1_TIME_set v1_ASN1_TIME_set
+#define ASN1_TIME_set_string v1_ASN1_TIME_set_string
+#define ASN1_TIME_set_string_X509 v1_ASN1_TIME_set_string_X509
+#define ASN1_TIME_to_generalizedtime v1_ASN1_TIME_to_generalizedtime
+#define asn1_time_to_tm v1_asn1_time_to_tm
+#define ASN1_TIME_to_tm v1_ASN1_TIME_to_tm
+#define ASN1_TYPE_cmp v1_ASN1_TYPE_cmp
+#define ASN1_TYPE_free v1_ASN1_TYPE_free
+#define ASN1_TYPE_get v1_ASN1_TYPE_get
+#define ASN1_TYPE_get_int_octetstring v1_ASN1_TYPE_get_int_octetstring
+#define ASN1_TYPE_get_octetstring v1_ASN1_TYPE_get_octetstring
+#define ASN1_TYPE_new v1_ASN1_TYPE_new
+#define ASN1_TYPE_pack_sequence v1_ASN1_TYPE_pack_sequence
+#define ASN1_TYPE_set v1_ASN1_TYPE_set
+#define ASN1_TYPE_set1 v1_ASN1_TYPE_set1
+#define ASN1_TYPE_set_int_octetstring v1_ASN1_TYPE_set_int_octetstring
+#define ASN1_TYPE_set_octetstring v1_ASN1_TYPE_set_octetstring
+#define ASN1_TYPE_unpack_sequence v1_ASN1_TYPE_unpack_sequence
+#define ASN1_UNIVERSALSTRING_free v1_ASN1_UNIVERSALSTRING_free
+#define ASN1_UNIVERSALSTRING_it v1_ASN1_UNIVERSALSTRING_it
+#define ASN1_UNIVERSALSTRING_new v1_ASN1_UNIVERSALSTRING_new
+#define ASN1_UNIVERSALSTRING_to_string v1_ASN1_UNIVERSALSTRING_to_string
+#define ASN1_UTCTIME_adj v1_ASN1_UTCTIME_adj
+#define ASN1_UTCTIME_check v1_ASN1_UTCTIME_check
+#define ASN1_UTCTIME_cmp_time_t v1_ASN1_UTCTIME_cmp_time_t
+#define ASN1_UTCTIME_free v1_ASN1_UTCTIME_free
+#define ASN1_UTCTIME_it v1_ASN1_UTCTIME_it
+#define ASN1_UTCTIME_new v1_ASN1_UTCTIME_new
+#define ASN1_UTCTIME_print v1_ASN1_UTCTIME_print
+#define ASN1_UTCTIME_set v1_ASN1_UTCTIME_set
+#define ASN1_UTCTIME_set_string v1_ASN1_UTCTIME_set_string
+#define asn1_utctime_to_tm v1_asn1_utctime_to_tm
+#define ASN1_UTF8STRING_free v1_ASN1_UTF8STRING_free
+#define ASN1_UTF8STRING_it v1_ASN1_UTF8STRING_it
+#define ASN1_UTF8STRING_new v1_ASN1_UTF8STRING_new
+#define ASN1_verify v1_ASN1_verify
+#define ASN1_VISIBLESTRING_free v1_ASN1_VISIBLESTRING_free
+#define ASN1_VISIBLESTRING_it v1_ASN1_VISIBLESTRING_it
+#define ASN1_VISIBLESTRING_new v1_ASN1_VISIBLESTRING_new
+#define ASRange_free v1_ASRange_free
+#define ASRange_it v1_ASRange_it
+#define ASRange_new v1_ASRange_new
+#define ASYNC_block_pause v1_ASYNC_block_pause
+#define ASYNC_cleanup_thread v1_ASYNC_cleanup_thread
+#define async_deinit v1_async_deinit
+#define async_delete_thread_state v1_async_delete_thread_state
+#define async_fibre_free v1_async_fibre_free
+#define async_fibre_makecontext v1_async_fibre_makecontext
+#define async_get_ctx v1_async_get_ctx
+#define ASYNC_get_current_job v1_ASYNC_get_current_job
+#define ASYNC_get_wait_ctx v1_ASYNC_get_wait_ctx
+#define async_init v1_async_init
+#define ASYNC_init_thread v1_ASYNC_init_thread
+#define ASYNC_is_capable v1_ASYNC_is_capable
+#define async_local_cleanup v1_async_local_cleanup
+#define ASYNC_pause_job v1_ASYNC_pause_job
+#define async_start_func v1_async_start_func
+#define ASYNC_start_job v1_ASYNC_start_job
+#define ASYNC_unblock_pause v1_ASYNC_unblock_pause
+#define ASYNC_WAIT_CTX_clear_fd v1_ASYNC_WAIT_CTX_clear_fd
+#define ASYNC_WAIT_CTX_free v1_ASYNC_WAIT_CTX_free
+#define ASYNC_WAIT_CTX_get_all_fds v1_ASYNC_WAIT_CTX_get_all_fds
+#define ASYNC_WAIT_CTX_get_changed_fds v1_ASYNC_WAIT_CTX_get_changed_fds
+#define ASYNC_WAIT_CTX_get_fd v1_ASYNC_WAIT_CTX_get_fd
+#define ASYNC_WAIT_CTX_new v1_ASYNC_WAIT_CTX_new
+#define async_wait_ctx_reset_counts v1_async_wait_ctx_reset_counts
+#define ASYNC_WAIT_CTX_set_wait_fd v1_ASYNC_WAIT_CTX_set_wait_fd
+#define AUTHORITY_INFO_ACCESS_free v1_AUTHORITY_INFO_ACCESS_free
+#define AUTHORITY_INFO_ACCESS_it v1_AUTHORITY_INFO_ACCESS_it
+#define AUTHORITY_INFO_ACCESS_new v1_AUTHORITY_INFO_ACCESS_new
+#define AUTHORITY_KEYID_free v1_AUTHORITY_KEYID_free
+#define AUTHORITY_KEYID_it v1_AUTHORITY_KEYID_it
+#define AUTHORITY_KEYID_new v1_AUTHORITY_KEYID_new
+#define b2i_PrivateKey v1_b2i_PrivateKey
+#define b2i_PrivateKey_bio v1_b2i_PrivateKey_bio
+#define b2i_PublicKey v1_b2i_PublicKey
+#define b2i_PublicKey_bio v1_b2i_PublicKey_bio
+#define b2i_PVK_bio v1_b2i_PVK_bio
+#define BASIC_CONSTRAINTS_free v1_BASIC_CONSTRAINTS_free
+#define BASIC_CONSTRAINTS_it v1_BASIC_CONSTRAINTS_it
+#define BASIC_CONSTRAINTS_new v1_BASIC_CONSTRAINTS_new
+#define BF_cbc_encrypt v1_BF_cbc_encrypt
+#define BF_cfb64_encrypt v1_BF_cfb64_encrypt
+#define BF_decrypt v1_BF_decrypt
+#define BF_ecb_encrypt v1_BF_ecb_encrypt
+#define BF_encrypt v1_BF_encrypt
+#define BF_ofb64_encrypt v1_BF_ofb64_encrypt
+#define BF_options v1_BF_options
+#define BF_set_key v1_BF_set_key
+#define _bignum_const_2 v1__bignum_const_2
+#define _bignum_dh1024_160_g v1__bignum_dh1024_160_g
+#define _bignum_dh1024_160_p v1__bignum_dh1024_160_p
+#define _bignum_dh1024_160_q v1__bignum_dh1024_160_q
+#define _bignum_dh2048_224_g v1__bignum_dh2048_224_g
+#define _bignum_dh2048_224_p v1__bignum_dh2048_224_p
+#define _bignum_dh2048_224_q v1__bignum_dh2048_224_q
+#define _bignum_dh2048_256_g v1__bignum_dh2048_256_g
+#define _bignum_dh2048_256_p v1__bignum_dh2048_256_p
+#define _bignum_dh2048_256_q v1__bignum_dh2048_256_q
+#define _bignum_ffdhe2048_p v1__bignum_ffdhe2048_p
+#define _bignum_ffdhe3072_p v1__bignum_ffdhe3072_p
+#define _bignum_ffdhe4096_p v1__bignum_ffdhe4096_p
+#define _bignum_ffdhe6144_p v1__bignum_ffdhe6144_p
+#define _bignum_ffdhe8192_p v1__bignum_ffdhe8192_p
+#define BIGNUM_it v1_BIGNUM_it
+#define BIO_accept v1_BIO_accept
+#define BIO_accept_ex v1_BIO_accept_ex
+#define BIO_ADDR_clear v1_BIO_ADDR_clear
+#define BIO_ADDR_family v1_BIO_ADDR_family
+#define BIO_ADDR_free v1_BIO_ADDR_free
+#define BIO_ADDR_hostname_string v1_BIO_ADDR_hostname_string
+#define BIO_ADDRINFO_address v1_BIO_ADDRINFO_address
+#define BIO_ADDRINFO_family v1_BIO_ADDRINFO_family
+#define BIO_ADDRINFO_free v1_BIO_ADDRINFO_free
+#define BIO_ADDRINFO_next v1_BIO_ADDRINFO_next
+#define BIO_ADDRINFO_protocol v1_BIO_ADDRINFO_protocol
+#define BIO_ADDRINFO_sockaddr v1_BIO_ADDRINFO_sockaddr
+#define BIO_ADDRINFO_sockaddr_size v1_BIO_ADDRINFO_sockaddr_size
+#define BIO_ADDRINFO_socktype v1_BIO_ADDRINFO_socktype
+#define BIO_ADDR_make v1_BIO_ADDR_make
+#define BIO_ADDR_new v1_BIO_ADDR_new
+#define BIO_ADDR_path_string v1_BIO_ADDR_path_string
+#define BIO_ADDR_rawaddress v1_BIO_ADDR_rawaddress
+#define BIO_ADDR_rawmake v1_BIO_ADDR_rawmake
+#define BIO_ADDR_rawport v1_BIO_ADDR_rawport
+#define BIO_ADDR_service_string v1_BIO_ADDR_service_string
+#define BIO_ADDR_sockaddr v1_BIO_ADDR_sockaddr
+#define BIO_ADDR_sockaddr_noconst v1_BIO_ADDR_sockaddr_noconst
+#define BIO_ADDR_sockaddr_size v1_BIO_ADDR_sockaddr_size
+#define BIO_asn1_get_prefix v1_BIO_asn1_get_prefix
+#define BIO_asn1_get_suffix v1_BIO_asn1_get_suffix
+#define BIO_asn1_set_prefix v1_BIO_asn1_set_prefix
+#define BIO_asn1_set_suffix v1_BIO_asn1_set_suffix
+#define BIO_bind v1_BIO_bind
+#define BIO_callback_ctrl v1_BIO_callback_ctrl
+#define bio_cleanup v1_bio_cleanup
+#define BIO_clear_flags v1_BIO_clear_flags
+#define BIO_closesocket v1_BIO_closesocket
+#define BIO_connect v1_BIO_connect
+#define BIO_CONNECT_free v1_BIO_CONNECT_free
+#define BIO_CONNECT_new v1_BIO_CONNECT_new
+#define BIO_copy_next_retry v1_BIO_copy_next_retry
+#define BIO_ctrl v1_BIO_ctrl
+#define BIO_ctrl_get_read_request v1_BIO_ctrl_get_read_request
+#define BIO_ctrl_get_write_guarantee v1_BIO_ctrl_get_write_guarantee
+#define BIO_ctrl_pending v1_BIO_ctrl_pending
+#define BIO_ctrl_reset_read_request v1_BIO_ctrl_reset_read_request
+#define BIO_ctrl_wpending v1_BIO_ctrl_wpending
+#define BIO_debug_callback v1_BIO_debug_callback
+#define BIO_dgram_non_fatal_error v1_BIO_dgram_non_fatal_error
+#define BIO_dump v1_BIO_dump
+#define BIO_dump_cb v1_BIO_dump_cb
+#define BIO_dump_fp v1_BIO_dump_fp
+#define BIO_dump_indent v1_BIO_dump_indent
+#define BIO_dump_indent_cb v1_BIO_dump_indent_cb
+#define BIO_dump_indent_fp v1_BIO_dump_indent_fp
+#define BIO_dup_chain v1_BIO_dup_chain
+#define BIO_f_asn1 v1_BIO_f_asn1
+#define BIO_f_base64 v1_BIO_f_base64
+#define BIO_f_buffer v1_BIO_f_buffer
+#define BIO_f_cipher v1_BIO_f_cipher
+#define BIO_fd_non_fatal_error v1_BIO_fd_non_fatal_error
+#define BIO_fd_should_retry v1_BIO_fd_should_retry
+#define BIO_find_type v1_BIO_find_type
+#define BIO_f_linebuffer v1_BIO_f_linebuffer
+#define BIO_f_md v1_BIO_f_md
+#define BIO_f_nbio_test v1_BIO_f_nbio_test
+#define BIO_f_null v1_BIO_f_null
+#define BIO_free v1_BIO_free
+#define BIO_free_all v1_BIO_free_all
+#define bio_free_ex_data v1_bio_free_ex_data
+#define BIO_f_reliable v1_BIO_f_reliable
+#define BIO_f_ssl v1_BIO_f_ssl
+#define BIO_f_zlib v1_BIO_f_zlib
+#define BIO_get_accept_socket v1_BIO_get_accept_socket
+#define BIO_get_callback v1_BIO_get_callback
+#define BIO_get_callback_arg v1_BIO_get_callback_arg
+#define BIO_get_callback_ex v1_BIO_get_callback_ex
+#define BIO_get_data v1_BIO_get_data
+#define BIO_get_ex_data v1_BIO_get_ex_data
+#define BIO_gethostbyname v1_BIO_gethostbyname
+#define BIO_get_host_ip v1_BIO_get_host_ip
+#define BIO_get_init v1_BIO_get_init
+#define BIO_get_new_index v1_BIO_get_new_index
+#define BIO_get_port v1_BIO_get_port
+#define BIO_get_retry_BIO v1_BIO_get_retry_BIO
+#define BIO_get_retry_reason v1_BIO_get_retry_reason
+#define BIO_gets v1_BIO_gets
+#define BIO_get_shutdown v1_BIO_get_shutdown
+#define BIO_hex_string v1_BIO_hex_string
+#define BIO_indent v1_BIO_indent
+#define BIO_int_ctrl v1_BIO_int_ctrl
+#define BIO_listen v1_BIO_listen
+#define BIO_lookup v1_BIO_lookup
+#define BIO_lookup_ex v1_BIO_lookup_ex
+#define bio_lookup_lock v1_bio_lookup_lock
+#define BIO_meth_free v1_BIO_meth_free
+#define BIO_meth_get_callback_ctrl v1_BIO_meth_get_callback_ctrl
+#define BIO_meth_get_create v1_BIO_meth_get_create
+#define BIO_meth_get_ctrl v1_BIO_meth_get_ctrl
+#define BIO_meth_get_destroy v1_BIO_meth_get_destroy
+#define BIO_meth_get_gets v1_BIO_meth_get_gets
+#define BIO_meth_get_puts v1_BIO_meth_get_puts
+#define BIO_meth_get_read v1_BIO_meth_get_read
+#define BIO_meth_get_read_ex v1_BIO_meth_get_read_ex
+#define BIO_meth_get_write v1_BIO_meth_get_write
+#define BIO_meth_get_write_ex v1_BIO_meth_get_write_ex
+#define BIO_meth_new v1_BIO_meth_new
+#define BIO_method_name v1_BIO_method_name
+#define BIO_method_type v1_BIO_method_type
+#define BIO_meth_set_callback_ctrl v1_BIO_meth_set_callback_ctrl
+#define BIO_meth_set_create v1_BIO_meth_set_create
+#define BIO_meth_set_ctrl v1_BIO_meth_set_ctrl
+#define BIO_meth_set_destroy v1_BIO_meth_set_destroy
+#define BIO_meth_set_gets v1_BIO_meth_set_gets
+#define BIO_meth_set_puts v1_BIO_meth_set_puts
+#define BIO_meth_set_read v1_BIO_meth_set_read
+#define BIO_meth_set_read_ex v1_BIO_meth_set_read_ex
+#define BIO_meth_set_write v1_BIO_meth_set_write
+#define BIO_meth_set_write_ex v1_BIO_meth_set_write_ex
+#define BIO_new v1_BIO_new
+#define BIO_new_accept v1_BIO_new_accept
+#define BIO_new_bio_pair v1_BIO_new_bio_pair
+#define BIO_new_buffer_ssl_connect v1_BIO_new_buffer_ssl_connect
+#define BIO_new_CMS v1_BIO_new_CMS
+#define BIO_new_connect v1_BIO_new_connect
+#define BIO_new_dgram v1_BIO_new_dgram
+#define BIO_new_fd v1_BIO_new_fd
+#define BIO_new_file v1_BIO_new_file
+#define BIO_new_fp v1_BIO_new_fp
+#define BIO_new_mem_buf v1_BIO_new_mem_buf
+#define BIO_new_NDEF v1_BIO_new_NDEF
+#define BIO_new_PKCS7 v1_BIO_new_PKCS7
+#define BIO_new_socket v1_BIO_new_socket
+#define BIO_new_ssl v1_BIO_new_ssl
+#define BIO_new_ssl_connect v1_BIO_new_ssl_connect
+#define BIO_next v1_BIO_next
+#define BIO_nread v1_BIO_nread
+#define BIO_nread0 v1_BIO_nread0
+#define BIO_number_read v1_BIO_number_read
+#define BIO_number_written v1_BIO_number_written
+#define BIO_nwrite v1_BIO_nwrite
+#define BIO_nwrite0 v1_BIO_nwrite0
+#define BIO_parse_hostserv v1_BIO_parse_hostserv
+#define BIO_pop v1_BIO_pop
+#define BIO_printf v1_BIO_printf
+#define BIO_ptr_ctrl v1_BIO_ptr_ctrl
+#define BIO_push v1_BIO_push
+#define BIO_puts v1_BIO_puts
+#define BIO_read v1_BIO_read
+#define BIO_read_ex v1_BIO_read_ex
+#define BIO_s_accept v1_BIO_s_accept
+#define BIO_s_bio v1_BIO_s_bio
+#define BIO_s_connect v1_BIO_s_connect
+#define BIO_s_datagram v1_BIO_s_datagram
+#define BIO_set_callback v1_BIO_set_callback
+#define BIO_set_callback_arg v1_BIO_set_callback_arg
+#define BIO_set_callback_ex v1_BIO_set_callback_ex
+#define BIO_set_cipher v1_BIO_set_cipher
+#define BIO_set_data v1_BIO_set_data
+#define BIO_set_ex_data v1_BIO_set_ex_data
+#define BIO_set_flags v1_BIO_set_flags
+#define BIO_set_init v1_BIO_set_init
+#define BIO_set_next v1_BIO_set_next
+#define BIO_set_retry_reason v1_BIO_set_retry_reason
+#define BIO_set_shutdown v1_BIO_set_shutdown
+#define BIO_set_tcp_ndelay v1_BIO_set_tcp_ndelay
+#define BIO_s_fd v1_BIO_s_fd
+#define BIO_s_file v1_BIO_s_file
+#define BIO_s_log v1_BIO_s_log
+#define BIO_s_mem v1_BIO_s_mem
+#define BIO_snprintf v1_BIO_snprintf
+#define BIO_s_null v1_BIO_s_null
+#define bio_sock_cleanup_int v1_bio_sock_cleanup_int
+#define BIO_sock_error v1_BIO_sock_error
+#define BIO_socket v1_BIO_socket
+#define BIO_socket_ioctl v1_BIO_socket_ioctl
+#define BIO_socket_nbio v1_BIO_socket_nbio
+#define BIO_sock_info v1_BIO_sock_info
+#define BIO_sock_init v1_BIO_sock_init
+#define BIO_sock_non_fatal_error v1_BIO_sock_non_fatal_error
+#define BIO_sock_should_retry v1_BIO_sock_should_retry
+#define BIO_s_secmem v1_BIO_s_secmem
+#define BIO_ssl_copy_session_id v1_BIO_ssl_copy_session_id
+#define BIO_ssl_shutdown v1_BIO_ssl_shutdown
+#define BIO_s_socket v1_BIO_s_socket
+#define BIO_test_flags v1_BIO_test_flags
+#define bio_type_lock v1_bio_type_lock
+#define BIO_up_ref v1_BIO_up_ref
+#define BIO_vfree v1_BIO_vfree
+#define BIO_vprintf v1_BIO_vprintf
+#define BIO_vsnprintf v1_BIO_vsnprintf
+#define BIO_write v1_BIO_write
+#define BIO_write_ex v1_BIO_write_ex
+#define BLAKE2b_Final v1_BLAKE2b_Final
+#define BLAKE2b_Init v1_BLAKE2b_Init
+#define BLAKE2b_Update v1_BLAKE2b_Update
+#define BLAKE2s_Final v1_BLAKE2s_Final
+#define BLAKE2s_Init v1_BLAKE2s_Init
+#define BLAKE2s_Update v1_BLAKE2s_Update
+#define BN_abs_is_word v1_BN_abs_is_word
+#define BN_add v1_BN_add
+#define BN_add_word v1_BN_add_word
+#define bn_add_words v1_bn_add_words
+#define BN_asc2bn v1_BN_asc2bn
+#define BN_bin2bn v1_BN_bin2bn
+#define BN_BLINDING_convert v1_BN_BLINDING_convert
+#define BN_BLINDING_convert_ex v1_BN_BLINDING_convert_ex
+#define BN_BLINDING_create_param v1_BN_BLINDING_create_param
+#define BN_BLINDING_free v1_BN_BLINDING_free
+#define BN_BLINDING_get_flags v1_BN_BLINDING_get_flags
+#define BN_BLINDING_invert v1_BN_BLINDING_invert
+#define BN_BLINDING_invert_ex v1_BN_BLINDING_invert_ex
+#define BN_BLINDING_is_current_thread v1_BN_BLINDING_is_current_thread
+#define BN_BLINDING_lock v1_BN_BLINDING_lock
+#define BN_BLINDING_new v1_BN_BLINDING_new
+#define BN_BLINDING_set_current_thread v1_BN_BLINDING_set_current_thread
+#define BN_BLINDING_set_flags v1_BN_BLINDING_set_flags
+#define BN_BLINDING_unlock v1_BN_BLINDING_unlock
+#define BN_BLINDING_update v1_BN_BLINDING_update
+#define BN_bn2bin v1_BN_bn2bin
+#define BN_bn2binpad v1_BN_bn2binpad
+#define BN_bn2dec v1_BN_bn2dec
+#define BN_bn2hex v1_BN_bn2hex
+#define BN_bn2lebinpad v1_BN_bn2lebinpad
+#define BN_bn2mpi v1_BN_bn2mpi
+#define BN_bntest_rand v1_BN_bntest_rand
+#define BN_clear v1_BN_clear
+#define BN_clear_bit v1_BN_clear_bit
+#define BN_clear_free v1_BN_clear_free
+#define BN_cmp v1_BN_cmp
+#define bn_cmp_part_words v1_bn_cmp_part_words
+#define bn_cmp_words v1_bn_cmp_words
+#define bn_compute_wNAF v1_bn_compute_wNAF
+#define BN_consttime_swap v1_BN_consttime_swap
+#define BN_copy v1_BN_copy
+#define bn_copy_words v1_bn_copy_words
+#define bn_correct_top v1_bn_correct_top
+#define bn_correct_top_consttime v1_bn_correct_top_consttime
+#define BN_CTX_end v1_BN_CTX_end
+#define BN_CTX_free v1_BN_CTX_free
+#define BN_CTX_get v1_BN_CTX_get
+#define BN_CTX_new v1_BN_CTX_new
+#define BN_CTX_secure_new v1_BN_CTX_secure_new
+#define BN_CTX_start v1_BN_CTX_start
+#define BN_dec2bn v1_BN_dec2bn
+#define BN_div v1_BN_div
+#define bn_div_fixed_top v1_bn_div_fixed_top
+#define BN_div_recp v1_BN_div_recp
+#define BN_div_word v1_BN_div_word
+#define bn_div_words v1_bn_div_words
+#define BN_dup v1_BN_dup
+#define BN_exp v1_BN_exp
+#define bn_expand2 v1_bn_expand2
+#define BN_free v1_BN_free
+#define bn_from_mont_fixed_top v1_bn_from_mont_fixed_top
+#define BN_from_montgomery v1_BN_from_montgomery
+#define bn_gather5 v1_bn_gather5
+#define BN_gcd v1_BN_gcd
+#define BN_GENCB_call v1_BN_GENCB_call
+#define BN_GENCB_free v1_BN_GENCB_free
+#define BN_GENCB_get_arg v1_BN_GENCB_get_arg
+#define BN_GENCB_new v1_BN_GENCB_new
+#define BN_GENCB_set v1_BN_GENCB_set
+#define BN_GENCB_set_old v1_BN_GENCB_set_old
+#define BN_generate_dsa_nonce v1_BN_generate_dsa_nonce
+#define BN_generate_prime v1_BN_generate_prime
+#define BN_generate_prime_ex v1_BN_generate_prime_ex
+#define bn_generator_19 v1_bn_generator_19
+#define bn_generator_2 v1_bn_generator_2
+#define bn_generator_5 v1_bn_generator_5
+#define BN_get0_nist_prime_192 v1_BN_get0_nist_prime_192
+#define BN_get0_nist_prime_224 v1_BN_get0_nist_prime_224
+#define BN_get0_nist_prime_256 v1_BN_get0_nist_prime_256
+#define BN_get0_nist_prime_384 v1_BN_get0_nist_prime_384
+#define BN_get0_nist_prime_521 v1_BN_get0_nist_prime_521
+#define bn_get_bits5 v1_bn_get_bits5
+#define bn_get_dmax v1_bn_get_dmax
+#define BN_get_flags v1_BN_get_flags
+#define BN_get_params v1_BN_get_params
+#define BN_get_rfc2409_prime_1024 v1_BN_get_rfc2409_prime_1024
+#define BN_get_rfc2409_prime_768 v1_BN_get_rfc2409_prime_768
+#define BN_get_rfc3526_prime_1536 v1_BN_get_rfc3526_prime_1536
+#define BN_get_rfc3526_prime_2048 v1_BN_get_rfc3526_prime_2048
+#define BN_get_rfc3526_prime_3072 v1_BN_get_rfc3526_prime_3072
+#define BN_get_rfc3526_prime_4096 v1_BN_get_rfc3526_prime_4096
+#define BN_get_rfc3526_prime_6144 v1_BN_get_rfc3526_prime_6144
+#define BN_get_rfc3526_prime_8192 v1_BN_get_rfc3526_prime_8192
+#define bn_get_top v1_bn_get_top
+#define BN_get_word v1_BN_get_word
+#define bn_get_words v1_bn_get_words
+#define BN_GF2m_add v1_BN_GF2m_add
+#define BN_GF2m_arr2poly v1_BN_GF2m_arr2poly
+#define BN_GF2m_mod v1_BN_GF2m_mod
+#define BN_GF2m_mod_arr v1_BN_GF2m_mod_arr
+#define BN_GF2m_mod_div v1_BN_GF2m_mod_div
+#define BN_GF2m_mod_div_arr v1_BN_GF2m_mod_div_arr
+#define BN_GF2m_mod_exp v1_BN_GF2m_mod_exp
+#define BN_GF2m_mod_exp_arr v1_BN_GF2m_mod_exp_arr
+#define BN_GF2m_mod_inv v1_BN_GF2m_mod_inv
+#define BN_GF2m_mod_inv_arr v1_BN_GF2m_mod_inv_arr
+#define BN_GF2m_mod_mul v1_BN_GF2m_mod_mul
+#define BN_GF2m_mod_mul_arr v1_BN_GF2m_mod_mul_arr
+#define BN_GF2m_mod_solve_quad v1_BN_GF2m_mod_solve_quad
+#define BN_GF2m_mod_solve_quad_arr v1_BN_GF2m_mod_solve_quad_arr
+#define BN_GF2m_mod_sqr v1_BN_GF2m_mod_sqr
+#define BN_GF2m_mod_sqr_arr v1_BN_GF2m_mod_sqr_arr
+#define BN_GF2m_mod_sqrt v1_BN_GF2m_mod_sqrt
+#define BN_GF2m_mod_sqrt_arr v1_BN_GF2m_mod_sqrt_arr
+#define bn_GF2m_mul_2x2 v1_bn_GF2m_mul_2x2
+#define BN_GF2m_poly2arr v1_BN_GF2m_poly2arr
+#define bn_group_1024 v1_bn_group_1024
+#define bn_group_1536 v1_bn_group_1536
+#define bn_group_2048 v1_bn_group_2048
+#define bn_group_3072 v1_bn_group_3072
+#define bn_group_4096 v1_bn_group_4096
+#define bn_group_6144 v1_bn_group_6144
+#define bn_group_8192 v1_bn_group_8192
+#define BN_hex2bn v1_BN_hex2bn
+#define bn_init v1_bn_init
+#define BN_is_bit_set v1_BN_is_bit_set
+#define BN_is_negative v1_BN_is_negative
+#define BN_is_odd v1_BN_is_odd
+#define BN_is_one v1_BN_is_one
+#define BN_is_prime v1_BN_is_prime
+#define BN_is_prime_ex v1_BN_is_prime_ex
+#define BN_is_prime_fasttest v1_BN_is_prime_fasttest
+#define BN_is_prime_fasttest_ex v1_BN_is_prime_fasttest_ex
+#define BN_is_word v1_BN_is_word
+#define BN_is_zero v1_BN_is_zero
+#define BN_kronecker v1_BN_kronecker
+#define BN_lebin2bn v1_BN_lebin2bn
+#define BN_lshift v1_BN_lshift
+#define BN_lshift1 v1_BN_lshift1
+#define bn_lshift_fixed_top v1_bn_lshift_fixed_top
+#define BN_mask_bits v1_BN_mask_bits
+#define BN_mod_add v1_BN_mod_add
+#define bn_mod_add_fixed_top v1_bn_mod_add_fixed_top
+#define BN_mod_add_quick v1_BN_mod_add_quick
+#define BN_mod_exp v1_BN_mod_exp
+#define BN_mod_exp2_mont v1_BN_mod_exp2_mont
+#define BN_mod_exp_mont v1_BN_mod_exp_mont
+#define BN_mod_exp_mont_consttime v1_BN_mod_exp_mont_consttime
+#define BN_mod_exp_mont_word v1_BN_mod_exp_mont_word
+#define BN_mod_exp_recp v1_BN_mod_exp_recp
+#define BN_mod_exp_simple v1_BN_mod_exp_simple
+#define BN_mod_inverse v1_BN_mod_inverse
+#define BN_mod_lshift v1_BN_mod_lshift
+#define BN_mod_lshift1 v1_BN_mod_lshift1
+#define BN_mod_lshift1_quick v1_BN_mod_lshift1_quick
+#define BN_mod_lshift_quick v1_BN_mod_lshift_quick
+#define BN_mod_mul v1_BN_mod_mul
+#define BN_mod_mul_montgomery v1_BN_mod_mul_montgomery
+#define BN_mod_mul_reciprocal v1_BN_mod_mul_reciprocal
+#define BN_mod_sqr v1_BN_mod_sqr
+#define BN_mod_sqrt v1_BN_mod_sqrt
+#define BN_mod_sub v1_BN_mod_sub
+#define bn_mod_sub_fixed_top v1_bn_mod_sub_fixed_top
+#define BN_mod_sub_quick v1_BN_mod_sub_quick
+#define BN_mod_word v1_BN_mod_word
+#define BN_MONT_CTX_copy v1_BN_MONT_CTX_copy
+#define BN_MONT_CTX_free v1_BN_MONT_CTX_free
+#define BN_MONT_CTX_init v1_BN_MONT_CTX_init
+#define BN_MONT_CTX_new v1_BN_MONT_CTX_new
+#define BN_MONT_CTX_set v1_BN_MONT_CTX_set
+#define BN_MONT_CTX_set_locked v1_BN_MONT_CTX_set_locked
+#define BN_mpi2bn v1_BN_mpi2bn
+#define BN_mul v1_BN_mul
+#define bn_mul_add_words v1_bn_mul_add_words
+#define bn_mul_comba4 v1_bn_mul_comba4
+#define bn_mul_comba8 v1_bn_mul_comba8
+#define bn_mul_fixed_top v1_bn_mul_fixed_top
+#define bn_mul_low_normal v1_bn_mul_low_normal
+#define bn_mul_low_recursive v1_bn_mul_low_recursive
+#define bn_mul_mont v1_bn_mul_mont
+#define bn_mul_mont_fixed_top v1_bn_mul_mont_fixed_top
+#define bn_mul_mont_gather5 v1_bn_mul_mont_gather5
+#define bn_mul_normal v1_bn_mul_normal
+#define bn_mul_part_recursive v1_bn_mul_part_recursive
+#define bn_mul_recursive v1_bn_mul_recursive
+#define BN_mul_word v1_BN_mul_word
+#define bn_mul_words v1_bn_mul_words
+#define BN_new v1_BN_new
+#define BN_nist_mod_192 v1_BN_nist_mod_192
+#define BN_nist_mod_224 v1_BN_nist_mod_224
+#define BN_nist_mod_256 v1_BN_nist_mod_256
+#define BN_nist_mod_384 v1_BN_nist_mod_384
+#define BN_nist_mod_521 v1_BN_nist_mod_521
+#define BN_nist_mod_func v1_BN_nist_mod_func
+#define BN_nnmod v1_BN_nnmod
+#define BN_num_bits v1_BN_num_bits
+#define BN_num_bits_word v1_BN_num_bits_word
+#define BN_options v1_BN_options
+#define bn_power5 v1_bn_power5
+#define BN_print v1_BN_print
+#define BN_print_fp v1_BN_print_fp
+#define BN_priv_rand v1_BN_priv_rand
+#define BN_priv_rand_range v1_BN_priv_rand_range
+#define BN_pseudo_rand v1_BN_pseudo_rand
+#define BN_pseudo_rand_range v1_BN_pseudo_rand_range
+#define BN_rand v1_BN_rand
+#define BN_rand_range v1_BN_rand_range
+#define BN_reciprocal v1_BN_reciprocal
+#define BN_RECP_CTX_free v1_BN_RECP_CTX_free
+#define BN_RECP_CTX_init v1_BN_RECP_CTX_init
+#define BN_RECP_CTX_new v1_BN_RECP_CTX_new
+#define BN_RECP_CTX_set v1_BN_RECP_CTX_set
+#define BN_rshift v1_BN_rshift
+#define BN_rshift1 v1_BN_rshift1
+#define bn_rshift_fixed_top v1_bn_rshift_fixed_top
+#define bn_scatter5 v1_bn_scatter5
+#define BN_secure_new v1_BN_secure_new
+#define BN_security_bits v1_BN_security_bits
+#define bn_set_all_zero v1_bn_set_all_zero
+#define BN_set_bit v1_BN_set_bit
+#define BN_set_flags v1_BN_set_flags
+#define BN_set_negative v1_BN_set_negative
+#define BN_set_params v1_BN_set_params
+#define bn_set_static_words v1_bn_set_static_words
+#define BN_set_word v1_BN_set_word
+#define bn_set_words v1_bn_set_words
+#define BN_sqr v1_BN_sqr
+#define bn_sqr8x_internal v1_bn_sqr8x_internal
+#define bn_sqr_comba4 v1_bn_sqr_comba4
+#define bn_sqr_comba8 v1_bn_sqr_comba8
+#define bn_sqr_fixed_top v1_bn_sqr_fixed_top
+#define bn_sqr_normal v1_bn_sqr_normal
+#define bn_sqr_recursive v1_bn_sqr_recursive
+#define bn_sqr_words v1_bn_sqr_words
+#define bn_sqrx8x_internal v1_bn_sqrx8x_internal
+#define BN_sub v1_BN_sub
+#define bn_sub_part_words v1_bn_sub_part_words
+#define BN_sub_word v1_BN_sub_word
+#define bn_sub_words v1_bn_sub_words
+#define BN_swap v1_BN_swap
+#define BN_to_ASN1_ENUMERATED v1_BN_to_ASN1_ENUMERATED
+#define BN_to_ASN1_INTEGER v1_BN_to_ASN1_INTEGER
+#define bn_to_mont_fixed_top v1_bn_to_mont_fixed_top
+#define BN_to_montgomery v1_BN_to_montgomery
+#define BN_uadd v1_BN_uadd
+#define BN_ucmp v1_BN_ucmp
+#define BN_usub v1_BN_usub
+#define BN_value_one v1_BN_value_one
+#define bn_wexpand v1_bn_wexpand
+#define BN_with_flags v1_BN_with_flags
+#define BN_X931_derive_prime_ex v1_BN_X931_derive_prime_ex
+#define BN_X931_generate_prime_ex v1_BN_X931_generate_prime_ex
+#define BN_X931_generate_Xpq v1_BN_X931_generate_Xpq
+#define BN_zero_ex v1_BN_zero_ex
+#define bread_conv v1_bread_conv
+#define BUF_MEM_free v1_BUF_MEM_free
+#define BUF_MEM_grow v1_BUF_MEM_grow
+#define BUF_MEM_grow_clean v1_BUF_MEM_grow_clean
+#define BUF_MEM_new v1_BUF_MEM_new
+#define BUF_MEM_new_ex v1_BUF_MEM_new_ex
+#define BUF_reverse v1_BUF_reverse
+#define bwrite_conv v1_bwrite_conv
+#define bytes_to_cipher_list v1_bytes_to_cipher_list
+#define c2i_ASN1_BIT_STRING v1_c2i_ASN1_BIT_STRING
+#define c2i_ASN1_INTEGER v1_c2i_ASN1_INTEGER
+#define c2i_ASN1_OBJECT v1_c2i_ASN1_OBJECT
+#define c2i_uint64_int v1_c2i_uint64_int
+#define c448_ed448_convert_private_key_to_x448 v1_c448_ed448_convert_private_key_to_x448
+#define c448_ed448_derive_public_key v1_c448_ed448_derive_public_key
+#define c448_ed448_sign v1_c448_ed448_sign
+#define c448_ed448_sign_prehash v1_c448_ed448_sign_prehash
+#define c448_ed448_verify v1_c448_ed448_verify
+#define c448_ed448_verify_prehash v1_c448_ed448_verify_prehash
+#define Camellia_cbc_encrypt v1_Camellia_cbc_encrypt
+#define Camellia_cfb128_encrypt v1_Camellia_cfb128_encrypt
+#define Camellia_cfb1_encrypt v1_Camellia_cfb1_encrypt
+#define Camellia_cfb8_encrypt v1_Camellia_cfb8_encrypt
+#define Camellia_ctr128_encrypt v1_Camellia_ctr128_encrypt
+#define Camellia_decrypt v1_Camellia_decrypt
+#define Camellia_DecryptBlock v1_Camellia_DecryptBlock
+#define Camellia_DecryptBlock_Rounds v1_Camellia_DecryptBlock_Rounds
+#define Camellia_ecb_encrypt v1_Camellia_ecb_encrypt
+#define Camellia_Ekeygen v1_Camellia_Ekeygen
+#define Camellia_encrypt v1_Camellia_encrypt
+#define Camellia_EncryptBlock v1_Camellia_EncryptBlock
+#define Camellia_EncryptBlock_Rounds v1_Camellia_EncryptBlock_Rounds
+#define Camellia_ofb128_encrypt v1_Camellia_ofb128_encrypt
+#define Camellia_set_key v1_Camellia_set_key
+#define CAST_cbc_encrypt v1_CAST_cbc_encrypt
+#define CAST_cfb64_encrypt v1_CAST_cfb64_encrypt
+#define CAST_decrypt v1_CAST_decrypt
+#define CAST_ecb_encrypt v1_CAST_ecb_encrypt
+#define CAST_encrypt v1_CAST_encrypt
+#define CAST_ofb64_encrypt v1_CAST_ofb64_encrypt
+#define CAST_set_key v1_CAST_set_key
+#define CAST_S_table0 v1_CAST_S_table0
+#define CAST_S_table1 v1_CAST_S_table1
+#define CAST_S_table2 v1_CAST_S_table2
+#define CAST_S_table3 v1_CAST_S_table3
+#define CAST_S_table4 v1_CAST_S_table4
+#define CAST_S_table5 v1_CAST_S_table5
+#define CAST_S_table6 v1_CAST_S_table6
+#define CAST_S_table7 v1_CAST_S_table7
+#define CBIGNUM_it v1_CBIGNUM_it
+#define CERTIFICATEPOLICIES_free v1_CERTIFICATEPOLICIES_free
+#define CERTIFICATEPOLICIES_it v1_CERTIFICATEPOLICIES_it
+#define CERTIFICATEPOLICIES_new v1_CERTIFICATEPOLICIES_new
+#define ChaCha20_ctr32 v1_ChaCha20_ctr32
+#define check_in_list v1_check_in_list
+#define cmac_asn1_meth v1_cmac_asn1_meth
+#define CMAC_CTX_cleanup v1_CMAC_CTX_cleanup
+#define CMAC_CTX_copy v1_CMAC_CTX_copy
+#define CMAC_CTX_free v1_CMAC_CTX_free
+#define CMAC_CTX_get0_cipher_ctx v1_CMAC_CTX_get0_cipher_ctx
+#define CMAC_CTX_new v1_CMAC_CTX_new
+#define CMAC_Final v1_CMAC_Final
+#define CMAC_Init v1_CMAC_Init
+#define cmac_pkey_meth v1_cmac_pkey_meth
+#define CMAC_resume v1_CMAC_resume
+#define CMAC_Update v1_CMAC_Update
+#define CMS_add0_cert v1_CMS_add0_cert
+#define CMS_add0_CertificateChoices v1_CMS_add0_CertificateChoices
+#define CMS_add0_crl v1_CMS_add0_crl
+#define CMS_add0_recipient_key v1_CMS_add0_recipient_key
+#define CMS_add0_recipient_password v1_CMS_add0_recipient_password
+#define CMS_add0_RevocationInfoChoice v1_CMS_add0_RevocationInfoChoice
+#define CMS_add1_cert v1_CMS_add1_cert
+#define CMS_add1_crl v1_CMS_add1_crl
+#define CMS_add1_ReceiptRequest v1_CMS_add1_ReceiptRequest
+#define CMS_add1_recipient_cert v1_CMS_add1_recipient_cert
+#define CMS_add1_signer v1_CMS_add1_signer
+#define CMS_add_simple_smimecap v1_CMS_add_simple_smimecap
+#define CMS_add_smimecap v1_CMS_add_smimecap
+#define CMS_add_standard_smimecap v1_CMS_add_standard_smimecap
+#define CMS_Attributes_Sign_it v1_CMS_Attributes_Sign_it
+#define CMS_Attributes_Verify_it v1_CMS_Attributes_Verify_it
+#define CMS_CertificateChoices_it v1_CMS_CertificateChoices_it
+#define CMS_compress v1_CMS_compress
+#define cms_CompressedData_create v1_cms_CompressedData_create
+#define cms_CompressedData_init_bio v1_cms_CompressedData_init_bio
+#define CMS_CompressedData_it v1_CMS_CompressedData_it
+#define cms_content_bio v1_cms_content_bio
+#define CMS_ContentInfo_free v1_CMS_ContentInfo_free
+#define CMS_ContentInfo_it v1_CMS_ContentInfo_it
+#define CMS_ContentInfo_new v1_CMS_ContentInfo_new
+#define CMS_ContentInfo_print_ctx v1_CMS_ContentInfo_print_ctx
+#define CMS_data v1_CMS_data
+#define cms_Data_create v1_cms_Data_create
+#define CMS_data_create v1_CMS_data_create
+#define CMS_dataFinal v1_CMS_dataFinal
+#define CMS_dataInit v1_CMS_dataInit
+#define CMS_decrypt v1_CMS_decrypt
+#define CMS_decrypt_set1_key v1_CMS_decrypt_set1_key
+#define CMS_decrypt_set1_password v1_CMS_decrypt_set1_password
+#define CMS_decrypt_set1_pkey v1_CMS_decrypt_set1_pkey
+#define cms_DigestAlgorithm_find_ctx v1_cms_DigestAlgorithm_find_ctx
+#define cms_DigestAlgorithm_init_bio v1_cms_DigestAlgorithm_init_bio
+#define CMS_digest_create v1_CMS_digest_create
+#define cms_DigestedData_create v1_cms_DigestedData_create
+#define cms_DigestedData_do_final v1_cms_DigestedData_do_final
+#define cms_DigestedData_init_bio v1_cms_DigestedData_init_bio
+#define CMS_DigestedData_it v1_CMS_DigestedData_it
+#define CMS_digest_verify v1_CMS_digest_verify
+#define cms_encode_Receipt v1_cms_encode_Receipt
+#define CMS_encrypt v1_CMS_encrypt
+#define cms_EncryptedContent_init v1_cms_EncryptedContent_init
+#define cms_EncryptedContent_init_bio v1_cms_EncryptedContent_init_bio
+#define CMS_EncryptedData_decrypt v1_CMS_EncryptedData_decrypt
+#define CMS_EncryptedData_encrypt v1_CMS_EncryptedData_encrypt
+#define cms_EncryptedData_init_bio v1_cms_EncryptedData_init_bio
+#define CMS_EncryptedData_it v1_CMS_EncryptedData_it
+#define CMS_EncryptedData_set1_key v1_CMS_EncryptedData_set1_key
+#define cms_env_asn1_ctrl v1_cms_env_asn1_ctrl
+#define CMS_EnvelopedData_create v1_CMS_EnvelopedData_create
+#define cms_EnvelopedData_init_bio v1_cms_EnvelopedData_init_bio
+#define CMS_EnvelopedData_it v1_CMS_EnvelopedData_it
+#define CMS_final v1_CMS_final
+#define CMS_get0_content v1_CMS_get0_content
+#define CMS_get0_eContentType v1_CMS_get0_eContentType
+#define cms_get0_enveloped v1_cms_get0_enveloped
+#define CMS_get0_RecipientInfos v1_CMS_get0_RecipientInfos
+#define CMS_get0_SignerInfos v1_CMS_get0_SignerInfos
+#define CMS_get0_signers v1_CMS_get0_signers
+#define CMS_get0_type v1_CMS_get0_type
+#define CMS_get1_certs v1_CMS_get1_certs
+#define CMS_get1_crls v1_CMS_get1_crls
+#define CMS_get1_ReceiptRequest v1_CMS_get1_ReceiptRequest
+#define cms_ias_cert_cmp v1_cms_ias_cert_cmp
+#define CMS_is_detached v1_CMS_is_detached
+#define CMS_IssuerAndSerialNumber_it v1_CMS_IssuerAndSerialNumber_it
+#define CMS_KEKRecipientInfo_it v1_CMS_KEKRecipientInfo_it
+#define CMS_KeyAgreeRecipientInfo_it v1_CMS_KeyAgreeRecipientInfo_it
+#define cms_keyid_cert_cmp v1_cms_keyid_cert_cmp
+#define CMS_KeyTransRecipientInfo_it v1_CMS_KeyTransRecipientInfo_it
+#define cms_msgSigDigest_add1 v1_cms_msgSigDigest_add1
+#define CMS_OriginatorPublicKey_it v1_CMS_OriginatorPublicKey_it
+#define CMS_OtherKeyAttribute_it v1_CMS_OtherKeyAttribute_it
+#define CMS_PasswordRecipientInfo_it v1_CMS_PasswordRecipientInfo_it
+#define cms_pkey_get_ri_type v1_cms_pkey_get_ri_type
+#define CMS_Receipt_it v1_CMS_Receipt_it
+#define CMS_ReceiptRequest_create0 v1_CMS_ReceiptRequest_create0
+#define CMS_ReceiptRequest_free v1_CMS_ReceiptRequest_free
+#define CMS_ReceiptRequest_get0_values v1_CMS_ReceiptRequest_get0_values
+#define CMS_ReceiptRequest_it v1_CMS_ReceiptRequest_it
+#define CMS_ReceiptRequest_new v1_CMS_ReceiptRequest_new
+#define cms_Receipt_verify v1_cms_Receipt_verify
+#define CMS_RecipientEncryptedKey_cert_cmp v1_CMS_RecipientEncryptedKey_cert_cmp
+#define CMS_RecipientEncryptedKey_get0_id v1_CMS_RecipientEncryptedKey_get0_id
+#define CMS_RecipientEncryptedKey_it v1_CMS_RecipientEncryptedKey_it
+#define CMS_RecipientInfo_decrypt v1_CMS_RecipientInfo_decrypt
+#define CMS_RecipientInfo_encrypt v1_CMS_RecipientInfo_encrypt
+#define CMS_RecipientInfo_get0_pkey_ctx v1_CMS_RecipientInfo_get0_pkey_ctx
+#define CMS_RecipientInfo_it v1_CMS_RecipientInfo_it
+#define CMS_RecipientInfo_kari_decrypt v1_CMS_RecipientInfo_kari_decrypt
+#define cms_RecipientInfo_kari_encrypt v1_cms_RecipientInfo_kari_encrypt
+#define CMS_RecipientInfo_kari_get0_alg v1_CMS_RecipientInfo_kari_get0_alg
+#define CMS_RecipientInfo_kari_get0_ctx v1_CMS_RecipientInfo_kari_get0_ctx
+#define CMS_RecipientInfo_kari_get0_orig_id v1_CMS_RecipientInfo_kari_get0_orig_id
+#define CMS_RecipientInfo_kari_get0_reks v1_CMS_RecipientInfo_kari_get0_reks
+#define cms_RecipientInfo_kari_init v1_cms_RecipientInfo_kari_init
+#define CMS_RecipientInfo_kari_orig_id_cmp v1_CMS_RecipientInfo_kari_orig_id_cmp
+#define CMS_RecipientInfo_kari_set0_pkey v1_CMS_RecipientInfo_kari_set0_pkey
+#define CMS_RecipientInfo_kekri_get0_id v1_CMS_RecipientInfo_kekri_get0_id
+#define CMS_RecipientInfo_kekri_id_cmp v1_CMS_RecipientInfo_kekri_id_cmp
+#define CMS_RecipientInfo_ktri_cert_cmp v1_CMS_RecipientInfo_ktri_cert_cmp
+#define CMS_RecipientInfo_ktri_get0_algs v1_CMS_RecipientInfo_ktri_get0_algs
+#define CMS_RecipientInfo_ktri_get0_signer_id v1_CMS_RecipientInfo_ktri_get0_signer_id
+#define cms_RecipientInfo_pwri_crypt v1_cms_RecipientInfo_pwri_crypt
+#define CMS_RecipientInfo_set0_key v1_CMS_RecipientInfo_set0_key
+#define CMS_RecipientInfo_set0_password v1_CMS_RecipientInfo_set0_password
+#define CMS_RecipientInfo_set0_pkey v1_CMS_RecipientInfo_set0_pkey
+#define CMS_RecipientInfo_type v1_CMS_RecipientInfo_type
+#define CMS_RecipientKeyIdentifier_it v1_CMS_RecipientKeyIdentifier_it
+#define CMS_RevocationInfoChoice_it v1_CMS_RevocationInfoChoice_it
+#define CMS_set1_eContentType v1_CMS_set1_eContentType
+#define cms_set1_ias v1_cms_set1_ias
+#define cms_set1_keyid v1_cms_set1_keyid
+#define cms_set1_SignerIdentifier v1_cms_set1_SignerIdentifier
+#define CMS_set1_signers_certs v1_CMS_set1_signers_certs
+#define CMS_set_detached v1_CMS_set_detached
+#define CMS_SharedInfo_encode v1_CMS_SharedInfo_encode
+#define CMS_si_check_attributes v1_CMS_si_check_attributes
+#define CMS_sign v1_CMS_sign
+#define CMS_signed_add1_attr v1_CMS_signed_add1_attr
+#define CMS_signed_add1_attr_by_NID v1_CMS_signed_add1_attr_by_NID
+#define CMS_signed_add1_attr_by_OBJ v1_CMS_signed_add1_attr_by_OBJ
+#define CMS_signed_add1_attr_by_txt v1_CMS_signed_add1_attr_by_txt
+#define cms_SignedData_final v1_cms_SignedData_final
+#define CMS_SignedData_init v1_CMS_SignedData_init
+#define cms_SignedData_init_bio v1_cms_SignedData_init_bio
+#define CMS_SignedData_it v1_CMS_SignedData_it
+#define CMS_signed_delete_attr v1_CMS_signed_delete_attr
+#define CMS_signed_get0_data_by_OBJ v1_CMS_signed_get0_data_by_OBJ
+#define CMS_signed_get_attr v1_CMS_signed_get_attr
+#define CMS_signed_get_attr_by_NID v1_CMS_signed_get_attr_by_NID
+#define CMS_signed_get_attr_by_OBJ v1_CMS_signed_get_attr_by_OBJ
+#define CMS_signed_get_attr_count v1_CMS_signed_get_attr_count
+#define cms_SignerIdentifier_cert_cmp v1_cms_SignerIdentifier_cert_cmp
+#define cms_SignerIdentifier_get0_signer_id v1_cms_SignerIdentifier_get0_signer_id
+#define CMS_SignerInfo_cert_cmp v1_CMS_SignerInfo_cert_cmp
+#define CMS_SignerInfo_get0_algs v1_CMS_SignerInfo_get0_algs
+#define CMS_SignerInfo_get0_md_ctx v1_CMS_SignerInfo_get0_md_ctx
+#define CMS_SignerInfo_get0_pkey_ctx v1_CMS_SignerInfo_get0_pkey_ctx
+#define CMS_SignerInfo_get0_signature v1_CMS_SignerInfo_get0_signature
+#define CMS_SignerInfo_get0_signer_id v1_CMS_SignerInfo_get0_signer_id
+#define CMS_SignerInfo_it v1_CMS_SignerInfo_it
+#define CMS_SignerInfo_set1_signer_cert v1_CMS_SignerInfo_set1_signer_cert
+#define CMS_SignerInfo_sign v1_CMS_SignerInfo_sign
+#define CMS_SignerInfo_verify v1_CMS_SignerInfo_verify
+#define CMS_SignerInfo_verify_content v1_CMS_SignerInfo_verify_content
+#define CMS_sign_receipt v1_CMS_sign_receipt
+#define CMS_stream v1_CMS_stream
+#define CMS_uncompress v1_CMS_uncompress
+#define CMS_unsigned_add1_attr v1_CMS_unsigned_add1_attr
+#define CMS_unsigned_add1_attr_by_NID v1_CMS_unsigned_add1_attr_by_NID
+#define CMS_unsigned_add1_attr_by_OBJ v1_CMS_unsigned_add1_attr_by_OBJ
+#define CMS_unsigned_add1_attr_by_txt v1_CMS_unsigned_add1_attr_by_txt
+#define CMS_unsigned_delete_attr v1_CMS_unsigned_delete_attr
+#define CMS_unsigned_get0_data_by_OBJ v1_CMS_unsigned_get0_data_by_OBJ
+#define CMS_unsigned_get_attr v1_CMS_unsigned_get_attr
+#define CMS_unsigned_get_attr_by_NID v1_CMS_unsigned_get_attr_by_NID
+#define CMS_unsigned_get_attr_by_OBJ v1_CMS_unsigned_get_attr_by_OBJ
+#define CMS_unsigned_get_attr_count v1_CMS_unsigned_get_attr_count
+#define CMS_verify v1_CMS_verify
+#define CMS_verify_receipt v1_CMS_verify_receipt
+#define COMP_compress_block v1_COMP_compress_block
+#define COMP_CTX_free v1_COMP_CTX_free
+#define COMP_CTX_get_method v1_COMP_CTX_get_method
+#define COMP_CTX_get_type v1_COMP_CTX_get_type
+#define COMP_CTX_new v1_COMP_CTX_new
+#define COMP_expand_block v1_COMP_expand_block
+#define COMP_get_name v1_COMP_get_name
+#define COMP_get_type v1_COMP_get_type
+#define COMP_zlib v1_COMP_zlib
+#define comp_zlib_cleanup_int v1_comp_zlib_cleanup_int
+#define conf_add_ssl_module v1_conf_add_ssl_module
+#define _CONF_add_string v1__CONF_add_string
+#define CONF_dump_bio v1_CONF_dump_bio
+#define CONF_dump_fp v1_CONF_dump_fp
+#define CONF_free v1_CONF_free
+#define _CONF_free_data v1__CONF_free_data
+#define CONF_get1_default_config_file v1_CONF_get1_default_config_file
+#define CONF_get_number v1_CONF_get_number
+#define CONF_get_section v1_CONF_get_section
+#define _CONF_get_section v1__CONF_get_section
+#define _CONF_get_section_values v1__CONF_get_section_values
+#define CONF_get_string v1_CONF_get_string
+#define _CONF_get_string v1__CONF_get_string
+#define CONF_imodule_get_flags v1_CONF_imodule_get_flags
+#define CONF_imodule_get_module v1_CONF_imodule_get_module
+#define CONF_imodule_get_name v1_CONF_imodule_get_name
+#define CONF_imodule_get_usr_data v1_CONF_imodule_get_usr_data
+#define CONF_imodule_get_value v1_CONF_imodule_get_value
+#define CONF_imodule_set_flags v1_CONF_imodule_set_flags
+#define CONF_imodule_set_usr_data v1_CONF_imodule_set_usr_data
+#define CONF_load v1_CONF_load
+#define CONF_load_bio v1_CONF_load_bio
+#define CONF_load_fp v1_CONF_load_fp
+#define CONF_module_add v1_CONF_module_add
+#define CONF_module_get_usr_data v1_CONF_module_get_usr_data
+#define CONF_module_set_usr_data v1_CONF_module_set_usr_data
+#define CONF_modules_finish v1_CONF_modules_finish
+#define conf_modules_free_int v1_conf_modules_free_int
+#define CONF_modules_load v1_CONF_modules_load
+#define CONF_modules_load_file v1_CONF_modules_load_file
+#define CONF_modules_unload v1_CONF_modules_unload
+#define _CONF_new_data v1__CONF_new_data
+#define _CONF_new_section v1__CONF_new_section
+#define CONF_parse_list v1_CONF_parse_list
+#define CONF_set_default_method v1_CONF_set_default_method
+#define CONF_set_nconf v1_CONF_set_nconf
+#define conf_ssl_get v1_conf_ssl_get
+#define conf_ssl_get_cmd v1_conf_ssl_get_cmd
+#define conf_ssl_name_find v1_conf_ssl_name_find
+#define construct_ca_names v1_construct_ca_names
+#define construct_key_exchange_tbs v1_construct_key_exchange_tbs
+#define create_synthetic_message_hash v1_create_synthetic_message_hash
+#define CRL_DIST_POINTS_free v1_CRL_DIST_POINTS_free
+#define CRL_DIST_POINTS_it v1_CRL_DIST_POINTS_it
+#define CRL_DIST_POINTS_new v1_CRL_DIST_POINTS_new
+#define CRYPTO_128_unwrap v1_CRYPTO_128_unwrap
+#define CRYPTO_128_unwrap_pad v1_CRYPTO_128_unwrap_pad
+#define CRYPTO_128_wrap v1_CRYPTO_128_wrap
+#define CRYPTO_128_wrap_pad v1_CRYPTO_128_wrap_pad
+#define CRYPTO_atomic_add v1_CRYPTO_atomic_add
+#define CRYPTO_cbc128_decrypt v1_CRYPTO_cbc128_decrypt
+#define CRYPTO_cbc128_encrypt v1_CRYPTO_cbc128_encrypt
+#define CRYPTO_ccm128_aad v1_CRYPTO_ccm128_aad
+#define CRYPTO_ccm128_decrypt v1_CRYPTO_ccm128_decrypt
+#define CRYPTO_ccm128_decrypt_ccm64 v1_CRYPTO_ccm128_decrypt_ccm64
+#define CRYPTO_ccm128_encrypt v1_CRYPTO_ccm128_encrypt
+#define CRYPTO_ccm128_encrypt_ccm64 v1_CRYPTO_ccm128_encrypt_ccm64
+#define CRYPTO_ccm128_init v1_CRYPTO_ccm128_init
+#define CRYPTO_ccm128_setiv v1_CRYPTO_ccm128_setiv
+#define CRYPTO_ccm128_tag v1_CRYPTO_ccm128_tag
+#define CRYPTO_cfb128_1_encrypt v1_CRYPTO_cfb128_1_encrypt
+#define CRYPTO_cfb128_8_encrypt v1_CRYPTO_cfb128_8_encrypt
+#define CRYPTO_cfb128_encrypt v1_CRYPTO_cfb128_encrypt
+#define crypto_cleanup_all_ex_data_int v1_crypto_cleanup_all_ex_data_int
+#define CRYPTO_clear_free v1_CRYPTO_clear_free
+#define CRYPTO_clear_realloc v1_CRYPTO_clear_realloc
+#define CRYPTO_ctr128_encrypt v1_CRYPTO_ctr128_encrypt
+#define CRYPTO_ctr128_encrypt_ctr32 v1_CRYPTO_ctr128_encrypt_ctr32
+#define CRYPTO_cts128_decrypt v1_CRYPTO_cts128_decrypt
+#define CRYPTO_cts128_decrypt_block v1_CRYPTO_cts128_decrypt_block
+#define CRYPTO_cts128_encrypt v1_CRYPTO_cts128_encrypt
+#define CRYPTO_cts128_encrypt_block v1_CRYPTO_cts128_encrypt_block
+#define CRYPTO_dup_ex_data v1_CRYPTO_dup_ex_data
+#define CRYPTO_free v1_CRYPTO_free
+#define CRYPTO_free_ex_data v1_CRYPTO_free_ex_data
+#define CRYPTO_free_ex_index v1_CRYPTO_free_ex_index
+#define CRYPTO_gcm128_aad v1_CRYPTO_gcm128_aad
+#define CRYPTO_gcm128_decrypt v1_CRYPTO_gcm128_decrypt
+#define CRYPTO_gcm128_decrypt_ctr32 v1_CRYPTO_gcm128_decrypt_ctr32
+#define CRYPTO_gcm128_encrypt v1_CRYPTO_gcm128_encrypt
+#define CRYPTO_gcm128_encrypt_ctr32 v1_CRYPTO_gcm128_encrypt_ctr32
+#define CRYPTO_gcm128_finish v1_CRYPTO_gcm128_finish
+#define CRYPTO_gcm128_init v1_CRYPTO_gcm128_init
+#define CRYPTO_gcm128_new v1_CRYPTO_gcm128_new
+#define CRYPTO_gcm128_release v1_CRYPTO_gcm128_release
+#define CRYPTO_gcm128_setiv v1_CRYPTO_gcm128_setiv
+#define CRYPTO_gcm128_tag v1_CRYPTO_gcm128_tag
+#define CRYPTO_get_ex_data v1_CRYPTO_get_ex_data
+#define CRYPTO_get_ex_new_index v1_CRYPTO_get_ex_new_index
+#define CRYPTO_get_mem_functions v1_CRYPTO_get_mem_functions
+#define CRYPTO_malloc v1_CRYPTO_malloc
+#define CRYPTO_memcmp v1_CRYPTO_memcmp
+#define CRYPTO_mem_ctrl v1_CRYPTO_mem_ctrl
+#define CRYPTO_memdup v1_CRYPTO_memdup
+#define CRYPTO_new_ex_data v1_CRYPTO_new_ex_data
+#define CRYPTO_nistcts128_decrypt v1_CRYPTO_nistcts128_decrypt
+#define CRYPTO_nistcts128_decrypt_block v1_CRYPTO_nistcts128_decrypt_block
+#define CRYPTO_nistcts128_encrypt v1_CRYPTO_nistcts128_encrypt
+#define CRYPTO_nistcts128_encrypt_block v1_CRYPTO_nistcts128_encrypt_block
+#define CRYPTO_ocb128_aad v1_CRYPTO_ocb128_aad
+#define CRYPTO_ocb128_cleanup v1_CRYPTO_ocb128_cleanup
+#define CRYPTO_ocb128_copy_ctx v1_CRYPTO_ocb128_copy_ctx
+#define CRYPTO_ocb128_decrypt v1_CRYPTO_ocb128_decrypt
+#define CRYPTO_ocb128_encrypt v1_CRYPTO_ocb128_encrypt
+#define CRYPTO_ocb128_finish v1_CRYPTO_ocb128_finish
+#define CRYPTO_ocb128_init v1_CRYPTO_ocb128_init
+#define CRYPTO_ocb128_new v1_CRYPTO_ocb128_new
+#define CRYPTO_ocb128_setiv v1_CRYPTO_ocb128_setiv
+#define CRYPTO_ocb128_tag v1_CRYPTO_ocb128_tag
+#define CRYPTO_ofb128_encrypt v1_CRYPTO_ofb128_encrypt
+#define CRYPTO_realloc v1_CRYPTO_realloc
+#define CRYPTO_secure_actual_size v1_CRYPTO_secure_actual_size
+#define CRYPTO_secure_allocated v1_CRYPTO_secure_allocated
+#define CRYPTO_secure_clear_free v1_CRYPTO_secure_clear_free
+#define CRYPTO_secure_free v1_CRYPTO_secure_free
+#define CRYPTO_secure_malloc v1_CRYPTO_secure_malloc
+#define CRYPTO_secure_malloc_done v1_CRYPTO_secure_malloc_done
+#define CRYPTO_secure_malloc_init v1_CRYPTO_secure_malloc_init
+#define CRYPTO_secure_malloc_initialized v1_CRYPTO_secure_malloc_initialized
+#define CRYPTO_secure_used v1_CRYPTO_secure_used
+#define CRYPTO_secure_zalloc v1_CRYPTO_secure_zalloc
+#define CRYPTO_set_ex_data v1_CRYPTO_set_ex_data
+#define CRYPTO_set_mem_debug v1_CRYPTO_set_mem_debug
+#define CRYPTO_set_mem_functions v1_CRYPTO_set_mem_functions
+#define CRYPTO_strdup v1_CRYPTO_strdup
+#define CRYPTO_strndup v1_CRYPTO_strndup
+#define CRYPTO_THREAD_cleanup_local v1_CRYPTO_THREAD_cleanup_local
+#define CRYPTO_THREAD_compare_id v1_CRYPTO_THREAD_compare_id
+#define CRYPTO_THREAD_get_current_id v1_CRYPTO_THREAD_get_current_id
+#define CRYPTO_THREAD_get_local v1_CRYPTO_THREAD_get_local
+#define CRYPTO_THREAD_init_local v1_CRYPTO_THREAD_init_local
+#define CRYPTO_THREAD_lock_free v1_CRYPTO_THREAD_lock_free
+#define CRYPTO_THREAD_lock_new v1_CRYPTO_THREAD_lock_new
+#define CRYPTO_THREAD_read_lock v1_CRYPTO_THREAD_read_lock
+#define CRYPTO_THREAD_run_once v1_CRYPTO_THREAD_run_once
+#define CRYPTO_THREAD_set_local v1_CRYPTO_THREAD_set_local
+#define CRYPTO_THREAD_unlock v1_CRYPTO_THREAD_unlock
+#define CRYPTO_THREAD_write_lock v1_CRYPTO_THREAD_write_lock
+#define CRYPTO_xts128_encrypt v1_CRYPTO_xts128_encrypt
+#define CRYPTO_zalloc v1_CRYPTO_zalloc
+#define CTLOG_free v1_CTLOG_free
+#define CTLOG_get0_log_id v1_CTLOG_get0_log_id
+#define CTLOG_get0_name v1_CTLOG_get0_name
+#define CTLOG_get0_public_key v1_CTLOG_get0_public_key
+#define CTLOG_new v1_CTLOG_new
+#define CTLOG_new_from_base64 v1_CTLOG_new_from_base64
+#define CTLOG_STORE_free v1_CTLOG_STORE_free
+#define CTLOG_STORE_get0_log_by_id v1_CTLOG_STORE_get0_log_by_id
+#define CTLOG_STORE_load_default_file v1_CTLOG_STORE_load_default_file
+#define CTLOG_STORE_load_file v1_CTLOG_STORE_load_file
+#define CTLOG_STORE_new v1_CTLOG_STORE_new
+#define CT_POLICY_EVAL_CTX_free v1_CT_POLICY_EVAL_CTX_free
+#define CT_POLICY_EVAL_CTX_get0_cert v1_CT_POLICY_EVAL_CTX_get0_cert
+#define CT_POLICY_EVAL_CTX_get0_issuer v1_CT_POLICY_EVAL_CTX_get0_issuer
+#define CT_POLICY_EVAL_CTX_get0_log_store v1_CT_POLICY_EVAL_CTX_get0_log_store
+#define CT_POLICY_EVAL_CTX_get_time v1_CT_POLICY_EVAL_CTX_get_time
+#define CT_POLICY_EVAL_CTX_new v1_CT_POLICY_EVAL_CTX_new
+#define CT_POLICY_EVAL_CTX_set1_cert v1_CT_POLICY_EVAL_CTX_set1_cert
+#define CT_POLICY_EVAL_CTX_set1_issuer v1_CT_POLICY_EVAL_CTX_set1_issuer
+#define CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE v1_CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE
+#define CT_POLICY_EVAL_CTX_set_time v1_CT_POLICY_EVAL_CTX_set_time
+#define curve448_base_double_scalarmul_non_secret v1_curve448_base_double_scalarmul_non_secret
+#define curve448_point_decode_like_eddsa_and_mul_by_ratio v1_curve448_point_decode_like_eddsa_and_mul_by_ratio
+#define curve448_point_destroy v1_curve448_point_destroy
+#define curve448_point_double v1_curve448_point_double
+#define curve448_point_eq v1_curve448_point_eq
+#define curve448_point_identity v1_curve448_point_identity
+#define curve448_point_mul_by_ratio_and_encode_like_eddsa v1_curve448_point_mul_by_ratio_and_encode_like_eddsa
+#define curve448_point_mul_by_ratio_and_encode_like_x448 v1_curve448_point_mul_by_ratio_and_encode_like_x448
+#define curve448_point_valid v1_curve448_point_valid
+#define curve448_precomputed_base v1_curve448_precomputed_base
+#define curve448_precomputed_scalarmul v1_curve448_precomputed_scalarmul
+#define curve448_scalar_add v1_curve448_scalar_add
+#define curve448_scalar_decode v1_curve448_scalar_decode
+#define curve448_scalar_decode_long v1_curve448_scalar_decode_long
+#define curve448_scalar_destroy v1_curve448_scalar_destroy
+#define curve448_scalar_encode v1_curve448_scalar_encode
+#define curve448_scalar_halve v1_curve448_scalar_halve
+#define curve448_scalar_mul v1_curve448_scalar_mul
+#define curve448_scalar_one v1_curve448_scalar_one
+#define curve448_scalar_sub v1_curve448_scalar_sub
+#define curve448_scalar_zero v1_curve448_scalar_zero
+#define curve448_wnaf_base v1_curve448_wnaf_base
+#define custom_ext_add v1_custom_ext_add
+#define custom_ext_find v1_custom_ext_find
+#define custom_ext_init v1_custom_ext_init
+#define custom_ext_parse v1_custom_ext_parse
+#define custom_exts_copy v1_custom_exts_copy
+#define custom_exts_copy_flags v1_custom_exts_copy_flags
+#define custom_exts_free v1_custom_exts_free
+#define d2i_ACCESS_DESCRIPTION v1_d2i_ACCESS_DESCRIPTION
+#define d2i_ADMISSIONS v1_d2i_ADMISSIONS
+#define d2i_ADMISSION_SYNTAX v1_d2i_ADMISSION_SYNTAX
+#define d2i_ASIdentifierChoice v1_d2i_ASIdentifierChoice
+#define d2i_ASIdentifiers v1_d2i_ASIdentifiers
+#define d2i_ASIdOrRange v1_d2i_ASIdOrRange
+#define d2i_ASN1_BIT_STRING v1_d2i_ASN1_BIT_STRING
+#define d2i_ASN1_BMPSTRING v1_d2i_ASN1_BMPSTRING
+#define d2i_ASN1_ENUMERATED v1_d2i_ASN1_ENUMERATED
+#define d2i_ASN1_GENERALIZEDTIME v1_d2i_ASN1_GENERALIZEDTIME
+#define d2i_ASN1_GENERALSTRING v1_d2i_ASN1_GENERALSTRING
+#define d2i_ASN1_IA5STRING v1_d2i_ASN1_IA5STRING
+#define d2i_ASN1_INTEGER v1_d2i_ASN1_INTEGER
+#define d2i_ASN1_NULL v1_d2i_ASN1_NULL
+#define d2i_ASN1_OBJECT v1_d2i_ASN1_OBJECT
+#define d2i_ASN1_OCTET_STRING v1_d2i_ASN1_OCTET_STRING
+#define d2i_ASN1_PRINTABLE v1_d2i_ASN1_PRINTABLE
+#define d2i_ASN1_PRINTABLESTRING v1_d2i_ASN1_PRINTABLESTRING
+#define d2i_ASN1_SEQUENCE_ANY v1_d2i_ASN1_SEQUENCE_ANY
+#define d2i_ASN1_SET_ANY v1_d2i_ASN1_SET_ANY
+#define d2i_ASN1_T61STRING v1_d2i_ASN1_T61STRING
+#define d2i_ASN1_TIME v1_d2i_ASN1_TIME
+#define d2i_ASN1_TYPE v1_d2i_ASN1_TYPE
+#define d2i_ASN1_UINTEGER v1_d2i_ASN1_UINTEGER
+#define d2i_ASN1_UNIVERSALSTRING v1_d2i_ASN1_UNIVERSALSTRING
+#define d2i_ASN1_UTCTIME v1_d2i_ASN1_UTCTIME
+#define d2i_ASN1_UTF8STRING v1_d2i_ASN1_UTF8STRING
+#define d2i_ASN1_VISIBLESTRING v1_d2i_ASN1_VISIBLESTRING
+#define d2i_ASRange v1_d2i_ASRange
+#define d2i_AUTHORITY_INFO_ACCESS v1_d2i_AUTHORITY_INFO_ACCESS
+#define d2i_AUTHORITY_KEYID v1_d2i_AUTHORITY_KEYID
+#define d2i_AutoPrivateKey v1_d2i_AutoPrivateKey
+#define d2i_BASIC_CONSTRAINTS v1_d2i_BASIC_CONSTRAINTS
+#define d2i_CERTIFICATEPOLICIES v1_d2i_CERTIFICATEPOLICIES
+#define d2i_CMS_bio v1_d2i_CMS_bio
+#define d2i_CMS_ContentInfo v1_d2i_CMS_ContentInfo
+#define d2i_CMS_ReceiptRequest v1_d2i_CMS_ReceiptRequest
+#define d2i_CRL_DIST_POINTS v1_d2i_CRL_DIST_POINTS
+#define d2i_DHparams v1_d2i_DHparams
+#define d2i_DHxparams v1_d2i_DHxparams
+#define d2i_DIRECTORYSTRING v1_d2i_DIRECTORYSTRING
+#define d2i_DISPLAYTEXT v1_d2i_DISPLAYTEXT
+#define d2i_DIST_POINT v1_d2i_DIST_POINT
+#define d2i_DIST_POINT_NAME v1_d2i_DIST_POINT_NAME
+#define d2i_DSAparams v1_d2i_DSAparams
+#define d2i_DSAPrivateKey v1_d2i_DSAPrivateKey
+#define d2i_DSAPrivateKey_bio v1_d2i_DSAPrivateKey_bio
+#define d2i_DSAPrivateKey_fp v1_d2i_DSAPrivateKey_fp
+#define d2i_DSA_PUBKEY v1_d2i_DSA_PUBKEY
+#define d2i_DSA_PUBKEY_bio v1_d2i_DSA_PUBKEY_bio
+#define d2i_DSA_PUBKEY_fp v1_d2i_DSA_PUBKEY_fp
+#define d2i_DSAPublicKey v1_d2i_DSAPublicKey
+#define d2i_DSA_SIG v1_d2i_DSA_SIG
+#define d2i_ECDSA_SIG v1_d2i_ECDSA_SIG
+#define d2i_ECParameters v1_d2i_ECParameters
+#define d2i_ECPKParameters v1_d2i_ECPKParameters
+#define d2i_ECPKPARAMETERS v1_d2i_ECPKPARAMETERS
+#define d2i_ECPrivateKey v1_d2i_ECPrivateKey
+#define d2i_EC_PRIVATEKEY v1_d2i_EC_PRIVATEKEY
+#define d2i_ECPrivateKey_bio v1_d2i_ECPrivateKey_bio
+#define d2i_ECPrivateKey_fp v1_d2i_ECPrivateKey_fp
+#define d2i_EC_PUBKEY v1_d2i_EC_PUBKEY
+#define d2i_EC_PUBKEY_bio v1_d2i_EC_PUBKEY_bio
+#define d2i_EC_PUBKEY_fp v1_d2i_EC_PUBKEY_fp
+#define d2i_EDIPARTYNAME v1_d2i_EDIPARTYNAME
+#define d2i_ESS_CERT_ID v1_d2i_ESS_CERT_ID
+#define d2i_ESS_CERT_ID_V2 v1_d2i_ESS_CERT_ID_V2
+#define d2i_ESS_ISSUER_SERIAL v1_d2i_ESS_ISSUER_SERIAL
+#define d2i_ESS_SIGNING_CERT v1_d2i_ESS_SIGNING_CERT
+#define d2i_ESS_SIGNING_CERT_V2 v1_d2i_ESS_SIGNING_CERT_V2
+#define d2i_EXTENDED_KEY_USAGE v1_d2i_EXTENDED_KEY_USAGE
+#define d2i_GENERAL_NAME v1_d2i_GENERAL_NAME
+#define d2i_GENERAL_NAMES v1_d2i_GENERAL_NAMES
+#define d2i_GOST_KX_MESSAGE v1_d2i_GOST_KX_MESSAGE
+#define d2i_int_dhx v1_d2i_int_dhx
+#define d2i_IPAddressChoice v1_d2i_IPAddressChoice
+#define d2i_IPAddressFamily v1_d2i_IPAddressFamily
+#define d2i_IPAddressOrRange v1_d2i_IPAddressOrRange
+#define d2i_IPAddressRange v1_d2i_IPAddressRange
+#define d2i_ISSUING_DIST_POINT v1_d2i_ISSUING_DIST_POINT
+#define d2i_NAMING_AUTHORITY v1_d2i_NAMING_AUTHORITY
+#define d2i_NETSCAPE_CERT_SEQUENCE v1_d2i_NETSCAPE_CERT_SEQUENCE
+#define d2i_NETSCAPE_ENCRYPTED_PKEY v1_d2i_NETSCAPE_ENCRYPTED_PKEY
+#define d2i_NETSCAPE_PKEY v1_d2i_NETSCAPE_PKEY
+#define d2i_NETSCAPE_SPKAC v1_d2i_NETSCAPE_SPKAC
+#define d2i_NETSCAPE_SPKI v1_d2i_NETSCAPE_SPKI
+#define d2i_NOTICEREF v1_d2i_NOTICEREF
+#define d2i_OCSP_BASICRESP v1_d2i_OCSP_BASICRESP
+#define d2i_OCSP_CERTID v1_d2i_OCSP_CERTID
+#define d2i_OCSP_CERTSTATUS v1_d2i_OCSP_CERTSTATUS
+#define d2i_OCSP_CRLID v1_d2i_OCSP_CRLID
+#define d2i_OCSP_ONEREQ v1_d2i_OCSP_ONEREQ
+#define d2i_OCSP_REQINFO v1_d2i_OCSP_REQINFO
+#define d2i_OCSP_REQUEST v1_d2i_OCSP_REQUEST
+#define d2i_OCSP_RESPBYTES v1_d2i_OCSP_RESPBYTES
+#define d2i_OCSP_RESPDATA v1_d2i_OCSP_RESPDATA
+#define d2i_OCSP_RESPID v1_d2i_OCSP_RESPID
+#define d2i_OCSP_RESPONSE v1_d2i_OCSP_RESPONSE
+#define d2i_OCSP_REVOKEDINFO v1_d2i_OCSP_REVOKEDINFO
+#define d2i_OCSP_SERVICELOC v1_d2i_OCSP_SERVICELOC
+#define d2i_OCSP_SIGNATURE v1_d2i_OCSP_SIGNATURE
+#define d2i_OCSP_SINGLERESP v1_d2i_OCSP_SINGLERESP
+#define d2i_OTHERNAME v1_d2i_OTHERNAME
+#define d2i_PBE2PARAM v1_d2i_PBE2PARAM
+#define d2i_PBEPARAM v1_d2i_PBEPARAM
+#define d2i_PBKDF2PARAM v1_d2i_PBKDF2PARAM
+#define d2i_PKCS12 v1_d2i_PKCS12
+#define d2i_PKCS12_BAGS v1_d2i_PKCS12_BAGS
+#define d2i_PKCS12_bio v1_d2i_PKCS12_bio
+#define d2i_PKCS12_fp v1_d2i_PKCS12_fp
+#define d2i_PKCS12_MAC_DATA v1_d2i_PKCS12_MAC_DATA
+#define d2i_PKCS12_SAFEBAG v1_d2i_PKCS12_SAFEBAG
+#define d2i_PKCS7 v1_d2i_PKCS7
+#define d2i_PKCS7_bio v1_d2i_PKCS7_bio
+#define d2i_PKCS7_DIGEST v1_d2i_PKCS7_DIGEST
+#define d2i_PKCS7_ENC_CONTENT v1_d2i_PKCS7_ENC_CONTENT
+#define d2i_PKCS7_ENCRYPT v1_d2i_PKCS7_ENCRYPT
+#define d2i_PKCS7_ENVELOPE v1_d2i_PKCS7_ENVELOPE
+#define d2i_PKCS7_fp v1_d2i_PKCS7_fp
+#define d2i_PKCS7_ISSUER_AND_SERIAL v1_d2i_PKCS7_ISSUER_AND_SERIAL
+#define d2i_PKCS7_RECIP_INFO v1_d2i_PKCS7_RECIP_INFO
+#define d2i_PKCS7_SIGNED v1_d2i_PKCS7_SIGNED
+#define d2i_PKCS7_SIGN_ENVELOPE v1_d2i_PKCS7_SIGN_ENVELOPE
+#define d2i_PKCS7_SIGNER_INFO v1_d2i_PKCS7_SIGNER_INFO
+#define d2i_PKCS8_bio v1_d2i_PKCS8_bio
+#define d2i_PKCS8_fp v1_d2i_PKCS8_fp
+#define d2i_PKCS8PrivateKey_bio v1_d2i_PKCS8PrivateKey_bio
+#define d2i_PKCS8PrivateKey_fp v1_d2i_PKCS8PrivateKey_fp
+#define d2i_PKCS8_PRIV_KEY_INFO v1_d2i_PKCS8_PRIV_KEY_INFO
+#define d2i_PKCS8_PRIV_KEY_INFO_bio v1_d2i_PKCS8_PRIV_KEY_INFO_bio
+#define d2i_PKCS8_PRIV_KEY_INFO_fp v1_d2i_PKCS8_PRIV_KEY_INFO_fp
+#define d2i_PKEY_USAGE_PERIOD v1_d2i_PKEY_USAGE_PERIOD
+#define d2i_POLICYINFO v1_d2i_POLICYINFO
+#define d2i_POLICYQUALINFO v1_d2i_POLICYQUALINFO
+#define d2i_PrivateKey v1_d2i_PrivateKey
+#define d2i_PrivateKey_bio v1_d2i_PrivateKey_bio
+#define d2i_PrivateKey_fp v1_d2i_PrivateKey_fp
+#define d2i_PROFESSION_INFO v1_d2i_PROFESSION_INFO
+#define d2i_PROXY_CERT_INFO_EXTENSION v1_d2i_PROXY_CERT_INFO_EXTENSION
+#define d2i_PROXY_POLICY v1_d2i_PROXY_POLICY
+#define d2i_PUBKEY v1_d2i_PUBKEY
+#define d2i_PUBKEY_bio v1_d2i_PUBKEY_bio
+#define d2i_PUBKEY_fp v1_d2i_PUBKEY_fp
+#define d2i_PublicKey v1_d2i_PublicKey
+#define d2i_RSA_OAEP_PARAMS v1_d2i_RSA_OAEP_PARAMS
+#define d2i_RSAPrivateKey v1_d2i_RSAPrivateKey
+#define d2i_RSAPrivateKey_bio v1_d2i_RSAPrivateKey_bio
+#define d2i_RSAPrivateKey_fp v1_d2i_RSAPrivateKey_fp
+#define d2i_RSA_PSS_PARAMS v1_d2i_RSA_PSS_PARAMS
+#define d2i_RSA_PUBKEY v1_d2i_RSA_PUBKEY
+#define d2i_RSA_PUBKEY_bio v1_d2i_RSA_PUBKEY_bio
+#define d2i_RSA_PUBKEY_fp v1_d2i_RSA_PUBKEY_fp
+#define d2i_RSAPublicKey v1_d2i_RSAPublicKey
+#define d2i_RSAPublicKey_bio v1_d2i_RSAPublicKey_bio
+#define d2i_RSAPublicKey_fp v1_d2i_RSAPublicKey_fp
+#define d2i_SCRYPT_PARAMS v1_d2i_SCRYPT_PARAMS
+#define d2i_SCT_LIST v1_d2i_SCT_LIST
+#define d2i_SM2_Ciphertext v1_d2i_SM2_Ciphertext
+#define d2i_SSL_SESSION v1_d2i_SSL_SESSION
+#define d2i_SXNET v1_d2i_SXNET
+#define d2i_SXNETID v1_d2i_SXNETID
+#define d2i_TS_ACCURACY v1_d2i_TS_ACCURACY
+#define d2i_TS_MSG_IMPRINT v1_d2i_TS_MSG_IMPRINT
+#define d2i_TS_MSG_IMPRINT_bio v1_d2i_TS_MSG_IMPRINT_bio
+#define d2i_TS_MSG_IMPRINT_fp v1_d2i_TS_MSG_IMPRINT_fp
+#define d2i_TS_REQ v1_d2i_TS_REQ
+#define d2i_TS_REQ_bio v1_d2i_TS_REQ_bio
+#define d2i_TS_REQ_fp v1_d2i_TS_REQ_fp
+#define d2i_TS_RESP v1_d2i_TS_RESP
+#define d2i_TS_RESP_bio v1_d2i_TS_RESP_bio
+#define d2i_TS_RESP_fp v1_d2i_TS_RESP_fp
+#define d2i_TS_STATUS_INFO v1_d2i_TS_STATUS_INFO
+#define d2i_TS_TST_INFO v1_d2i_TS_TST_INFO
+#define d2i_TS_TST_INFO_bio v1_d2i_TS_TST_INFO_bio
+#define d2i_TS_TST_INFO_fp v1_d2i_TS_TST_INFO_fp
+#define d2i_USERNOTICE v1_d2i_USERNOTICE
+#define d2i_X509 v1_d2i_X509
+#define d2i_X509_ALGOR v1_d2i_X509_ALGOR
+#define d2i_X509_ALGORS v1_d2i_X509_ALGORS
+#define d2i_X509_ATTRIBUTE v1_d2i_X509_ATTRIBUTE
+#define d2i_X509_AUX v1_d2i_X509_AUX
+#define d2i_X509_bio v1_d2i_X509_bio
+#define d2i_X509_CERT_AUX v1_d2i_X509_CERT_AUX
+#define d2i_X509_CINF v1_d2i_X509_CINF
+#define d2i_X509_CRL v1_d2i_X509_CRL
+#define d2i_X509_CRL_bio v1_d2i_X509_CRL_bio
+#define d2i_X509_CRL_fp v1_d2i_X509_CRL_fp
+#define d2i_X509_CRL_INFO v1_d2i_X509_CRL_INFO
+#define d2i_X509_EXTENSION v1_d2i_X509_EXTENSION
+#define d2i_X509_EXTENSIONS v1_d2i_X509_EXTENSIONS
+#define d2i_X509_fp v1_d2i_X509_fp
+#define d2i_X509_NAME v1_d2i_X509_NAME
+#define d2i_X509_NAME_ENTRY v1_d2i_X509_NAME_ENTRY
+#define d2i_X509_PUBKEY v1_d2i_X509_PUBKEY
+#define d2i_X509_REQ v1_d2i_X509_REQ
+#define d2i_X509_REQ_bio v1_d2i_X509_REQ_bio
+#define d2i_X509_REQ_fp v1_d2i_X509_REQ_fp
+#define d2i_X509_REQ_INFO v1_d2i_X509_REQ_INFO
+#define d2i_X509_REVOKED v1_d2i_X509_REVOKED
+#define d2i_X509_SIG v1_d2i_X509_SIG
+#define d2i_X509_VAL v1_d2i_X509_VAL
+#define DES_cbc_cksum v1_DES_cbc_cksum
+#define DES_cbc_encrypt v1_DES_cbc_encrypt
+#define DES_cfb64_encrypt v1_DES_cfb64_encrypt
+#define DES_cfb_encrypt v1_DES_cfb_encrypt
+#define DES_check_key_parity v1_DES_check_key_parity
+#define DES_crypt v1_DES_crypt
+#define DES_decrypt3 v1_DES_decrypt3
+#define DES_ecb3_encrypt v1_DES_ecb3_encrypt
+#define DES_ecb_encrypt v1_DES_ecb_encrypt
+#define DES_ede3_cbc_encrypt v1_DES_ede3_cbc_encrypt
+#define DES_ede3_cfb64_encrypt v1_DES_ede3_cfb64_encrypt
+#define DES_ede3_cfb_encrypt v1_DES_ede3_cfb_encrypt
+#define DES_ede3_ofb64_encrypt v1_DES_ede3_ofb64_encrypt
+#define DES_encrypt1 v1_DES_encrypt1
+#define DES_encrypt2 v1_DES_encrypt2
+#define DES_encrypt3 v1_DES_encrypt3
+#define DES_fcrypt v1_DES_fcrypt
+#define DES_is_weak_key v1_DES_is_weak_key
+#define DES_key_sched v1_DES_key_sched
+#define DES_ncbc_encrypt v1_DES_ncbc_encrypt
+#define DES_ofb64_encrypt v1_DES_ofb64_encrypt
+#define DES_ofb_encrypt v1_DES_ofb_encrypt
+#define DES_options v1_DES_options
+#define DES_pcbc_encrypt v1_DES_pcbc_encrypt
+#define DES_quad_cksum v1_DES_quad_cksum
+#define DES_random_key v1_DES_random_key
+#define DES_set_key v1_DES_set_key
+#define DES_set_key_checked v1_DES_set_key_checked
+#define DES_set_key_unchecked v1_DES_set_key_unchecked
+#define DES_set_odd_parity v1_DES_set_odd_parity
+#define DES_SPtrans v1_DES_SPtrans
+#define DES_string_to_2keys v1_DES_string_to_2keys
+#define DES_string_to_key v1_DES_string_to_key
+#define DES_xcbc_encrypt v1_DES_xcbc_encrypt
+#define dh_asn1_meth v1_dh_asn1_meth
+#define DH_bits v1_DH_bits
+#define DH_check v1_DH_check
+#define DH_check_ex v1_DH_check_ex
+#define DH_check_params v1_DH_check_params
+#define DH_check_params_ex v1_DH_check_params_ex
+#define DH_check_pub_key v1_DH_check_pub_key
+#define DH_check_pub_key_ex v1_DH_check_pub_key_ex
+#define DH_clear_flags v1_DH_clear_flags
+#define DH_compute_key v1_DH_compute_key
+#define DH_compute_key_padded v1_DH_compute_key_padded
+#define DH_free v1_DH_free
+#define DH_generate_key v1_DH_generate_key
+#define DH_generate_parameters v1_DH_generate_parameters
+#define DH_generate_parameters_ex v1_DH_generate_parameters_ex
+#define DH_get0_engine v1_DH_get0_engine
+#define DH_get0_g v1_DH_get0_g
+#define DH_get0_key v1_DH_get0_key
+#define DH_get0_p v1_DH_get0_p
+#define DH_get0_pqg v1_DH_get0_pqg
+#define DH_get0_priv_key v1_DH_get0_priv_key
+#define DH_get0_pub_key v1_DH_get0_pub_key
+#define DH_get0_q v1_DH_get0_q
+#define DH_get_1024_160 v1_DH_get_1024_160
+#define DH_get_2048_224 v1_DH_get_2048_224
+#define DH_get_2048_256 v1_DH_get_2048_256
+#define DH_get_default_method v1_DH_get_default_method
+#define DH_get_ex_data v1_DH_get_ex_data
+#define DH_get_length v1_DH_get_length
+#define DH_get_nid v1_DH_get_nid
+#define DH_KDF_X9_42 v1_DH_KDF_X9_42
+#define DH_meth_dup v1_DH_meth_dup
+#define DH_meth_free v1_DH_meth_free
+#define DH_meth_get0_app_data v1_DH_meth_get0_app_data
+#define DH_meth_get0_name v1_DH_meth_get0_name
+#define DH_meth_get_bn_mod_exp v1_DH_meth_get_bn_mod_exp
+#define DH_meth_get_compute_key v1_DH_meth_get_compute_key
+#define DH_meth_get_finish v1_DH_meth_get_finish
+#define DH_meth_get_flags v1_DH_meth_get_flags
+#define DH_meth_get_generate_key v1_DH_meth_get_generate_key
+#define DH_meth_get_generate_params v1_DH_meth_get_generate_params
+#define DH_meth_get_init v1_DH_meth_get_init
+#define DH_meth_new v1_DH_meth_new
+#define DH_meth_set0_app_data v1_DH_meth_set0_app_data
+#define DH_meth_set1_name v1_DH_meth_set1_name
+#define DH_meth_set_bn_mod_exp v1_DH_meth_set_bn_mod_exp
+#define DH_meth_set_compute_key v1_DH_meth_set_compute_key
+#define DH_meth_set_finish v1_DH_meth_set_finish
+#define DH_meth_set_flags v1_DH_meth_set_flags
+#define DH_meth_set_generate_key v1_DH_meth_set_generate_key
+#define DH_meth_set_generate_params v1_DH_meth_set_generate_params
+#define DH_meth_set_init v1_DH_meth_set_init
+#define DH_new v1_DH_new
+#define DH_new_by_nid v1_DH_new_by_nid
+#define DH_new_method v1_DH_new_method
+#define DH_OpenSSL v1_DH_OpenSSL
+#define DHparams_dup v1_DHparams_dup
+#define DHparams_it v1_DHparams_it
+#define DHparams_print v1_DHparams_print
+#define DHparams_print_fp v1_DHparams_print_fp
+#define dh_pkey_meth v1_dh_pkey_meth
+#define DH_security_bits v1_DH_security_bits
+#define DH_set0_key v1_DH_set0_key
+#define DH_set0_pqg v1_DH_set0_pqg
+#define DH_set_default_method v1_DH_set_default_method
+#define DH_set_ex_data v1_DH_set_ex_data
+#define DH_set_flags v1_DH_set_flags
+#define DH_set_length v1_DH_set_length
+#define DH_set_method v1_DH_set_method
+#define DH_size v1_DH_size
+#define DH_test_flags v1_DH_test_flags
+#define DH_up_ref v1_DH_up_ref
+#define dhx_asn1_meth v1_dhx_asn1_meth
+#define dhx_pkey_meth v1_dhx_pkey_meth
+#define DIRECTORYSTRING_free v1_DIRECTORYSTRING_free
+#define DIRECTORYSTRING_it v1_DIRECTORYSTRING_it
+#define DIRECTORYSTRING_new v1_DIRECTORYSTRING_new
+#define DISPLAYTEXT_free v1_DISPLAYTEXT_free
+#define DISPLAYTEXT_it v1_DISPLAYTEXT_it
+#define DISPLAYTEXT_new v1_DISPLAYTEXT_new
+#define DIST_POINT_free v1_DIST_POINT_free
+#define DIST_POINT_it v1_DIST_POINT_it
+#define DIST_POINT_NAME_free v1_DIST_POINT_NAME_free
+#define DIST_POINT_NAME_it v1_DIST_POINT_NAME_it
+#define DIST_POINT_NAME_new v1_DIST_POINT_NAME_new
+#define DIST_POINT_new v1_DIST_POINT_new
+#define DIST_POINT_set_dpname v1_DIST_POINT_set_dpname
+#define do_dtls1_write v1_do_dtls1_write
+#define do_engine_lock_init_ossl_ v1_do_engine_lock_init_ossl_
+#define do_engine_lock_init_ossl_ret_ v1_do_engine_lock_init_ossl_ret_
+#define do_ssl3_write v1_do_ssl3_write
+#define drbg_ctr_init v1_drbg_ctr_init
+#define drbg_delete_thread_state v1_drbg_delete_thread_state
+#define dsa_asn1_meths v1_dsa_asn1_meths
+#define DSA_bits v1_DSA_bits
+#define dsa_builtin_paramgen v1_dsa_builtin_paramgen
+#define dsa_builtin_paramgen2 v1_dsa_builtin_paramgen2
+#define DSA_clear_flags v1_DSA_clear_flags
+#define DSA_do_sign v1_DSA_do_sign
+#define DSA_do_verify v1_DSA_do_verify
+#define DSA_dup_DH v1_DSA_dup_DH
+#define DSA_free v1_DSA_free
+#define DSA_generate_key v1_DSA_generate_key
+#define DSA_generate_parameters v1_DSA_generate_parameters
+#define DSA_generate_parameters_ex v1_DSA_generate_parameters_ex
+#define DSA_get0_engine v1_DSA_get0_engine
+#define DSA_get0_g v1_DSA_get0_g
+#define DSA_get0_key v1_DSA_get0_key
+#define DSA_get0_p v1_DSA_get0_p
+#define DSA_get0_pqg v1_DSA_get0_pqg
+#define DSA_get0_priv_key v1_DSA_get0_priv_key
+#define DSA_get0_pub_key v1_DSA_get0_pub_key
+#define DSA_get0_q v1_DSA_get0_q
+#define DSA_get_default_method v1_DSA_get_default_method
+#define DSA_get_ex_data v1_DSA_get_ex_data
+#define DSA_get_method v1_DSA_get_method
+#define DSA_meth_dup v1_DSA_meth_dup
+#define DSA_meth_free v1_DSA_meth_free
+#define DSA_meth_get0_app_data v1_DSA_meth_get0_app_data
+#define DSA_meth_get0_name v1_DSA_meth_get0_name
+#define DSA_meth_get_bn_mod_exp v1_DSA_meth_get_bn_mod_exp
+#define DSA_meth_get_finish v1_DSA_meth_get_finish
+#define DSA_meth_get_flags v1_DSA_meth_get_flags
+#define DSA_meth_get_init v1_DSA_meth_get_init
+#define DSA_meth_get_keygen v1_DSA_meth_get_keygen
+#define DSA_meth_get_mod_exp v1_DSA_meth_get_mod_exp
+#define DSA_meth_get_paramgen v1_DSA_meth_get_paramgen
+#define DSA_meth_get_sign v1_DSA_meth_get_sign
+#define DSA_meth_get_sign_setup v1_DSA_meth_get_sign_setup
+#define DSA_meth_get_verify v1_DSA_meth_get_verify
+#define DSA_meth_new v1_DSA_meth_new
+#define DSA_meth_set0_app_data v1_DSA_meth_set0_app_data
+#define DSA_meth_set1_name v1_DSA_meth_set1_name
+#define DSA_meth_set_bn_mod_exp v1_DSA_meth_set_bn_mod_exp
+#define DSA_meth_set_finish v1_DSA_meth_set_finish
+#define DSA_meth_set_flags v1_DSA_meth_set_flags
+#define DSA_meth_set_init v1_DSA_meth_set_init
+#define DSA_meth_set_keygen v1_DSA_meth_set_keygen
+#define DSA_meth_set_mod_exp v1_DSA_meth_set_mod_exp
+#define DSA_meth_set_paramgen v1_DSA_meth_set_paramgen
+#define DSA_meth_set_sign v1_DSA_meth_set_sign
+#define DSA_meth_set_sign_setup v1_DSA_meth_set_sign_setup
+#define DSA_meth_set_verify v1_DSA_meth_set_verify
+#define DSA_new v1_DSA_new
+#define DSA_new_method v1_DSA_new_method
+#define DSA_OpenSSL v1_DSA_OpenSSL
+#define DSAparams_dup v1_DSAparams_dup
+#define DSAparams_print v1_DSAparams_print
+#define DSAparams_print_fp v1_DSAparams_print_fp
+#define dsa_pkey_meth v1_dsa_pkey_meth
+#define DSA_print v1_DSA_print
+#define DSA_print_fp v1_DSA_print_fp
+#define DSA_security_bits v1_DSA_security_bits
+#define DSA_set0_key v1_DSA_set0_key
+#define DSA_set0_pqg v1_DSA_set0_pqg
+#define DSA_set_default_method v1_DSA_set_default_method
+#define DSA_set_ex_data v1_DSA_set_ex_data
+#define DSA_set_flags v1_DSA_set_flags
+#define DSA_set_method v1_DSA_set_method
+#define DSA_SIG_free v1_DSA_SIG_free
+#define DSA_SIG_get0 v1_DSA_SIG_get0
+#define DSA_sign v1_DSA_sign
+#define DSA_SIG_new v1_DSA_SIG_new
+#define DSA_sign_setup v1_DSA_sign_setup
+#define DSA_SIG_set0 v1_DSA_SIG_set0
+#define DSA_size v1_DSA_size
+#define DSA_test_flags v1_DSA_test_flags
+#define DSA_up_ref v1_DSA_up_ref
+#define DSA_verify v1_DSA_verify
+#define DSO_bind_func v1_DSO_bind_func
+#define DSO_convert_filename v1_DSO_convert_filename
+#define DSO_ctrl v1_DSO_ctrl
+#define DSO_dsobyaddr v1_DSO_dsobyaddr
+#define DSO_flags v1_DSO_flags
+#define DSO_free v1_DSO_free
+#define DSO_get_filename v1_DSO_get_filename
+#define DSO_global_lookup v1_DSO_global_lookup
+#define DSO_load v1_DSO_load
+#define DSO_merge v1_DSO_merge
+#define DSO_METHOD_openssl v1_DSO_METHOD_openssl
+#define DSO_new v1_DSO_new
+#define DSO_pathbyaddr v1_DSO_pathbyaddr
+#define DSO_set_filename v1_DSO_set_filename
+#define DSO_up_ref v1_DSO_up_ref
+#define dtls1_buffer_message v1_dtls1_buffer_message
+#define dtls1_buffer_record v1_dtls1_buffer_record
+#define dtls1_check_timeout_num v1_dtls1_check_timeout_num
+#define dtls1_clear v1_dtls1_clear
+#define dtls1_clear_received_buffer v1_dtls1_clear_received_buffer
+#define dtls1_clear_sent_buffer v1_dtls1_clear_sent_buffer
+#define dtls1_close_construct_packet v1_dtls1_close_construct_packet
+#define dtls1_ctrl v1_dtls1_ctrl
+#define dtls1_default_timeout v1_dtls1_default_timeout
+#define dtls1_dispatch_alert v1_dtls1_dispatch_alert
+#define dtls1_do_write v1_dtls1_do_write
+#define dtls1_free v1_dtls1_free
+#define dtls1_get_bitmap v1_dtls1_get_bitmap
+#define dtls1_get_message_header v1_dtls1_get_message_header
+#define dtls1_get_queue_priority v1_dtls1_get_queue_priority
+#define dtls1_get_record v1_dtls1_get_record
+#define dtls1_get_timeout v1_dtls1_get_timeout
+#define dtls1_handle_timeout v1_dtls1_handle_timeout
+#define dtls1_hm_fragment_free v1_dtls1_hm_fragment_free
+#define dtls1_is_timer_expired v1_dtls1_is_timer_expired
+#define dtls1_min_mtu v1_dtls1_min_mtu
+#define dtls1_new v1_dtls1_new
+#define dtls1_process_buffered_records v1_dtls1_process_buffered_records
+#define dtls1_process_record v1_dtls1_process_record
+#define dtls1_query_mtu v1_dtls1_query_mtu
+#define dtls1_read_bytes v1_dtls1_read_bytes
+#define dtls1_read_failed v1_dtls1_read_failed
+#define dtls1_record_bitmap_update v1_dtls1_record_bitmap_update
+#define dtls1_record_replay_check v1_dtls1_record_replay_check
+#define dtls1_reset_seq_numbers v1_dtls1_reset_seq_numbers
+#define dtls1_retransmit_buffered_messages v1_dtls1_retransmit_buffered_messages
+#define dtls1_retransmit_message v1_dtls1_retransmit_message
+#define dtls1_retrieve_buffered_record v1_dtls1_retrieve_buffered_record
+#define dtls1_set_handshake_header v1_dtls1_set_handshake_header
+#define dtls1_set_message_header v1_dtls1_set_message_header
+#define dtls1_shutdown v1_dtls1_shutdown
+#define dtls1_start_timer v1_dtls1_start_timer
+#define dtls1_stop_timer v1_dtls1_stop_timer
+#define dtls1_write_app_data_bytes v1_dtls1_write_app_data_bytes
+#define dtls1_write_bytes v1_dtls1_write_bytes
+#define dtls_bad_ver_client_method v1_dtls_bad_ver_client_method
+#define dtls_buffer_listen_record v1_dtls_buffer_listen_record
+#define DTLS_client_method v1_DTLS_client_method
+#define dtls_construct_change_cipher_spec v1_dtls_construct_change_cipher_spec
+#define dtls_construct_hello_verify_request v1_dtls_construct_hello_verify_request
+#define DTLS_get_data_mtu v1_DTLS_get_data_mtu
+#define dtls_get_message v1_dtls_get_message
+#define DTLS_method v1_DTLS_method
+#define dtls_process_hello_verify v1_dtls_process_hello_verify
+#define dtls_raw_hello_verify_request v1_dtls_raw_hello_verify_request
+#define DTLS_RECORD_LAYER_clear v1_DTLS_RECORD_LAYER_clear
+#define DTLS_RECORD_LAYER_free v1_DTLS_RECORD_LAYER_free
+#define DTLS_RECORD_LAYER_new v1_DTLS_RECORD_LAYER_new
+#define DTLS_RECORD_LAYER_set_saved_w_epoch v1_DTLS_RECORD_LAYER_set_saved_w_epoch
+#define DTLS_RECORD_LAYER_set_write_sequence v1_DTLS_RECORD_LAYER_set_write_sequence
+#define DTLS_server_method v1_DTLS_server_method
+#define DTLS_set_timer_cb v1_DTLS_set_timer_cb
+#define dtlsv1_2_client_method v1_dtlsv1_2_client_method
+#define DTLSv1_2_client_method v1_DTLSv1_2_client_method
+#define DTLSv1_2_enc_data v1_DTLSv1_2_enc_data
+#define dtlsv1_2_method v1_dtlsv1_2_method
+#define DTLSv1_2_method v1_DTLSv1_2_method
+#define dtlsv1_2_server_method v1_dtlsv1_2_server_method
+#define DTLSv1_2_server_method v1_DTLSv1_2_server_method
+#define dtlsv1_client_method v1_dtlsv1_client_method
+#define DTLSv1_client_method v1_DTLSv1_client_method
+#define DTLSv1_enc_data v1_DTLSv1_enc_data
+#define DTLSv1_listen v1_DTLSv1_listen
+#define dtlsv1_method v1_dtlsv1_method
+#define DTLSv1_method v1_DTLSv1_method
+#define dtlsv1_server_method v1_dtlsv1_server_method
+#define DTLSv1_server_method v1_DTLSv1_server_method
+#define early_data_count_ok v1_early_data_count_ok
+#define EC_curve_nid2nist v1_EC_curve_nid2nist
+#define ec_curve_nid_from_params v1_ec_curve_nid_from_params
+#define EC_curve_nist2nid v1_EC_curve_nist2nid
+#define ECDH_compute_key v1_ECDH_compute_key
+#define ECDH_KDF_X9_62 v1_ECDH_KDF_X9_62
+#define ecdh_KDF_X9_63 v1_ecdh_KDF_X9_63
+#define ecdh_simple_compute_key v1_ecdh_simple_compute_key
+#define ECDSA_do_sign v1_ECDSA_do_sign
+#define ECDSA_do_sign_ex v1_ECDSA_do_sign_ex
+#define ECDSA_do_verify v1_ECDSA_do_verify
+#define ECDSA_SIG_free v1_ECDSA_SIG_free
+#define ECDSA_SIG_get0 v1_ECDSA_SIG_get0
+#define ECDSA_SIG_get0_r v1_ECDSA_SIG_get0_r
+#define ECDSA_SIG_get0_s v1_ECDSA_SIG_get0_s
+#define ECDSA_sign v1_ECDSA_sign
+#define ECDSA_SIG_new v1_ECDSA_SIG_new
+#define ECDSA_sign_ex v1_ECDSA_sign_ex
+#define ECDSA_sign_setup v1_ECDSA_sign_setup
+#define ECDSA_SIG_set0 v1_ECDSA_SIG_set0
+#define ECDSA_size v1_ECDSA_size
+#define ECDSA_verify v1_ECDSA_verify
+#define EC_ec_pre_comp_dup v1_EC_ec_pre_comp_dup
+#define EC_ec_pre_comp_free v1_EC_ec_pre_comp_free
+#define EC_get_builtin_curves v1_EC_get_builtin_curves
+#define ec_GF2m_simple_add v1_ec_GF2m_simple_add
+#define ec_GF2m_simple_cmp v1_ec_GF2m_simple_cmp
+#define ec_GF2m_simple_dbl v1_ec_GF2m_simple_dbl
+#define ec_GF2m_simple_field_div v1_ec_GF2m_simple_field_div
+#define ec_GF2m_simple_field_mul v1_ec_GF2m_simple_field_mul
+#define ec_GF2m_simple_field_sqr v1_ec_GF2m_simple_field_sqr
+#define ec_GF2m_simple_group_check_discriminant v1_ec_GF2m_simple_group_check_discriminant
+#define ec_GF2m_simple_group_clear_finish v1_ec_GF2m_simple_group_clear_finish
+#define ec_GF2m_simple_group_copy v1_ec_GF2m_simple_group_copy
+#define ec_GF2m_simple_group_finish v1_ec_GF2m_simple_group_finish
+#define ec_GF2m_simple_group_get_curve v1_ec_GF2m_simple_group_get_curve
+#define ec_GF2m_simple_group_get_degree v1_ec_GF2m_simple_group_get_degree
+#define ec_GF2m_simple_group_init v1_ec_GF2m_simple_group_init
+#define ec_GF2m_simple_group_set_curve v1_ec_GF2m_simple_group_set_curve
+#define ec_GF2m_simple_invert v1_ec_GF2m_simple_invert
+#define ec_GF2m_simple_is_at_infinity v1_ec_GF2m_simple_is_at_infinity
+#define ec_GF2m_simple_is_on_curve v1_ec_GF2m_simple_is_on_curve
+#define ec_GF2m_simple_make_affine v1_ec_GF2m_simple_make_affine
+#define EC_GF2m_simple_method v1_EC_GF2m_simple_method
+#define ec_GF2m_simple_oct2point v1_ec_GF2m_simple_oct2point
+#define ec_GF2m_simple_point2oct v1_ec_GF2m_simple_point2oct
+#define ec_GF2m_simple_point_clear_finish v1_ec_GF2m_simple_point_clear_finish
+#define ec_GF2m_simple_point_copy v1_ec_GF2m_simple_point_copy
+#define ec_GF2m_simple_point_finish v1_ec_GF2m_simple_point_finish
+#define ec_GF2m_simple_point_get_affine_coordinates v1_ec_GF2m_simple_point_get_affine_coordinates
+#define ec_GF2m_simple_point_init v1_ec_GF2m_simple_point_init
+#define ec_GF2m_simple_point_set_affine_coordinates v1_ec_GF2m_simple_point_set_affine_coordinates
+#define ec_GF2m_simple_point_set_to_infinity v1_ec_GF2m_simple_point_set_to_infinity
+#define ec_GF2m_simple_points_make_affine v1_ec_GF2m_simple_points_make_affine
+#define ec_GF2m_simple_set_compressed_coordinates v1_ec_GF2m_simple_set_compressed_coordinates
+#define ec_GFp_mont_field_decode v1_ec_GFp_mont_field_decode
+#define ec_GFp_mont_field_encode v1_ec_GFp_mont_field_encode
+#define ec_GFp_mont_field_inv v1_ec_GFp_mont_field_inv
+#define ec_GFp_mont_field_mul v1_ec_GFp_mont_field_mul
+#define ec_GFp_mont_field_set_to_one v1_ec_GFp_mont_field_set_to_one
+#define ec_GFp_mont_field_sqr v1_ec_GFp_mont_field_sqr
+#define ec_GFp_mont_group_clear_finish v1_ec_GFp_mont_group_clear_finish
+#define ec_GFp_mont_group_copy v1_ec_GFp_mont_group_copy
+#define ec_GFp_mont_group_finish v1_ec_GFp_mont_group_finish
+#define ec_GFp_mont_group_init v1_ec_GFp_mont_group_init
+#define ec_GFp_mont_group_set_curve v1_ec_GFp_mont_group_set_curve
+#define EC_GFp_mont_method v1_EC_GFp_mont_method
+#define ec_GFp_nist_field_mul v1_ec_GFp_nist_field_mul
+#define ec_GFp_nist_field_sqr v1_ec_GFp_nist_field_sqr
+#define ec_GFp_nist_group_copy v1_ec_GFp_nist_group_copy
+#define ec_GFp_nist_group_set_curve v1_ec_GFp_nist_group_set_curve
+#define EC_GFp_nist_method v1_EC_GFp_nist_method
+#define ec_GFp_nistp224_group_init v1_ec_GFp_nistp224_group_init
+#define ec_GFp_nistp224_group_set_curve v1_ec_GFp_nistp224_group_set_curve
+#define ec_GFp_nistp224_have_precompute_mult v1_ec_GFp_nistp224_have_precompute_mult
+#define EC_GFp_nistp224_method v1_EC_GFp_nistp224_method
+#define ec_GFp_nistp224_point_get_affine_coordinates v1_ec_GFp_nistp224_point_get_affine_coordinates
+#define ec_GFp_nistp224_points_mul v1_ec_GFp_nistp224_points_mul
+#define ec_GFp_nistp224_precompute_mult v1_ec_GFp_nistp224_precompute_mult
+#define ec_GFp_nistp256_group_init v1_ec_GFp_nistp256_group_init
+#define ec_GFp_nistp256_group_set_curve v1_ec_GFp_nistp256_group_set_curve
+#define ec_GFp_nistp256_have_precompute_mult v1_ec_GFp_nistp256_have_precompute_mult
+#define EC_GFp_nistp256_method v1_EC_GFp_nistp256_method
+#define ec_GFp_nistp256_point_get_affine_coordinates v1_ec_GFp_nistp256_point_get_affine_coordinates
+#define ec_GFp_nistp256_points_mul v1_ec_GFp_nistp256_points_mul
+#define ec_GFp_nistp256_precompute_mult v1_ec_GFp_nistp256_precompute_mult
+#define ec_GFp_nistp521_group_init v1_ec_GFp_nistp521_group_init
+#define ec_GFp_nistp521_group_set_curve v1_ec_GFp_nistp521_group_set_curve
+#define ec_GFp_nistp521_have_precompute_mult v1_ec_GFp_nistp521_have_precompute_mult
+#define EC_GFp_nistp521_method v1_EC_GFp_nistp521_method
+#define ec_GFp_nistp521_point_get_affine_coordinates v1_ec_GFp_nistp521_point_get_affine_coordinates
+#define ec_GFp_nistp521_points_mul v1_ec_GFp_nistp521_points_mul
+#define ec_GFp_nistp521_precompute_mult v1_ec_GFp_nistp521_precompute_mult
+#define ec_GFp_nistp_points_make_affine_internal v1_ec_GFp_nistp_points_make_affine_internal
+#define ec_GFp_nistp_recode_scalar_bits v1_ec_GFp_nistp_recode_scalar_bits
+#define EC_GFp_nistz256_method v1_EC_GFp_nistz256_method
+#define ec_GFp_simple_add v1_ec_GFp_simple_add
+#define ec_GFp_simple_blind_coordinates v1_ec_GFp_simple_blind_coordinates
+#define ec_GFp_simple_cmp v1_ec_GFp_simple_cmp
+#define ec_GFp_simple_dbl v1_ec_GFp_simple_dbl
+#define ec_GFp_simple_field_inv v1_ec_GFp_simple_field_inv
+#define ec_GFp_simple_field_mul v1_ec_GFp_simple_field_mul
+#define ec_GFp_simple_field_sqr v1_ec_GFp_simple_field_sqr
+#define ec_GFp_simple_get_Jprojective_coordinates_GFp v1_ec_GFp_simple_get_Jprojective_coordinates_GFp
+#define ec_GFp_simple_group_check_discriminant v1_ec_GFp_simple_group_check_discriminant
+#define ec_GFp_simple_group_clear_finish v1_ec_GFp_simple_group_clear_finish
+#define ec_GFp_simple_group_copy v1_ec_GFp_simple_group_copy
+#define ec_GFp_simple_group_finish v1_ec_GFp_simple_group_finish
+#define ec_GFp_simple_group_get_curve v1_ec_GFp_simple_group_get_curve
+#define ec_GFp_simple_group_get_degree v1_ec_GFp_simple_group_get_degree
+#define ec_GFp_simple_group_init v1_ec_GFp_simple_group_init
+#define ec_GFp_simple_group_set_curve v1_ec_GFp_simple_group_set_curve
+#define ec_GFp_simple_invert v1_ec_GFp_simple_invert
+#define ec_GFp_simple_is_at_infinity v1_ec_GFp_simple_is_at_infinity
+#define ec_GFp_simple_is_on_curve v1_ec_GFp_simple_is_on_curve
+#define ec_GFp_simple_ladder_post v1_ec_GFp_simple_ladder_post
+#define ec_GFp_simple_ladder_pre v1_ec_GFp_simple_ladder_pre
+#define ec_GFp_simple_ladder_step v1_ec_GFp_simple_ladder_step
+#define ec_GFp_simple_make_affine v1_ec_GFp_simple_make_affine
+#define EC_GFp_simple_method v1_EC_GFp_simple_method
+#define ec_GFp_simple_oct2point v1_ec_GFp_simple_oct2point
+#define ec_GFp_simple_point2oct v1_ec_GFp_simple_point2oct
+#define ec_GFp_simple_point_clear_finish v1_ec_GFp_simple_point_clear_finish
+#define ec_GFp_simple_point_copy v1_ec_GFp_simple_point_copy
+#define ec_GFp_simple_point_finish v1_ec_GFp_simple_point_finish
+#define ec_GFp_simple_point_get_affine_coordinates v1_ec_GFp_simple_point_get_affine_coordinates
+#define ec_GFp_simple_point_init v1_ec_GFp_simple_point_init
+#define ec_GFp_simple_point_set_affine_coordinates v1_ec_GFp_simple_point_set_affine_coordinates
+#define ec_GFp_simple_point_set_to_infinity v1_ec_GFp_simple_point_set_to_infinity
+#define ec_GFp_simple_points_make_affine v1_ec_GFp_simple_points_make_affine
+#define ec_GFp_simple_set_compressed_coordinates v1_ec_GFp_simple_set_compressed_coordinates
+#define ec_GFp_simple_set_Jprojective_coordinates_GFp v1_ec_GFp_simple_set_Jprojective_coordinates_GFp
+#define EC_GROUP_check v1_EC_GROUP_check
+#define EC_GROUP_check_discriminant v1_EC_GROUP_check_discriminant
+#define EC_GROUP_clear_free v1_EC_GROUP_clear_free
+#define EC_GROUP_cmp v1_EC_GROUP_cmp
+#define EC_GROUP_copy v1_EC_GROUP_copy
+#define ec_group_do_inverse_ord v1_ec_group_do_inverse_ord
+#define EC_GROUP_dup v1_EC_GROUP_dup
+#define EC_GROUP_free v1_EC_GROUP_free
+#define EC_GROUP_get0_cofactor v1_EC_GROUP_get0_cofactor
+#define EC_GROUP_get0_generator v1_EC_GROUP_get0_generator
+#define EC_GROUP_get0_order v1_EC_GROUP_get0_order
+#define EC_GROUP_get0_seed v1_EC_GROUP_get0_seed
+#define EC_GROUP_get_asn1_flag v1_EC_GROUP_get_asn1_flag
+#define EC_GROUP_get_basis_type v1_EC_GROUP_get_basis_type
+#define EC_GROUP_get_cofactor v1_EC_GROUP_get_cofactor
+#define EC_GROUP_get_curve v1_EC_GROUP_get_curve
+#define EC_GROUP_get_curve_GF2m v1_EC_GROUP_get_curve_GF2m
+#define EC_GROUP_get_curve_GFp v1_EC_GROUP_get_curve_GFp
+#define EC_GROUP_get_curve_name v1_EC_GROUP_get_curve_name
+#define EC_GROUP_get_degree v1_EC_GROUP_get_degree
+#define EC_GROUP_get_ecparameters v1_EC_GROUP_get_ecparameters
+#define EC_GROUP_get_ecpkparameters v1_EC_GROUP_get_ecpkparameters
+#define EC_GROUP_get_mont_data v1_EC_GROUP_get_mont_data
+#define EC_GROUP_get_order v1_EC_GROUP_get_order
+#define EC_GROUP_get_pentanomial_basis v1_EC_GROUP_get_pentanomial_basis
+#define EC_GROUP_get_point_conversion_form v1_EC_GROUP_get_point_conversion_form
+#define EC_GROUP_get_seed_len v1_EC_GROUP_get_seed_len
+#define EC_GROUP_get_trinomial_basis v1_EC_GROUP_get_trinomial_basis
+#define EC_GROUP_have_precompute_mult v1_EC_GROUP_have_precompute_mult
+#define EC_GROUP_method_of v1_EC_GROUP_method_of
+#define EC_GROUP_new v1_EC_GROUP_new
+#define EC_GROUP_new_by_curve_name v1_EC_GROUP_new_by_curve_name
+#define EC_GROUP_new_curve_GF2m v1_EC_GROUP_new_curve_GF2m
+#define EC_GROUP_new_curve_GFp v1_EC_GROUP_new_curve_GFp
+#define EC_GROUP_new_from_ecparameters v1_EC_GROUP_new_from_ecparameters
+#define EC_GROUP_new_from_ecpkparameters v1_EC_GROUP_new_from_ecpkparameters
+#define EC_GROUP_order_bits v1_EC_GROUP_order_bits
+#define EC_GROUP_precompute_mult v1_EC_GROUP_precompute_mult
+#define EC_GROUP_set_asn1_flag v1_EC_GROUP_set_asn1_flag
+#define EC_GROUP_set_curve v1_EC_GROUP_set_curve
+#define EC_GROUP_set_curve_GF2m v1_EC_GROUP_set_curve_GF2m
+#define EC_GROUP_set_curve_GFp v1_EC_GROUP_set_curve_GFp
+#define EC_GROUP_set_curve_name v1_EC_GROUP_set_curve_name
+#define EC_GROUP_set_generator v1_EC_GROUP_set_generator
+#define EC_GROUP_set_point_conversion_form v1_EC_GROUP_set_point_conversion_form
+#define EC_GROUP_set_seed v1_EC_GROUP_set_seed
+#define ec_group_simple_order_bits v1_ec_group_simple_order_bits
+#define eckey_asn1_meth v1_eckey_asn1_meth
+#define EC_KEY_can_sign v1_EC_KEY_can_sign
+#define EC_KEY_check_key v1_EC_KEY_check_key
+#define EC_KEY_clear_flags v1_EC_KEY_clear_flags
+#define EC_KEY_copy v1_EC_KEY_copy
+#define EC_KEY_decoded_from_explicit_params v1_EC_KEY_decoded_from_explicit_params
+#define EC_KEY_dup v1_EC_KEY_dup
+#define EC_KEY_free v1_EC_KEY_free
+#define EC_KEY_generate_key v1_EC_KEY_generate_key
+#define EC_KEY_get0_engine v1_EC_KEY_get0_engine
+#define EC_KEY_get0_group v1_EC_KEY_get0_group
+#define EC_KEY_get0_private_key v1_EC_KEY_get0_private_key
+#define EC_KEY_get0_public_key v1_EC_KEY_get0_public_key
+#define EC_KEY_get_conv_form v1_EC_KEY_get_conv_form
+#define EC_KEY_get_default_method v1_EC_KEY_get_default_method
+#define EC_KEY_get_enc_flags v1_EC_KEY_get_enc_flags
+#define EC_KEY_get_ex_data v1_EC_KEY_get_ex_data
+#define EC_KEY_get_flags v1_EC_KEY_get_flags
+#define EC_KEY_get_method v1_EC_KEY_get_method
+#define EC_KEY_key2buf v1_EC_KEY_key2buf
+#define EC_KEY_METHOD_free v1_EC_KEY_METHOD_free
+#define EC_KEY_METHOD_get_compute_key v1_EC_KEY_METHOD_get_compute_key
+#define EC_KEY_METHOD_get_init v1_EC_KEY_METHOD_get_init
+#define EC_KEY_METHOD_get_keygen v1_EC_KEY_METHOD_get_keygen
+#define EC_KEY_METHOD_get_sign v1_EC_KEY_METHOD_get_sign
+#define EC_KEY_METHOD_get_verify v1_EC_KEY_METHOD_get_verify
+#define EC_KEY_METHOD_new v1_EC_KEY_METHOD_new
+#define EC_KEY_METHOD_set_compute_key v1_EC_KEY_METHOD_set_compute_key
+#define EC_KEY_METHOD_set_init v1_EC_KEY_METHOD_set_init
+#define EC_KEY_METHOD_set_keygen v1_EC_KEY_METHOD_set_keygen
+#define EC_KEY_METHOD_set_sign v1_EC_KEY_METHOD_set_sign
+#define EC_KEY_METHOD_set_verify v1_EC_KEY_METHOD_set_verify
+#define EC_KEY_new v1_EC_KEY_new
+#define EC_KEY_new_by_curve_name v1_EC_KEY_new_by_curve_name
+#define EC_KEY_new_method v1_EC_KEY_new_method
+#define EC_KEY_oct2key v1_EC_KEY_oct2key
+#define EC_KEY_oct2priv v1_EC_KEY_oct2priv
+#define EC_KEY_OpenSSL v1_EC_KEY_OpenSSL
+#define EC_KEY_precompute_mult v1_EC_KEY_precompute_mult
+#define EC_KEY_print v1_EC_KEY_print
+#define EC_KEY_print_fp v1_EC_KEY_print_fp
+#define EC_KEY_priv2buf v1_EC_KEY_priv2buf
+#define EC_KEY_priv2oct v1_EC_KEY_priv2oct
+#define EC_KEY_set_asn1_flag v1_EC_KEY_set_asn1_flag
+#define EC_KEY_set_conv_form v1_EC_KEY_set_conv_form
+#define EC_KEY_set_default_method v1_EC_KEY_set_default_method
+#define EC_KEY_set_enc_flags v1_EC_KEY_set_enc_flags
+#define EC_KEY_set_ex_data v1_EC_KEY_set_ex_data
+#define EC_KEY_set_flags v1_EC_KEY_set_flags
+#define EC_KEY_set_group v1_EC_KEY_set_group
+#define EC_KEY_set_method v1_EC_KEY_set_method
+#define EC_KEY_set_private_key v1_EC_KEY_set_private_key
+#define EC_KEY_set_public_key v1_EC_KEY_set_public_key
+#define EC_KEY_set_public_key_affine_coordinates v1_EC_KEY_set_public_key_affine_coordinates
+#define ec_key_simple_check_key v1_ec_key_simple_check_key
+#define ec_key_simple_generate_key v1_ec_key_simple_generate_key
+#define ec_key_simple_generate_public_key v1_ec_key_simple_generate_public_key
+#define ec_key_simple_oct2priv v1_ec_key_simple_oct2priv
+#define ec_key_simple_priv2oct v1_ec_key_simple_priv2oct
+#define EC_KEY_up_ref v1_EC_KEY_up_ref
+#define EC_METHOD_get_field_type v1_EC_METHOD_get_field_type
+#define EC_nistp224_pre_comp_dup v1_EC_nistp224_pre_comp_dup
+#define EC_nistp224_pre_comp_free v1_EC_nistp224_pre_comp_free
+#define EC_nistp256_pre_comp_dup v1_EC_nistp256_pre_comp_dup
+#define EC_nistp256_pre_comp_free v1_EC_nistp256_pre_comp_free
+#define EC_nistp521_pre_comp_dup v1_EC_nistp521_pre_comp_dup
+#define EC_nistp521_pre_comp_free v1_EC_nistp521_pre_comp_free
+#define EC_nistz256_pre_comp_dup v1_EC_nistz256_pre_comp_dup
+#define EC_nistz256_pre_comp_free v1_EC_nistz256_pre_comp_free
+#define ECPARAMETERS_free v1_ECPARAMETERS_free
+#define ECPARAMETERS_it v1_ECPARAMETERS_it
+#define ECPARAMETERS_new v1_ECPARAMETERS_new
+#define ECParameters_print v1_ECParameters_print
+#define ECParameters_print_fp v1_ECParameters_print_fp
+#define ec_pkey_meth v1_ec_pkey_meth
+#define ECPKPARAMETERS_free v1_ECPKPARAMETERS_free
+#define ECPKPARAMETERS_it v1_ECPKPARAMETERS_it
+#define ECPKPARAMETERS_new v1_ECPKPARAMETERS_new
+#define ECPKParameters_print v1_ECPKParameters_print
+#define ECPKParameters_print_fp v1_ECPKParameters_print_fp
+#define ecp_nistz256_add v1_ecp_nistz256_add
+#define ecp_nistz256_avx2_gather_w7 v1_ecp_nistz256_avx2_gather_w7
+#define ecp_nistz256_div_by_2 v1_ecp_nistz256_div_by_2
+#define ecp_nistz256_from_mont v1_ecp_nistz256_from_mont
+#define ecp_nistz256_gather_w5 v1_ecp_nistz256_gather_w5
+#define ecp_nistz256_gather_w7 v1_ecp_nistz256_gather_w7
+#define ecp_nistz256_mul_by_2 v1_ecp_nistz256_mul_by_2
+#define ecp_nistz256_mul_by_3 v1_ecp_nistz256_mul_by_3
+#define ecp_nistz256_mul_mont v1_ecp_nistz256_mul_mont
+#define ecp_nistz256_neg v1_ecp_nistz256_neg
+#define ecp_nistz256_ord_mul_mont v1_ecp_nistz256_ord_mul_mont
+#define ecp_nistz256_ord_sqr_mont v1_ecp_nistz256_ord_sqr_mont
+#define ecp_nistz256_point_add v1_ecp_nistz256_point_add
+#define ecp_nistz256_point_add_affine v1_ecp_nistz256_point_add_affine
+#define ecp_nistz256_point_double v1_ecp_nistz256_point_double
+#define ecp_nistz256_precomputed v1_ecp_nistz256_precomputed
+#define ecp_nistz256_scatter_w5 v1_ecp_nistz256_scatter_w5
+#define ecp_nistz256_scatter_w7 v1_ecp_nistz256_scatter_w7
+#define ecp_nistz256_sqr_mont v1_ecp_nistz256_sqr_mont
+#define ecp_nistz256_sub v1_ecp_nistz256_sub
+#define ecp_nistz256_to_mont v1_ecp_nistz256_to_mont
+#define EC_POINT_add v1_EC_POINT_add
+#define ec_point_blind_coordinates v1_ec_point_blind_coordinates
+#define EC_POINT_bn2point v1_EC_POINT_bn2point
+#define EC_POINT_clear_free v1_EC_POINT_clear_free
+#define EC_POINT_cmp v1_EC_POINT_cmp
+#define EC_POINT_copy v1_EC_POINT_copy
+#define EC_POINT_dbl v1_EC_POINT_dbl
+#define EC_POINT_dup v1_EC_POINT_dup
+#define EC_POINT_free v1_EC_POINT_free
+#define EC_POINT_get_affine_coordinates v1_EC_POINT_get_affine_coordinates
+#define EC_POINT_get_affine_coordinates_GF2m v1_EC_POINT_get_affine_coordinates_GF2m
+#define EC_POINT_get_affine_coordinates_GFp v1_EC_POINT_get_affine_coordinates_GFp
+#define EC_POINT_get_Jprojective_coordinates_GFp v1_EC_POINT_get_Jprojective_coordinates_GFp
+#define EC_POINT_hex2point v1_EC_POINT_hex2point
+#define EC_POINT_invert v1_EC_POINT_invert
+#define EC_POINT_is_at_infinity v1_EC_POINT_is_at_infinity
+#define EC_POINT_is_on_curve v1_EC_POINT_is_on_curve
+#define EC_POINT_make_affine v1_EC_POINT_make_affine
+#define EC_POINT_method_of v1_EC_POINT_method_of
+#define EC_POINT_mul v1_EC_POINT_mul
+#define EC_POINT_new v1_EC_POINT_new
+#define EC_POINT_oct2point v1_EC_POINT_oct2point
+#define EC_POINT_point2bn v1_EC_POINT_point2bn
+#define EC_POINT_point2buf v1_EC_POINT_point2buf
+#define EC_POINT_point2hex v1_EC_POINT_point2hex
+#define EC_POINT_point2oct v1_EC_POINT_point2oct
+#define EC_POINT_set_affine_coordinates v1_EC_POINT_set_affine_coordinates
+#define EC_POINT_set_affine_coordinates_GF2m v1_EC_POINT_set_affine_coordinates_GF2m
+#define EC_POINT_set_affine_coordinates_GFp v1_EC_POINT_set_affine_coordinates_GFp
+#define EC_POINT_set_compressed_coordinates v1_EC_POINT_set_compressed_coordinates
+#define EC_POINT_set_compressed_coordinates_GF2m v1_EC_POINT_set_compressed_coordinates_GF2m
+#define EC_POINT_set_compressed_coordinates_GFp v1_EC_POINT_set_compressed_coordinates_GFp
+#define EC_POINT_set_Jprojective_coordinates_GFp v1_EC_POINT_set_Jprojective_coordinates_GFp
+#define EC_POINT_set_to_infinity v1_EC_POINT_set_to_infinity
+#define EC_POINTs_make_affine v1_EC_POINTs_make_affine
+#define EC_POINTs_mul v1_EC_POINTs_mul
+#define EC_pre_comp_free v1_EC_pre_comp_free
+#define EC_PRIVATEKEY_free v1_EC_PRIVATEKEY_free
+#define EC_PRIVATEKEY_new v1_EC_PRIVATEKEY_new
+#define ec_scalar_mul_ladder v1_ec_scalar_mul_ladder
+#define ec_wNAF_have_precompute_mult v1_ec_wNAF_have_precompute_mult
+#define ec_wNAF_mul v1_ec_wNAF_mul
+#define ec_wNAF_precompute_mult v1_ec_wNAF_precompute_mult
+#define ecx25519_asn1_meth v1_ecx25519_asn1_meth
+#define ecx25519_pkey_meth v1_ecx25519_pkey_meth
+#define ecx448_asn1_meth v1_ecx448_asn1_meth
+#define ecx448_pkey_meth v1_ecx448_pkey_meth
+#define ed25519_asn1_meth v1_ed25519_asn1_meth
+#define ed25519_pkey_meth v1_ed25519_pkey_meth
+#define ED25519_public_from_private v1_ED25519_public_from_private
+#define ED25519_sign v1_ED25519_sign
+#define ED25519_verify v1_ED25519_verify
+#define ed448_asn1_meth v1_ed448_asn1_meth
+#define ED448ph_sign v1_ED448ph_sign
+#define ED448ph_verify v1_ED448ph_verify
+#define ed448_pkey_meth v1_ed448_pkey_meth
+#define ED448_public_from_private v1_ED448_public_from_private
+#define ED448_sign v1_ED448_sign
+#define ED448_verify v1_ED448_verify
+#define EDIPARTYNAME_free v1_EDIPARTYNAME_free
+#define EDIPARTYNAME_it v1_EDIPARTYNAME_it
+#define EDIPARTYNAME_new v1_EDIPARTYNAME_new
+#define ENGINE_add v1_ENGINE_add
+#define ENGINE_add_conf_module v1_ENGINE_add_conf_module
+#define engine_add_dynamic_id v1_engine_add_dynamic_id
+#define ENGINE_by_id v1_ENGINE_by_id
+#define engine_cleanup_add_first v1_engine_cleanup_add_first
+#define engine_cleanup_add_last v1_engine_cleanup_add_last
+#define engine_cleanup_int v1_engine_cleanup_int
+#define ENGINE_cmd_is_executable v1_ENGINE_cmd_is_executable
+#define ENGINE_ctrl v1_ENGINE_ctrl
+#define ENGINE_ctrl_cmd v1_ENGINE_ctrl_cmd
+#define ENGINE_ctrl_cmd_string v1_ENGINE_ctrl_cmd_string
+#define ENGINE_finish v1_ENGINE_finish
+#define ENGINE_free v1_ENGINE_free
+#define engine_free_util v1_engine_free_util
+#define ENGINE_get_cipher v1_ENGINE_get_cipher
+#define ENGINE_get_cipher_engine v1_ENGINE_get_cipher_engine
+#define ENGINE_get_ciphers v1_ENGINE_get_ciphers
+#define ENGINE_get_cmd_defns v1_ENGINE_get_cmd_defns
+#define ENGINE_get_ctrl_function v1_ENGINE_get_ctrl_function
+#define ENGINE_get_default_DH v1_ENGINE_get_default_DH
+#define ENGINE_get_default_DSA v1_ENGINE_get_default_DSA
+#define ENGINE_get_default_EC v1_ENGINE_get_default_EC
+#define ENGINE_get_default_RAND v1_ENGINE_get_default_RAND
+#define ENGINE_get_default_RSA v1_ENGINE_get_default_RSA
+#define ENGINE_get_destroy_function v1_ENGINE_get_destroy_function
+#define ENGINE_get_DH v1_ENGINE_get_DH
+#define ENGINE_get_digest v1_ENGINE_get_digest
+#define ENGINE_get_digest_engine v1_ENGINE_get_digest_engine
+#define ENGINE_get_digests v1_ENGINE_get_digests
+#define ENGINE_get_DSA v1_ENGINE_get_DSA
+#define ENGINE_get_EC v1_ENGINE_get_EC
+#define ENGINE_get_ex_data v1_ENGINE_get_ex_data
+#define ENGINE_get_finish_function v1_ENGINE_get_finish_function
+#define ENGINE_get_first v1_ENGINE_get_first
+#define ENGINE_get_flags v1_ENGINE_get_flags
+#define ENGINE_get_id v1_ENGINE_get_id
+#define ENGINE_get_init_function v1_ENGINE_get_init_function
+#define ENGINE_get_last v1_ENGINE_get_last
+#define ENGINE_get_load_privkey_function v1_ENGINE_get_load_privkey_function
+#define ENGINE_get_load_pubkey_function v1_ENGINE_get_load_pubkey_function
+#define ENGINE_get_name v1_ENGINE_get_name
+#define ENGINE_get_next v1_ENGINE_get_next
+#define ENGINE_get_pkey_asn1_meth v1_ENGINE_get_pkey_asn1_meth
+#define ENGINE_get_pkey_asn1_meth_engine v1_ENGINE_get_pkey_asn1_meth_engine
+#define ENGINE_get_pkey_asn1_meths v1_ENGINE_get_pkey_asn1_meths
+#define ENGINE_get_pkey_asn1_meth_str v1_ENGINE_get_pkey_asn1_meth_str
+#define ENGINE_get_pkey_meth v1_ENGINE_get_pkey_meth
+#define ENGINE_get_pkey_meth_engine v1_ENGINE_get_pkey_meth_engine
+#define ENGINE_get_pkey_meths v1_ENGINE_get_pkey_meths
+#define ENGINE_get_prev v1_ENGINE_get_prev
+#define ENGINE_get_RAND v1_ENGINE_get_RAND
+#define ENGINE_get_RSA v1_ENGINE_get_RSA
+#define ENGINE_get_ssl_client_cert_function v1_ENGINE_get_ssl_client_cert_function
+#define ENGINE_get_static_state v1_ENGINE_get_static_state
+#define ENGINE_get_table_flags v1_ENGINE_get_table_flags
+#define ENGINE_init v1_ENGINE_init
+#define engine_load_afalg_int v1_engine_load_afalg_int
+#define ENGINE_load_builtin_engines v1_ENGINE_load_builtin_engines
+#define engine_load_capi_int v1_engine_load_capi_int
+#define engine_load_dynamic_int v1_engine_load_dynamic_int
+#define engine_load_openssl_int v1_engine_load_openssl_int
+#define engine_load_padlock_int v1_engine_load_padlock_int
+#define ENGINE_load_private_key v1_ENGINE_load_private_key
+#define ENGINE_load_public_key v1_ENGINE_load_public_key
+#define engine_load_rdrand_int v1_engine_load_rdrand_int
+#define ENGINE_load_ssl_client_cert v1_ENGINE_load_ssl_client_cert
+#define engine_lock_init v1_engine_lock_init
+#define ENGINE_new v1_ENGINE_new
+#define ENGINE_pkey_asn1_find_str v1_ENGINE_pkey_asn1_find_str
+#define engine_pkey_asn1_meths_free v1_engine_pkey_asn1_meths_free
+#define engine_pkey_meths_free v1_engine_pkey_meths_free
+#define ENGINE_register_all_ciphers v1_ENGINE_register_all_ciphers
+#define ENGINE_register_all_complete v1_ENGINE_register_all_complete
+#define ENGINE_register_all_DH v1_ENGINE_register_all_DH
+#define ENGINE_register_all_digests v1_ENGINE_register_all_digests
+#define ENGINE_register_all_DSA v1_ENGINE_register_all_DSA
+#define ENGINE_register_all_EC v1_ENGINE_register_all_EC
+#define ENGINE_register_all_pkey_asn1_meths v1_ENGINE_register_all_pkey_asn1_meths
+#define ENGINE_register_all_pkey_meths v1_ENGINE_register_all_pkey_meths
+#define ENGINE_register_all_RAND v1_ENGINE_register_all_RAND
+#define ENGINE_register_all_RSA v1_ENGINE_register_all_RSA
+#define ENGINE_register_ciphers v1_ENGINE_register_ciphers
+#define ENGINE_register_complete v1_ENGINE_register_complete
+#define ENGINE_register_DH v1_ENGINE_register_DH
+#define ENGINE_register_digests v1_ENGINE_register_digests
+#define ENGINE_register_DSA v1_ENGINE_register_DSA
+#define ENGINE_register_EC v1_ENGINE_register_EC
+#define ENGINE_register_pkey_asn1_meths v1_ENGINE_register_pkey_asn1_meths
+#define ENGINE_register_pkey_meths v1_ENGINE_register_pkey_meths
+#define ENGINE_register_RAND v1_ENGINE_register_RAND
+#define ENGINE_register_RSA v1_ENGINE_register_RSA
+#define ENGINE_remove v1_ENGINE_remove
+#define engine_remove_dynamic_id v1_engine_remove_dynamic_id
+#define engine_set_all_null v1_engine_set_all_null
+#define ENGINE_set_ciphers v1_ENGINE_set_ciphers
+#define ENGINE_set_cmd_defns v1_ENGINE_set_cmd_defns
+#define ENGINE_set_ctrl_function v1_ENGINE_set_ctrl_function
+#define ENGINE_set_default v1_ENGINE_set_default
+#define ENGINE_set_default_ciphers v1_ENGINE_set_default_ciphers
+#define ENGINE_set_default_DH v1_ENGINE_set_default_DH
+#define ENGINE_set_default_digests v1_ENGINE_set_default_digests
+#define ENGINE_set_default_DSA v1_ENGINE_set_default_DSA
+#define ENGINE_set_default_EC v1_ENGINE_set_default_EC
+#define ENGINE_set_default_pkey_asn1_meths v1_ENGINE_set_default_pkey_asn1_meths
+#define ENGINE_set_default_pkey_meths v1_ENGINE_set_default_pkey_meths
+#define ENGINE_set_default_RAND v1_ENGINE_set_default_RAND
+#define ENGINE_set_default_RSA v1_ENGINE_set_default_RSA
+#define ENGINE_set_default_string v1_ENGINE_set_default_string
+#define ENGINE_set_destroy_function v1_ENGINE_set_destroy_function
+#define ENGINE_set_DH v1_ENGINE_set_DH
+#define ENGINE_set_digests v1_ENGINE_set_digests
+#define ENGINE_set_DSA v1_ENGINE_set_DSA
+#define ENGINE_set_EC v1_ENGINE_set_EC
+#define ENGINE_set_ex_data v1_ENGINE_set_ex_data
+#define ENGINE_set_finish_function v1_ENGINE_set_finish_function
+#define ENGINE_set_flags v1_ENGINE_set_flags
+#define ENGINE_set_id v1_ENGINE_set_id
+#define ENGINE_set_init_function v1_ENGINE_set_init_function
+#define ENGINE_set_load_privkey_function v1_ENGINE_set_load_privkey_function
+#define ENGINE_set_load_pubkey_function v1_ENGINE_set_load_pubkey_function
+#define ENGINE_set_load_ssl_client_cert_function v1_ENGINE_set_load_ssl_client_cert_function
+#define ENGINE_set_name v1_ENGINE_set_name
+#define ENGINE_set_pkey_asn1_meths v1_ENGINE_set_pkey_asn1_meths
+#define ENGINE_set_pkey_meths v1_ENGINE_set_pkey_meths
+#define ENGINE_set_RAND v1_ENGINE_set_RAND
+#define ENGINE_set_RSA v1_ENGINE_set_RSA
+#define ENGINE_set_table_flags v1_ENGINE_set_table_flags
+#define engine_table_cleanup v1_engine_table_cleanup
+#define engine_table_doall v1_engine_table_doall
+#define engine_table_register v1_engine_table_register
+#define engine_table_select v1_engine_table_select
+#define engine_table_unregister v1_engine_table_unregister
+#define engine_unlocked_finish v1_engine_unlocked_finish
+#define engine_unlocked_init v1_engine_unlocked_init
+#define ENGINE_unregister_ciphers v1_ENGINE_unregister_ciphers
+#define ENGINE_unregister_DH v1_ENGINE_unregister_DH
+#define ENGINE_unregister_digests v1_ENGINE_unregister_digests
+#define ENGINE_unregister_DSA v1_ENGINE_unregister_DSA
+#define ENGINE_unregister_EC v1_ENGINE_unregister_EC
+#define ENGINE_unregister_pkey_asn1_meths v1_ENGINE_unregister_pkey_asn1_meths
+#define ENGINE_unregister_pkey_meths v1_ENGINE_unregister_pkey_meths
+#define ENGINE_unregister_RAND v1_ENGINE_unregister_RAND
+#define ENGINE_unregister_RSA v1_ENGINE_unregister_RSA
+#define ENGINE_up_ref v1_ENGINE_up_ref
+#define ERR_add_error_data v1_ERR_add_error_data
+#define ERR_add_error_vdata v1_ERR_add_error_vdata
+#define err_cleanup v1_err_cleanup
+#define ERR_clear_error v1_ERR_clear_error
+#define err_clear_last_constant_time v1_err_clear_last_constant_time
+#define ERR_clear_last_mark v1_ERR_clear_last_mark
+#define err_delete_thread_state v1_err_delete_thread_state
+#define ERR_error_string v1_ERR_error_string
+#define ERR_error_string_n v1_ERR_error_string_n
+#define err_free_strings_int v1_err_free_strings_int
+#define ERR_func_error_string v1_ERR_func_error_string
+#define ERR_get_error v1_ERR_get_error
+#define ERR_get_error_line v1_ERR_get_error_line
+#define ERR_get_error_line_data v1_ERR_get_error_line_data
+#define ERR_get_next_error_library v1_ERR_get_next_error_library
+#define ERR_get_state v1_ERR_get_state
+#define ERR_lib_error_string v1_ERR_lib_error_string
+#define ERR_load_ASN1_strings v1_ERR_load_ASN1_strings
+#define ERR_load_ASYNC_strings v1_ERR_load_ASYNC_strings
+#define ERR_load_BIO_strings v1_ERR_load_BIO_strings
+#define ERR_load_BN_strings v1_ERR_load_BN_strings
+#define ERR_load_BUF_strings v1_ERR_load_BUF_strings
+#define ERR_load_CMS_strings v1_ERR_load_CMS_strings
+#define ERR_load_COMP_strings v1_ERR_load_COMP_strings
+#define ERR_load_CONF_strings v1_ERR_load_CONF_strings
+#define ERR_load_CRYPTO_strings v1_ERR_load_CRYPTO_strings
+#define err_load_crypto_strings_int v1_err_load_crypto_strings_int
+#define ERR_load_CT_strings v1_ERR_load_CT_strings
+#define ERR_load_DH_strings v1_ERR_load_DH_strings
+#define ERR_load_DSA_strings v1_ERR_load_DSA_strings
+#define ERR_load_DSO_strings v1_ERR_load_DSO_strings
+#define ERR_load_EC_strings v1_ERR_load_EC_strings
+#define ERR_load_ENGINE_strings v1_ERR_load_ENGINE_strings
+#define ERR_load_ERR_strings v1_ERR_load_ERR_strings
+#define ERR_load_EVP_strings v1_ERR_load_EVP_strings
+#define ERR_load_KDF_strings v1_ERR_load_KDF_strings
+#define ERR_load_OBJ_strings v1_ERR_load_OBJ_strings
+#define ERR_load_OCSP_strings v1_ERR_load_OCSP_strings
+#define ERR_load_OSSL_STORE_strings v1_ERR_load_OSSL_STORE_strings
+#define ERR_load_PEM_strings v1_ERR_load_PEM_strings
+#define ERR_load_PKCS12_strings v1_ERR_load_PKCS12_strings
+#define ERR_load_PKCS7_strings v1_ERR_load_PKCS7_strings
+#define ERR_load_RAND_strings v1_ERR_load_RAND_strings
+#define ERR_load_RSA_strings v1_ERR_load_RSA_strings
+#define ERR_load_SM2_strings v1_ERR_load_SM2_strings
+#define ERR_load_SSL_strings v1_ERR_load_SSL_strings
+#define ERR_load_strings v1_ERR_load_strings
+#define ERR_load_strings_const v1_ERR_load_strings_const
+#define ERR_load_TS_strings v1_ERR_load_TS_strings
+#define ERR_load_UI_strings v1_ERR_load_UI_strings
+#define ERR_load_X509_strings v1_ERR_load_X509_strings
+#define ERR_load_X509V3_strings v1_ERR_load_X509V3_strings
+#define ERR_peek_error v1_ERR_peek_error
+#define ERR_peek_error_line v1_ERR_peek_error_line
+#define ERR_peek_error_line_data v1_ERR_peek_error_line_data
+#define ERR_peek_last_error v1_ERR_peek_last_error
+#define ERR_peek_last_error_line v1_ERR_peek_last_error_line
+#define ERR_peek_last_error_line_data v1_ERR_peek_last_error_line_data
+#define ERR_pop_to_mark v1_ERR_pop_to_mark
+#define ERR_print_errors v1_ERR_print_errors
+#define ERR_print_errors_cb v1_ERR_print_errors_cb
+#define ERR_print_errors_fp v1_ERR_print_errors_fp
+#define ERR_put_error v1_ERR_put_error
+#define ERR_reason_error_string v1_ERR_reason_error_string
+#define ERR_remove_state v1_ERR_remove_state
+#define ERR_remove_thread_state v1_ERR_remove_thread_state
+#define ERR_set_error_data v1_ERR_set_error_data
+#define ERR_set_mark v1_ERR_set_mark
+#define err_shelve_state v1_err_shelve_state
+#define ERR_unload_strings v1_ERR_unload_strings
+#define err_unshelve_state v1_err_unshelve_state
+#define ESS_CERT_ID_dup v1_ESS_CERT_ID_dup
+#define ESS_CERT_ID_free v1_ESS_CERT_ID_free
+#define ESS_CERT_ID_new v1_ESS_CERT_ID_new
+#define ESS_CERT_ID_V2_dup v1_ESS_CERT_ID_V2_dup
+#define ESS_CERT_ID_V2_free v1_ESS_CERT_ID_V2_free
+#define ESS_CERT_ID_V2_new v1_ESS_CERT_ID_V2_new
+#define ESS_ISSUER_SERIAL_dup v1_ESS_ISSUER_SERIAL_dup
+#define ESS_ISSUER_SERIAL_free v1_ESS_ISSUER_SERIAL_free
+#define ESS_ISSUER_SERIAL_new v1_ESS_ISSUER_SERIAL_new
+#define ESS_SIGNING_CERT_dup v1_ESS_SIGNING_CERT_dup
+#define ESS_SIGNING_CERT_free v1_ESS_SIGNING_CERT_free
+#define ESS_SIGNING_CERT_new v1_ESS_SIGNING_CERT_new
+#define ESS_SIGNING_CERT_V2_dup v1_ESS_SIGNING_CERT_V2_dup
+#define ESS_SIGNING_CERT_V2_free v1_ESS_SIGNING_CERT_V2_free
+#define ESS_SIGNING_CERT_V2_new v1_ESS_SIGNING_CERT_V2_new
+#define EVP_add_alg_module v1_EVP_add_alg_module
+#define EVP_add_cipher v1_EVP_add_cipher
+#define EVP_add_digest v1_EVP_add_digest
+#define EVP_aes_128_cbc v1_EVP_aes_128_cbc
+#define EVP_aes_128_cbc_hmac_sha1 v1_EVP_aes_128_cbc_hmac_sha1
+#define EVP_aes_128_cbc_hmac_sha256 v1_EVP_aes_128_cbc_hmac_sha256
+#define EVP_aes_128_ccm v1_EVP_aes_128_ccm
+//#define EVP_aes_128_cfb v1_EVP_aes_128_cfb
+#define EVP_aes_128_cfb1 v1_EVP_aes_128_cfb1
+#define EVP_aes_128_cfb128 v1_EVP_aes_128_cfb128
+#define EVP_aes_128_cfb8 v1_EVP_aes_128_cfb8
+#define EVP_aes_128_ctr v1_EVP_aes_128_ctr
+#define EVP_aes_128_ecb v1_EVP_aes_128_ecb
+#define EVP_aes_128_gcm v1_EVP_aes_128_gcm
+#define EVP_aes_128_ocb v1_EVP_aes_128_ocb
+#define EVP_aes_128_ofb v1_EVP_aes_128_ofb
+#define EVP_aes_128_wrap v1_EVP_aes_128_wrap
+#define EVP_aes_128_wrap_pad v1_EVP_aes_128_wrap_pad
+#define EVP_aes_128_xts v1_EVP_aes_128_xts
+#define EVP_aes_192_cbc v1_EVP_aes_192_cbc
+#define EVP_aes_192_ccm v1_EVP_aes_192_ccm
+//#define EVP_aes_192_cfb v1_EVP_aes_192_cfb
+#define EVP_aes_192_cfb1 v1_EVP_aes_192_cfb1
+#define EVP_aes_192_cfb128 v1_EVP_aes_192_cfb128
+#define EVP_aes_192_cfb8 v1_EVP_aes_192_cfb8
+#define EVP_aes_192_ctr v1_EVP_aes_192_ctr
+#define EVP_aes_192_ecb v1_EVP_aes_192_ecb
+#define EVP_aes_192_gcm v1_EVP_aes_192_gcm
+#define EVP_aes_192_ocb v1_EVP_aes_192_ocb
+#define EVP_aes_192_ofb v1_EVP_aes_192_ofb
+#define EVP_aes_192_wrap v1_EVP_aes_192_wrap
+#define EVP_aes_192_wrap_pad v1_EVP_aes_192_wrap_pad
+#define EVP_aes_256_cbc v1_EVP_aes_256_cbc
+#define EVP_aes_256_cbc_hmac_sha1 v1_EVP_aes_256_cbc_hmac_sha1
+#define EVP_aes_256_cbc_hmac_sha256 v1_EVP_aes_256_cbc_hmac_sha256
+#define EVP_aes_256_ccm v1_EVP_aes_256_ccm
+//#define EVP_aes_256_cfb v1_EVP_aes_256_cfb
+#define EVP_aes_256_cfb1 v1_EVP_aes_256_cfb1
+#define EVP_aes_256_cfb128 v1_EVP_aes_256_cfb128
+#define EVP_aes_256_cfb8 v1_EVP_aes_256_cfb8
+#define EVP_aes_256_ctr v1_EVP_aes_256_ctr
+#define EVP_aes_256_ecb v1_EVP_aes_256_ecb
+#define EVP_aes_256_gcm v1_EVP_aes_256_gcm
+#define EVP_aes_256_ocb v1_EVP_aes_256_ocb
+#define EVP_aes_256_ofb v1_EVP_aes_256_ofb
+#define EVP_aes_256_wrap v1_EVP_aes_256_wrap
+#define EVP_aes_256_wrap_pad v1_EVP_aes_256_wrap_pad
+#define EVP_aes_256_xts v1_EVP_aes_256_xts
+#define evp_app_cleanup_int v1_evp_app_cleanup_int
+#define EVP_aria_128_cbc v1_EVP_aria_128_cbc
+#define EVP_aria_128_ccm v1_EVP_aria_128_ccm
+#define EVP_aria_128_cfb1 v1_EVP_aria_128_cfb1
+#define EVP_aria_128_cfb128 v1_EVP_aria_128_cfb128
+#define EVP_aria_128_cfb8 v1_EVP_aria_128_cfb8
+#define EVP_aria_128_ctr v1_EVP_aria_128_ctr
+#define EVP_aria_128_ecb v1_EVP_aria_128_ecb
+#define EVP_aria_128_gcm v1_EVP_aria_128_gcm
+#define EVP_aria_128_ofb v1_EVP_aria_128_ofb
+#define EVP_aria_192_cbc v1_EVP_aria_192_cbc
+#define EVP_aria_192_ccm v1_EVP_aria_192_ccm
+#define EVP_aria_192_cfb1 v1_EVP_aria_192_cfb1
+#define EVP_aria_192_cfb128 v1_EVP_aria_192_cfb128
+#define EVP_aria_192_cfb8 v1_EVP_aria_192_cfb8
+#define EVP_aria_192_ctr v1_EVP_aria_192_ctr
+#define EVP_aria_192_ecb v1_EVP_aria_192_ecb
+#define EVP_aria_192_gcm v1_EVP_aria_192_gcm
+#define EVP_aria_192_ofb v1_EVP_aria_192_ofb
+#define EVP_aria_256_cbc v1_EVP_aria_256_cbc
+#define EVP_aria_256_ccm v1_EVP_aria_256_ccm
+#define EVP_aria_256_cfb1 v1_EVP_aria_256_cfb1
+#define EVP_aria_256_cfb128 v1_EVP_aria_256_cfb128
+#define EVP_aria_256_cfb8 v1_EVP_aria_256_cfb8
+#define EVP_aria_256_ctr v1_EVP_aria_256_ctr
+#define EVP_aria_256_ecb v1_EVP_aria_256_ecb
+#define EVP_aria_256_gcm v1_EVP_aria_256_gcm
+#define EVP_aria_256_ofb v1_EVP_aria_256_ofb
+#define EVP_bf_cbc v1_EVP_bf_cbc
+//#define EVP_bf_cfb v1_EVP_bf_cfb
+#define EVP_bf_cfb64 v1_EVP_bf_cfb64
+#define EVP_bf_ecb v1_EVP_bf_ecb
+#define EVP_bf_ofb v1_EVP_bf_ofb
+#define EVP_blake2b512 v1_EVP_blake2b512
+#define EVP_blake2s256 v1_EVP_blake2s256
+#define EVP_BytesToKey v1_EVP_BytesToKey
+#define EVP_camellia_128_cbc v1_EVP_camellia_128_cbc
+#define EVP_camellia_128_cfb1 v1_EVP_camellia_128_cfb1
+#define EVP_camellia_128_cfb128 v1_EVP_camellia_128_cfb128
+#define EVP_camellia_128_cfb8 v1_EVP_camellia_128_cfb8
+#define EVP_camellia_128_ctr v1_EVP_camellia_128_ctr
+#define EVP_camellia_128_ecb v1_EVP_camellia_128_ecb
+#define EVP_camellia_128_ofb v1_EVP_camellia_128_ofb
+#define EVP_camellia_192_cbc v1_EVP_camellia_192_cbc
+#define EVP_camellia_192_cfb1 v1_EVP_camellia_192_cfb1
+#define EVP_camellia_192_cfb128 v1_EVP_camellia_192_cfb128
+#define EVP_camellia_192_cfb8 v1_EVP_camellia_192_cfb8
+#define EVP_camellia_192_ctr v1_EVP_camellia_192_ctr
+#define EVP_camellia_192_ecb v1_EVP_camellia_192_ecb
+#define EVP_camellia_192_ofb v1_EVP_camellia_192_ofb
+#define EVP_camellia_256_cbc v1_EVP_camellia_256_cbc
+#define EVP_camellia_256_cfb1 v1_EVP_camellia_256_cfb1
+#define EVP_camellia_256_cfb128 v1_EVP_camellia_256_cfb128
+#define EVP_camellia_256_cfb8 v1_EVP_camellia_256_cfb8
+#define EVP_camellia_256_ctr v1_EVP_camellia_256_ctr
+#define EVP_camellia_256_ecb v1_EVP_camellia_256_ecb
+#define EVP_camellia_256_ofb v1_EVP_camellia_256_ofb
+#define EVP_cast5_cbc v1_EVP_cast5_cbc
+//#define EVP_cast5_cfb v1_EVP_cast5_cfb
+#define EVP_cast5_cfb64 v1_EVP_cast5_cfb64
+#define EVP_cast5_ecb v1_EVP_cast5_ecb
+#define EVP_cast5_ofb v1_EVP_cast5_ofb
+#define EVP_chacha20 v1_EVP_chacha20
+#define EVP_chacha20_poly1305 v1_EVP_chacha20_poly1305
+#define EVP_Cipher v1_EVP_Cipher
+#define EVP_CIPHER_asn1_to_param v1_EVP_CIPHER_asn1_to_param
+#define EVP_CIPHER_block_size v1_EVP_CIPHER_block_size
+#define EVP_CIPHER_CTX_block_size v1_EVP_CIPHER_CTX_block_size
+#define EVP_CIPHER_CTX_buf_noconst v1_EVP_CIPHER_CTX_buf_noconst
+#define EVP_CIPHER_CTX_cipher v1_EVP_CIPHER_CTX_cipher
+#define EVP_CIPHER_CTX_clear_flags v1_EVP_CIPHER_CTX_clear_flags
+#define EVP_CIPHER_CTX_copy v1_EVP_CIPHER_CTX_copy
+#define EVP_CIPHER_CTX_ctrl v1_EVP_CIPHER_CTX_ctrl
+#define EVP_CIPHER_CTX_encrypting v1_EVP_CIPHER_CTX_encrypting
+#define EVP_CIPHER_CTX_free v1_EVP_CIPHER_CTX_free
+#define EVP_CIPHER_CTX_get_app_data v1_EVP_CIPHER_CTX_get_app_data
+#define EVP_CIPHER_CTX_get_cipher_data v1_EVP_CIPHER_CTX_get_cipher_data
+#define EVP_CIPHER_CTX_iv v1_EVP_CIPHER_CTX_iv
+#define EVP_CIPHER_CTX_iv_length v1_EVP_CIPHER_CTX_iv_length
+#define EVP_CIPHER_CTX_iv_noconst v1_EVP_CIPHER_CTX_iv_noconst
+#define EVP_CIPHER_CTX_key_length v1_EVP_CIPHER_CTX_key_length
+#define EVP_CIPHER_CTX_new v1_EVP_CIPHER_CTX_new
+#define EVP_CIPHER_CTX_nid v1_EVP_CIPHER_CTX_nid
+#define EVP_CIPHER_CTX_num v1_EVP_CIPHER_CTX_num
+#define EVP_CIPHER_CTX_original_iv v1_EVP_CIPHER_CTX_original_iv
+#define EVP_CIPHER_CTX_rand_key v1_EVP_CIPHER_CTX_rand_key
+#define EVP_CIPHER_CTX_reset v1_EVP_CIPHER_CTX_reset
+#define EVP_CIPHER_CTX_set_app_data v1_EVP_CIPHER_CTX_set_app_data
+#define EVP_CIPHER_CTX_set_cipher_data v1_EVP_CIPHER_CTX_set_cipher_data
+#define EVP_CIPHER_CTX_set_flags v1_EVP_CIPHER_CTX_set_flags
+#define EVP_CIPHER_CTX_set_key_length v1_EVP_CIPHER_CTX_set_key_length
+#define EVP_CIPHER_CTX_set_num v1_EVP_CIPHER_CTX_set_num
+#define EVP_CIPHER_CTX_set_padding v1_EVP_CIPHER_CTX_set_padding
+#define EVP_CIPHER_CTX_test_flags v1_EVP_CIPHER_CTX_test_flags
+#define EVP_CIPHER_do_all v1_EVP_CIPHER_do_all
+#define EVP_CIPHER_do_all_sorted v1_EVP_CIPHER_do_all_sorted
+#define EVP_CipherFinal v1_EVP_CipherFinal
+#define EVP_CipherFinal_ex v1_EVP_CipherFinal_ex
+#define EVP_CIPHER_flags v1_EVP_CIPHER_flags
+#define EVP_CIPHER_get_asn1_iv v1_EVP_CIPHER_get_asn1_iv
+#define EVP_CIPHER_impl_ctx_size v1_EVP_CIPHER_impl_ctx_size
+#define EVP_CipherInit v1_EVP_CipherInit
+#define EVP_CipherInit_ex v1_EVP_CipherInit_ex
+#define EVP_CIPHER_iv_length v1_EVP_CIPHER_iv_length
+#define EVP_CIPHER_key_length v1_EVP_CIPHER_key_length
+#define EVP_CIPHER_meth_dup v1_EVP_CIPHER_meth_dup
+#define EVP_CIPHER_meth_free v1_EVP_CIPHER_meth_free
+#define EVP_CIPHER_meth_get_cleanup v1_EVP_CIPHER_meth_get_cleanup
+#define EVP_CIPHER_meth_get_ctrl v1_EVP_CIPHER_meth_get_ctrl
+#define EVP_CIPHER_meth_get_do_cipher v1_EVP_CIPHER_meth_get_do_cipher
+#define EVP_CIPHER_meth_get_get_asn1_params v1_EVP_CIPHER_meth_get_get_asn1_params
+#define EVP_CIPHER_meth_get_init v1_EVP_CIPHER_meth_get_init
+#define EVP_CIPHER_meth_get_set_asn1_params v1_EVP_CIPHER_meth_get_set_asn1_params
+#define EVP_CIPHER_meth_new v1_EVP_CIPHER_meth_new
+#define EVP_CIPHER_meth_set_cleanup v1_EVP_CIPHER_meth_set_cleanup
+#define EVP_CIPHER_meth_set_ctrl v1_EVP_CIPHER_meth_set_ctrl
+#define EVP_CIPHER_meth_set_do_cipher v1_EVP_CIPHER_meth_set_do_cipher
+#define EVP_CIPHER_meth_set_flags v1_EVP_CIPHER_meth_set_flags
+#define EVP_CIPHER_meth_set_get_asn1_params v1_EVP_CIPHER_meth_set_get_asn1_params
+#define EVP_CIPHER_meth_set_impl_ctx_size v1_EVP_CIPHER_meth_set_impl_ctx_size
+#define EVP_CIPHER_meth_set_init v1_EVP_CIPHER_meth_set_init
+#define EVP_CIPHER_meth_set_iv_length v1_EVP_CIPHER_meth_set_iv_length
+#define EVP_CIPHER_meth_set_set_asn1_params v1_EVP_CIPHER_meth_set_set_asn1_params
+#define EVP_CIPHER_nid v1_EVP_CIPHER_nid
+#define EVP_CIPHER_param_to_asn1 v1_EVP_CIPHER_param_to_asn1
+#define EVP_CIPHER_set_asn1_iv v1_EVP_CIPHER_set_asn1_iv
+#define EVP_CIPHER_type v1_EVP_CIPHER_type
+#define EVP_CipherUpdate v1_EVP_CipherUpdate
+#define evp_cleanup_int v1_evp_cleanup_int
+#define EVP_DecodeBlock v1_EVP_DecodeBlock
+#define EVP_DecodeFinal v1_EVP_DecodeFinal
+#define EVP_DecodeInit v1_EVP_DecodeInit
+#define EVP_DecodeUpdate v1_EVP_DecodeUpdate
+#define EVP_DecryptFinal v1_EVP_DecryptFinal
+#define EVP_DecryptFinal_ex v1_EVP_DecryptFinal_ex
+#define EVP_DecryptInit v1_EVP_DecryptInit
+#define EVP_DecryptInit_ex v1_EVP_DecryptInit_ex
+#define EVP_DecryptUpdate v1_EVP_DecryptUpdate
+#define EVP_des_cbc v1_EVP_des_cbc
+//#define EVP_des_cfb v1_EVP_des_cfb
+#define EVP_des_cfb1 v1_EVP_des_cfb1
+#define EVP_des_cfb64 v1_EVP_des_cfb64
+#define EVP_des_cfb8 v1_EVP_des_cfb8
+#define EVP_des_ecb v1_EVP_des_ecb
+#define EVP_des_ede v1_EVP_des_ede
+#define EVP_des_ede3 v1_EVP_des_ede3
+#define EVP_des_ede3_cbc v1_EVP_des_ede3_cbc
+//#define EVP_des_ede3_cfb v1_EVP_des_ede3_cfb
+#define EVP_des_ede3_cfb1 v1_EVP_des_ede3_cfb1
+#define EVP_des_ede3_cfb64 v1_EVP_des_ede3_cfb64
+#define EVP_des_ede3_cfb8 v1_EVP_des_ede3_cfb8
+#define EVP_des_ede3_ecb v1_EVP_des_ede3_ecb
+#define EVP_des_ede3_ofb v1_EVP_des_ede3_ofb
+#define EVP_des_ede3_wrap v1_EVP_des_ede3_wrap
+#define EVP_des_ede_cbc v1_EVP_des_ede_cbc
+//#define EVP_des_ede_cfb v1_EVP_des_ede_cfb
+#define EVP_des_ede_cfb64 v1_EVP_des_ede_cfb64
+#define EVP_des_ede_ecb v1_EVP_des_ede_ecb
+#define EVP_des_ede_ofb v1_EVP_des_ede_ofb
+#define EVP_des_ofb v1_EVP_des_ofb
+#define EVP_desx_cbc v1_EVP_desx_cbc
+#define EVP_Digest v1_EVP_Digest
+#define EVP_DigestFinal v1_EVP_DigestFinal
+#define EVP_DigestFinal_ex v1_EVP_DigestFinal_ex
+#define EVP_DigestFinalXOF v1_EVP_DigestFinalXOF
+#define EVP_DigestInit v1_EVP_DigestInit
+#define EVP_DigestInit_ex v1_EVP_DigestInit_ex
+#define EVP_DigestSign v1_EVP_DigestSign
+#define EVP_DigestSignFinal v1_EVP_DigestSignFinal
+#define EVP_DigestSignInit v1_EVP_DigestSignInit
+#define EVP_DigestUpdate v1_EVP_DigestUpdate
+#define EVP_DigestVerify v1_EVP_DigestVerify
+#define EVP_DigestVerifyFinal v1_EVP_DigestVerifyFinal
+#define EVP_DigestVerifyInit v1_EVP_DigestVerifyInit
+#define EVP_enc_null v1_EVP_enc_null
+#define EVP_EncodeBlock v1_EVP_EncodeBlock
+#define EVP_ENCODE_CTX_copy v1_EVP_ENCODE_CTX_copy
+#define EVP_ENCODE_CTX_free v1_EVP_ENCODE_CTX_free
+#define EVP_ENCODE_CTX_new v1_EVP_ENCODE_CTX_new
+#define EVP_ENCODE_CTX_num v1_EVP_ENCODE_CTX_num
+#define evp_encode_ctx_set_flags v1_evp_encode_ctx_set_flags
+#define EVP_EncodeFinal v1_EVP_EncodeFinal
+#define EVP_EncodeInit v1_EVP_EncodeInit
+#define EVP_EncodeUpdate v1_EVP_EncodeUpdate
+#define EVP_EncryptFinal v1_EVP_EncryptFinal
+#define EVP_EncryptFinal_ex v1_EVP_EncryptFinal_ex
+#define EVP_EncryptInit v1_EVP_EncryptInit
+#define EVP_EncryptInit_ex v1_EVP_EncryptInit_ex
+#define EVP_EncryptUpdate v1_EVP_EncryptUpdate
+#define EVP_get_cipherbyname v1_EVP_get_cipherbyname
+#define EVP_get_digestbyname v1_EVP_get_digestbyname
+#define EVP_get_pw_prompt v1_EVP_get_pw_prompt
+#define EVP_idea_cbc v1_EVP_idea_cbc
+//#define EVP_idea_cfb v1_EVP_idea_cfb
+#define EVP_idea_cfb64 v1_EVP_idea_cfb64
+#define EVP_idea_ecb v1_EVP_idea_ecb
+#define EVP_idea_ofb v1_EVP_idea_ofb
+#define EVP_md4 v1_EVP_md4
+#define EVP_md5 v1_EVP_md5
+#define EVP_md5_sha1 v1_EVP_md5_sha1
+#define EVP_MD_block_size v1_EVP_MD_block_size
+#define EVP_mdc2 v1_EVP_mdc2
+#define EVP_MD_CTX_clear_flags v1_EVP_MD_CTX_clear_flags
+#define EVP_MD_CTX_copy v1_EVP_MD_CTX_copy
+#define EVP_MD_CTX_copy_ex v1_EVP_MD_CTX_copy_ex
+#define EVP_MD_CTX_ctrl v1_EVP_MD_CTX_ctrl
+#define EVP_MD_CTX_free v1_EVP_MD_CTX_free
+#define EVP_MD_CTX_md v1_EVP_MD_CTX_md
+#define EVP_MD_CTX_md_data v1_EVP_MD_CTX_md_data
+#define EVP_MD_CTX_new v1_EVP_MD_CTX_new
+#define EVP_MD_CTX_pkey_ctx v1_EVP_MD_CTX_pkey_ctx
+#define EVP_MD_CTX_reset v1_EVP_MD_CTX_reset
+#define EVP_MD_CTX_set_flags v1_EVP_MD_CTX_set_flags
+#define EVP_MD_CTX_set_pkey_ctx v1_EVP_MD_CTX_set_pkey_ctx
+#define EVP_MD_CTX_set_update_fn v1_EVP_MD_CTX_set_update_fn
+#define EVP_MD_CTX_test_flags v1_EVP_MD_CTX_test_flags
+#define EVP_MD_CTX_update_fn v1_EVP_MD_CTX_update_fn
+#define EVP_MD_do_all v1_EVP_MD_do_all
+#define EVP_MD_do_all_sorted v1_EVP_MD_do_all_sorted
+#define EVP_MD_flags v1_EVP_MD_flags
+#define EVP_MD_meth_dup v1_EVP_MD_meth_dup
+#define EVP_MD_meth_free v1_EVP_MD_meth_free
+#define EVP_MD_meth_get_app_datasize v1_EVP_MD_meth_get_app_datasize
+#define EVP_MD_meth_get_cleanup v1_EVP_MD_meth_get_cleanup
+#define EVP_MD_meth_get_copy v1_EVP_MD_meth_get_copy
+#define EVP_MD_meth_get_ctrl v1_EVP_MD_meth_get_ctrl
+#define EVP_MD_meth_get_final v1_EVP_MD_meth_get_final
+#define EVP_MD_meth_get_flags v1_EVP_MD_meth_get_flags
+#define EVP_MD_meth_get_init v1_EVP_MD_meth_get_init
+#define EVP_MD_meth_get_input_blocksize v1_EVP_MD_meth_get_input_blocksize
+#define EVP_MD_meth_get_result_size v1_EVP_MD_meth_get_result_size
+#define EVP_MD_meth_get_update v1_EVP_MD_meth_get_update
+#define EVP_MD_meth_new v1_EVP_MD_meth_new
+#define EVP_MD_meth_set_app_datasize v1_EVP_MD_meth_set_app_datasize
+#define EVP_MD_meth_set_cleanup v1_EVP_MD_meth_set_cleanup
+#define EVP_MD_meth_set_copy v1_EVP_MD_meth_set_copy
+#define EVP_MD_meth_set_ctrl v1_EVP_MD_meth_set_ctrl
+#define EVP_MD_meth_set_final v1_EVP_MD_meth_set_final
+#define EVP_MD_meth_set_flags v1_EVP_MD_meth_set_flags
+#define EVP_MD_meth_set_init v1_EVP_MD_meth_set_init
+#define EVP_MD_meth_set_input_blocksize v1_EVP_MD_meth_set_input_blocksize
+#define EVP_MD_meth_set_result_size v1_EVP_MD_meth_set_result_size
+#define EVP_MD_meth_set_update v1_EVP_MD_meth_set_update
+#define EVP_md_null v1_EVP_md_null
+#define EVP_MD_pkey_type v1_EVP_MD_pkey_type
+#define EVP_MD_size v1_EVP_MD_size
+#define EVP_MD_type v1_EVP_MD_type
+#define EVP_OpenFinal v1_EVP_OpenFinal
+#define EVP_OpenInit v1_EVP_OpenInit
+#define EVP_PBE_alg_add v1_EVP_PBE_alg_add
+#define EVP_PBE_alg_add_type v1_EVP_PBE_alg_add_type
+#define EVP_PBE_CipherInit v1_EVP_PBE_CipherInit
+#define EVP_PBE_cleanup v1_EVP_PBE_cleanup
+#define EVP_PBE_find v1_EVP_PBE_find
+#define EVP_PBE_get v1_EVP_PBE_get
+#define EVP_PBE_scrypt v1_EVP_PBE_scrypt
+#define EVP_PKCS82PKEY v1_EVP_PKCS82PKEY
+#define EVP_PKEY2PKCS8 v1_EVP_PKEY2PKCS8
+#define EVP_PKEY_add1_attr v1_EVP_PKEY_add1_attr
+#define EVP_PKEY_add1_attr_by_NID v1_EVP_PKEY_add1_attr_by_NID
+#define EVP_PKEY_add1_attr_by_OBJ v1_EVP_PKEY_add1_attr_by_OBJ
+#define EVP_PKEY_add1_attr_by_txt v1_EVP_PKEY_add1_attr_by_txt
+#define EVP_PKEY_asn1_add0 v1_EVP_PKEY_asn1_add0
+#define EVP_PKEY_asn1_add_alias v1_EVP_PKEY_asn1_add_alias
+#define EVP_PKEY_asn1_copy v1_EVP_PKEY_asn1_copy
+#define EVP_PKEY_asn1_find v1_EVP_PKEY_asn1_find
+#define EVP_PKEY_asn1_find_str v1_EVP_PKEY_asn1_find_str
+#define EVP_PKEY_asn1_free v1_EVP_PKEY_asn1_free
+#define EVP_PKEY_asn1_get0 v1_EVP_PKEY_asn1_get0
+#define EVP_PKEY_asn1_get0_info v1_EVP_PKEY_asn1_get0_info
+#define EVP_PKEY_asn1_get_count v1_EVP_PKEY_asn1_get_count
+#define EVP_PKEY_asn1_new v1_EVP_PKEY_asn1_new
+#define EVP_PKEY_asn1_set_check v1_EVP_PKEY_asn1_set_check
+#define EVP_PKEY_asn1_set_ctrl v1_EVP_PKEY_asn1_set_ctrl
+#define EVP_PKEY_asn1_set_free v1_EVP_PKEY_asn1_set_free
+#define EVP_PKEY_asn1_set_get_priv_key v1_EVP_PKEY_asn1_set_get_priv_key
+#define EVP_PKEY_asn1_set_get_pub_key v1_EVP_PKEY_asn1_set_get_pub_key
+#define EVP_PKEY_asn1_set_item v1_EVP_PKEY_asn1_set_item
+#define EVP_PKEY_asn1_set_param v1_EVP_PKEY_asn1_set_param
+#define EVP_PKEY_asn1_set_param_check v1_EVP_PKEY_asn1_set_param_check
+#define EVP_PKEY_asn1_set_private v1_EVP_PKEY_asn1_set_private
+#define EVP_PKEY_asn1_set_public v1_EVP_PKEY_asn1_set_public
+#define EVP_PKEY_asn1_set_public_check v1_EVP_PKEY_asn1_set_public_check
+#define EVP_PKEY_asn1_set_security_bits v1_EVP_PKEY_asn1_set_security_bits
+#define EVP_PKEY_asn1_set_set_priv_key v1_EVP_PKEY_asn1_set_set_priv_key
+#define EVP_PKEY_asn1_set_set_pub_key v1_EVP_PKEY_asn1_set_set_pub_key
+#define EVP_PKEY_asn1_set_siginf v1_EVP_PKEY_asn1_set_siginf
+#define EVP_PKEY_assign v1_EVP_PKEY_assign
+#define EVP_PKEY_base_id v1_EVP_PKEY_base_id
+#define EVP_PKEY_bits v1_EVP_PKEY_bits
+#define EVP_PKEY_check v1_EVP_PKEY_check
+#define EVP_PKEY_cmp v1_EVP_PKEY_cmp
+#define EVP_PKEY_cmp_parameters v1_EVP_PKEY_cmp_parameters
+#define EVP_PKEY_copy_parameters v1_EVP_PKEY_copy_parameters
+#define EVP_PKEY_CTX_ctrl v1_EVP_PKEY_CTX_ctrl
+#define EVP_PKEY_CTX_ctrl_str v1_EVP_PKEY_CTX_ctrl_str
+#define EVP_PKEY_CTX_ctrl_uint64 v1_EVP_PKEY_CTX_ctrl_uint64
+#define EVP_PKEY_CTX_dup v1_EVP_PKEY_CTX_dup
+#define EVP_PKEY_CTX_free v1_EVP_PKEY_CTX_free
+#define EVP_PKEY_CTX_get0_peerkey v1_EVP_PKEY_CTX_get0_peerkey
+#define EVP_PKEY_CTX_get0_pkey v1_EVP_PKEY_CTX_get0_pkey
+#define EVP_PKEY_CTX_get_app_data v1_EVP_PKEY_CTX_get_app_data
+#define EVP_PKEY_CTX_get_cb v1_EVP_PKEY_CTX_get_cb
+#define EVP_PKEY_CTX_get_data v1_EVP_PKEY_CTX_get_data
+#define EVP_PKEY_CTX_get_keygen_info v1_EVP_PKEY_CTX_get_keygen_info
+#define EVP_PKEY_CTX_get_operation v1_EVP_PKEY_CTX_get_operation
+#define EVP_PKEY_CTX_hex2ctrl v1_EVP_PKEY_CTX_hex2ctrl
+#define EVP_PKEY_CTX_md v1_EVP_PKEY_CTX_md
+#define EVP_PKEY_CTX_new v1_EVP_PKEY_CTX_new
+#define EVP_PKEY_CTX_new_id v1_EVP_PKEY_CTX_new_id
+#define EVP_PKEY_CTX_set0_keygen_info v1_EVP_PKEY_CTX_set0_keygen_info
+#define EVP_PKEY_CTX_set_app_data v1_EVP_PKEY_CTX_set_app_data
+#define EVP_PKEY_CTX_set_cb v1_EVP_PKEY_CTX_set_cb
+#define EVP_PKEY_CTX_set_data v1_EVP_PKEY_CTX_set_data
+#define EVP_PKEY_CTX_str2ctrl v1_EVP_PKEY_CTX_str2ctrl
+#define EVP_PKEY_decrypt v1_EVP_PKEY_decrypt
+#define EVP_PKEY_decrypt_init v1_EVP_PKEY_decrypt_init
+#define EVP_PKEY_decrypt_old v1_EVP_PKEY_decrypt_old
+#define EVP_PKEY_delete_attr v1_EVP_PKEY_delete_attr
+#define EVP_PKEY_derive v1_EVP_PKEY_derive
+#define EVP_PKEY_derive_init v1_EVP_PKEY_derive_init
+#define EVP_PKEY_derive_set_peer v1_EVP_PKEY_derive_set_peer
+#define EVP_PKEY_encrypt v1_EVP_PKEY_encrypt
+#define EVP_PKEY_encrypt_init v1_EVP_PKEY_encrypt_init
+#define EVP_PKEY_encrypt_old v1_EVP_PKEY_encrypt_old
+#define EVP_PKEY_free v1_EVP_PKEY_free
+#define EVP_PKEY_get0 v1_EVP_PKEY_get0
+#define EVP_PKEY_get0_asn1 v1_EVP_PKEY_get0_asn1
+#define EVP_PKEY_get0_DH v1_EVP_PKEY_get0_DH
+#define EVP_PKEY_get0_DSA v1_EVP_PKEY_get0_DSA
+#define EVP_PKEY_get0_EC_KEY v1_EVP_PKEY_get0_EC_KEY
+#define EVP_PKEY_get0_engine v1_EVP_PKEY_get0_engine
+#define EVP_PKEY_get0_hmac v1_EVP_PKEY_get0_hmac
+#define EVP_PKEY_get0_poly1305 v1_EVP_PKEY_get0_poly1305
+#define EVP_PKEY_get0_RSA v1_EVP_PKEY_get0_RSA
+#define EVP_PKEY_get0_siphash v1_EVP_PKEY_get0_siphash
+#define EVP_PKEY_get1_DH v1_EVP_PKEY_get1_DH
+#define EVP_PKEY_get1_DSA v1_EVP_PKEY_get1_DSA
+#define EVP_PKEY_get1_EC_KEY v1_EVP_PKEY_get1_EC_KEY
+#define EVP_PKEY_get1_RSA v1_EVP_PKEY_get1_RSA
+#define EVP_PKEY_get1_tls_encodedpoint v1_EVP_PKEY_get1_tls_encodedpoint
+#define EVP_PKEY_get_attr v1_EVP_PKEY_get_attr
+#define EVP_PKEY_get_attr_by_NID v1_EVP_PKEY_get_attr_by_NID
+#define EVP_PKEY_get_attr_by_OBJ v1_EVP_PKEY_get_attr_by_OBJ
+#define EVP_PKEY_get_attr_count v1_EVP_PKEY_get_attr_count
+#define EVP_PKEY_get_default_digest_nid v1_EVP_PKEY_get_default_digest_nid
+#define EVP_PKEY_get_raw_private_key v1_EVP_PKEY_get_raw_private_key
+#define EVP_PKEY_get_raw_public_key v1_EVP_PKEY_get_raw_public_key
+#define EVP_PKEY_id v1_EVP_PKEY_id
+#define EVP_PKEY_keygen v1_EVP_PKEY_keygen
+#define EVP_PKEY_keygen_init v1_EVP_PKEY_keygen_init
+#define EVP_PKEY_meth_add0 v1_EVP_PKEY_meth_add0
+#define EVP_PKEY_meth_copy v1_EVP_PKEY_meth_copy
+#define EVP_PKEY_meth_find v1_EVP_PKEY_meth_find
+#define EVP_PKEY_meth_free v1_EVP_PKEY_meth_free
+#define EVP_PKEY_meth_get0 v1_EVP_PKEY_meth_get0
+#define EVP_PKEY_meth_get0_info v1_EVP_PKEY_meth_get0_info
+#define EVP_PKEY_meth_get_check v1_EVP_PKEY_meth_get_check
+#define EVP_PKEY_meth_get_cleanup v1_EVP_PKEY_meth_get_cleanup
+#define EVP_PKEY_meth_get_copy v1_EVP_PKEY_meth_get_copy
+#define EVP_PKEY_meth_get_count v1_EVP_PKEY_meth_get_count
+#define EVP_PKEY_meth_get_ctrl v1_EVP_PKEY_meth_get_ctrl
+#define EVP_PKEY_meth_get_decrypt v1_EVP_PKEY_meth_get_decrypt
+#define EVP_PKEY_meth_get_derive v1_EVP_PKEY_meth_get_derive
+#define EVP_PKEY_meth_get_digest_custom v1_EVP_PKEY_meth_get_digest_custom
+#define EVP_PKEY_meth_get_digestsign v1_EVP_PKEY_meth_get_digestsign
+#define EVP_PKEY_meth_get_digestverify v1_EVP_PKEY_meth_get_digestverify
+#define EVP_PKEY_meth_get_encrypt v1_EVP_PKEY_meth_get_encrypt
+#define EVP_PKEY_meth_get_init v1_EVP_PKEY_meth_get_init
+#define EVP_PKEY_meth_get_keygen v1_EVP_PKEY_meth_get_keygen
+#define EVP_PKEY_meth_get_param_check v1_EVP_PKEY_meth_get_param_check
+#define EVP_PKEY_meth_get_paramgen v1_EVP_PKEY_meth_get_paramgen
+#define EVP_PKEY_meth_get_public_check v1_EVP_PKEY_meth_get_public_check
+#define EVP_PKEY_meth_get_sign v1_EVP_PKEY_meth_get_sign
+#define EVP_PKEY_meth_get_signctx v1_EVP_PKEY_meth_get_signctx
+#define EVP_PKEY_meth_get_verify v1_EVP_PKEY_meth_get_verify
+#define EVP_PKEY_meth_get_verifyctx v1_EVP_PKEY_meth_get_verifyctx
+#define EVP_PKEY_meth_get_verify_recover v1_EVP_PKEY_meth_get_verify_recover
+#define EVP_PKEY_meth_new v1_EVP_PKEY_meth_new
+#define EVP_PKEY_meth_remove v1_EVP_PKEY_meth_remove
+#define EVP_PKEY_meth_set_check v1_EVP_PKEY_meth_set_check
+#define EVP_PKEY_meth_set_cleanup v1_EVP_PKEY_meth_set_cleanup
+#define EVP_PKEY_meth_set_copy v1_EVP_PKEY_meth_set_copy
+#define EVP_PKEY_meth_set_ctrl v1_EVP_PKEY_meth_set_ctrl
+#define EVP_PKEY_meth_set_decrypt v1_EVP_PKEY_meth_set_decrypt
+#define EVP_PKEY_meth_set_derive v1_EVP_PKEY_meth_set_derive
+#define EVP_PKEY_meth_set_digest_custom v1_EVP_PKEY_meth_set_digest_custom
+#define EVP_PKEY_meth_set_digestsign v1_EVP_PKEY_meth_set_digestsign
+#define EVP_PKEY_meth_set_digestverify v1_EVP_PKEY_meth_set_digestverify
+#define EVP_PKEY_meth_set_encrypt v1_EVP_PKEY_meth_set_encrypt
+#define EVP_PKEY_meth_set_init v1_EVP_PKEY_meth_set_init
+#define EVP_PKEY_meth_set_keygen v1_EVP_PKEY_meth_set_keygen
+#define EVP_PKEY_meth_set_param_check v1_EVP_PKEY_meth_set_param_check
+#define EVP_PKEY_meth_set_paramgen v1_EVP_PKEY_meth_set_paramgen
+#define EVP_PKEY_meth_set_public_check v1_EVP_PKEY_meth_set_public_check
+#define EVP_PKEY_meth_set_sign v1_EVP_PKEY_meth_set_sign
+#define EVP_PKEY_meth_set_signctx v1_EVP_PKEY_meth_set_signctx
+#define EVP_PKEY_meth_set_verify v1_EVP_PKEY_meth_set_verify
+#define EVP_PKEY_meth_set_verifyctx v1_EVP_PKEY_meth_set_verifyctx
+#define EVP_PKEY_meth_set_verify_recover v1_EVP_PKEY_meth_set_verify_recover
+#define EVP_PKEY_missing_parameters v1_EVP_PKEY_missing_parameters
+#define EVP_PKEY_new v1_EVP_PKEY_new
+#define EVP_PKEY_new_CMAC_key v1_EVP_PKEY_new_CMAC_key
+#define EVP_PKEY_new_mac_key v1_EVP_PKEY_new_mac_key
+#define EVP_PKEY_new_raw_private_key v1_EVP_PKEY_new_raw_private_key
+#define EVP_PKEY_new_raw_public_key v1_EVP_PKEY_new_raw_public_key
+#define EVP_PKEY_param_check v1_EVP_PKEY_param_check
+#define EVP_PKEY_paramgen v1_EVP_PKEY_paramgen
+#define EVP_PKEY_paramgen_init v1_EVP_PKEY_paramgen_init
+#define EVP_PKEY_print_params v1_EVP_PKEY_print_params
+#define EVP_PKEY_print_private v1_EVP_PKEY_print_private
+#define EVP_PKEY_print_public v1_EVP_PKEY_print_public
+#define EVP_PKEY_public_check v1_EVP_PKEY_public_check
+#define EVP_PKEY_save_parameters v1_EVP_PKEY_save_parameters
+#define EVP_PKEY_security_bits v1_EVP_PKEY_security_bits
+#define EVP_PKEY_set1_DH v1_EVP_PKEY_set1_DH
+#define EVP_PKEY_set1_DSA v1_EVP_PKEY_set1_DSA
+#define EVP_PKEY_set1_EC_KEY v1_EVP_PKEY_set1_EC_KEY
+#define EVP_PKEY_set1_engine v1_EVP_PKEY_set1_engine
+#define EVP_PKEY_set1_RSA v1_EVP_PKEY_set1_RSA
+#define EVP_PKEY_set1_tls_encodedpoint v1_EVP_PKEY_set1_tls_encodedpoint
+#define EVP_PKEY_set_alias_type v1_EVP_PKEY_set_alias_type
+#define evp_pkey_set_cb_translate v1_evp_pkey_set_cb_translate
+#define EVP_PKEY_set_type v1_EVP_PKEY_set_type
+#define EVP_PKEY_set_type_str v1_EVP_PKEY_set_type_str
+#define EVP_PKEY_sign v1_EVP_PKEY_sign
+#define EVP_PKEY_sign_init v1_EVP_PKEY_sign_init
+#define EVP_PKEY_size v1_EVP_PKEY_size
+#define EVP_PKEY_type v1_EVP_PKEY_type
+#define EVP_PKEY_up_ref v1_EVP_PKEY_up_ref
+#define EVP_PKEY_verify v1_EVP_PKEY_verify
+#define EVP_PKEY_verify_init v1_EVP_PKEY_verify_init
+#define EVP_PKEY_verify_recover v1_EVP_PKEY_verify_recover
+#define EVP_PKEY_verify_recover_init v1_EVP_PKEY_verify_recover_init
+#define EVP_rc2_40_cbc v1_EVP_rc2_40_cbc
+#define EVP_rc2_64_cbc v1_EVP_rc2_64_cbc
+#define EVP_rc2_cbc v1_EVP_rc2_cbc
+//#define EVP_rc2_cfb v1_EVP_rc2_cfb
+#define EVP_rc2_cfb64 v1_EVP_rc2_cfb64
+#define EVP_rc2_ecb v1_EVP_rc2_ecb
+#define EVP_rc2_ofb v1_EVP_rc2_ofb
+#define EVP_rc4 v1_EVP_rc4
+#define EVP_rc4_40 v1_EVP_rc4_40
+#define EVP_rc4_hmac_md5 v1_EVP_rc4_hmac_md5
+#define EVP_read_pw_string v1_EVP_read_pw_string
+#define EVP_read_pw_string_min v1_EVP_read_pw_string_min
+#define EVP_ripemd160 v1_EVP_ripemd160
+#define EVP_SealFinal v1_EVP_SealFinal
+#define EVP_SealInit v1_EVP_SealInit
+#define EVP_seed_cbc v1_EVP_seed_cbc
+#define EVP_seed_cfb128 v1_EVP_seed_cfb128
+#define EVP_seed_ecb v1_EVP_seed_ecb
+#define EVP_seed_ofb v1_EVP_seed_ofb
+#define EVP_set_pw_prompt v1_EVP_set_pw_prompt
+#define EVP_sha1 v1_EVP_sha1
+#define EVP_sha224 v1_EVP_sha224
+#define EVP_sha256 v1_EVP_sha256
+#define EVP_sha3_224 v1_EVP_sha3_224
+#define EVP_sha3_256 v1_EVP_sha3_256
+#define EVP_sha3_384 v1_EVP_sha3_384
+#define EVP_sha3_512 v1_EVP_sha3_512
+#define EVP_sha384 v1_EVP_sha384
+#define EVP_sha512 v1_EVP_sha512
+#define EVP_sha512_224 v1_EVP_sha512_224
+#define EVP_sha512_256 v1_EVP_sha512_256
+#define EVP_shake128 v1_EVP_shake128
+#define EVP_shake256 v1_EVP_shake256
+#define EVP_SignFinal v1_EVP_SignFinal
+#define EVP_sm3 v1_EVP_sm3
+#define EVP_sm4_cbc v1_EVP_sm4_cbc
+#define EVP_sm4_cfb128 v1_EVP_sm4_cfb128
+#define EVP_sm4_ctr v1_EVP_sm4_ctr
+#define EVP_sm4_ecb v1_EVP_sm4_ecb
+#define EVP_sm4_ofb v1_EVP_sm4_ofb
+#define EVP_VerifyFinal v1_EVP_VerifyFinal
+#define EVP_whirlpool v1_EVP_whirlpool
+#define EXTENDED_KEY_USAGE_free v1_EXTENDED_KEY_USAGE_free
+#define EXTENDED_KEY_USAGE_it v1_EXTENDED_KEY_USAGE_it
+#define EXTENDED_KEY_USAGE_new v1_EXTENDED_KEY_USAGE_new
+#define extension_is_relevant v1_extension_is_relevant
+#define fcrypt_body v1_fcrypt_body
+#define FIPS_mode v1_FIPS_mode
+#define FIPS_mode_set v1_FIPS_mode_set
+#define gcm_ghash_4bit v1_gcm_ghash_4bit
+#define gcm_ghash_avx v1_gcm_ghash_avx
+#define gcm_ghash_clmul v1_gcm_ghash_clmul
+#define gcm_gmult_4bit v1_gcm_gmult_4bit
+#define gcm_gmult_avx v1_gcm_gmult_avx
+#define gcm_gmult_clmul v1_gcm_gmult_clmul
+#define gcm_init_avx v1_gcm_init_avx
+#define gcm_init_clmul v1_gcm_init_clmul
+#define GENERAL_NAME_cmp v1_GENERAL_NAME_cmp
+#define GENERAL_NAME_dup v1_GENERAL_NAME_dup
+#define GENERAL_NAME_free v1_GENERAL_NAME_free
+#define GENERAL_NAME_get0_otherName v1_GENERAL_NAME_get0_otherName
+#define GENERAL_NAME_get0_value v1_GENERAL_NAME_get0_value
+#define GENERAL_NAME_it v1_GENERAL_NAME_it
+#define GENERAL_NAME_new v1_GENERAL_NAME_new
+#define GENERAL_NAME_print v1_GENERAL_NAME_print
+#define GENERAL_NAME_set0_othername v1_GENERAL_NAME_set0_othername
+#define GENERAL_NAME_set0_value v1_GENERAL_NAME_set0_value
+#define GENERAL_NAMES_free v1_GENERAL_NAMES_free
+#define GENERAL_NAMES_it v1_GENERAL_NAMES_it
+#define GENERAL_NAMES_new v1_GENERAL_NAMES_new
+#define GENERAL_SUBTREE_free v1_GENERAL_SUBTREE_free
+#define GENERAL_SUBTREE_it v1_GENERAL_SUBTREE_it
+#define GENERAL_SUBTREE_new v1_GENERAL_SUBTREE_new
+#define get_ca_names v1_get_ca_names
+#define gf_add v1_gf_add
+#define gf_deserialize v1_gf_deserialize
+#define gf_eq v1_gf_eq
+#define gf_hibit v1_gf_hibit
+#define gf_isr v1_gf_isr
+#define gf_lobit v1_gf_lobit
+#define gf_mul v1_gf_mul
+#define gf_mulw_unsigned v1_gf_mulw_unsigned
+#define gf_serialize v1_gf_serialize
+#define gf_sqr v1_gf_sqr
+#define gf_strong_reduce v1_gf_strong_reduce
+#define gf_sub v1_gf_sub
+#define global_engine_lock v1_global_engine_lock
+#define GOST_KX_MESSAGE_free v1_GOST_KX_MESSAGE_free
+#define GOST_KX_MESSAGE_it v1_GOST_KX_MESSAGE_it
+#define GOST_KX_MESSAGE_new v1_GOST_KX_MESSAGE_new
+#define hkdf_pkey_meth v1_hkdf_pkey_meth
+//#define HMAC v1_HMAC
+#define hmac_asn1_meth v1_hmac_asn1_meth
+#define HMAC_CTX_copy v1_HMAC_CTX_copy
+#define HMAC_CTX_free v1_HMAC_CTX_free
+#define HMAC_CTX_get_md v1_HMAC_CTX_get_md
+#define HMAC_CTX_new v1_HMAC_CTX_new
+#define HMAC_CTX_reset v1_HMAC_CTX_reset
+#define HMAC_CTX_set_flags v1_HMAC_CTX_set_flags
+#define HMAC_Final v1_HMAC_Final
+#define HMAC_Init v1_HMAC_Init
+#define HMAC_Init_ex v1_HMAC_Init_ex
+#define hmac_pkey_meth v1_hmac_pkey_meth
+#define HMAC_size v1_HMAC_size
+#define HMAC_Update v1_HMAC_Update
+#define hrrrandom v1_hrrrandom
+#define i2a_ACCESS_DESCRIPTION v1_i2a_ACCESS_DESCRIPTION
+#define i2a_ASN1_ENUMERATED v1_i2a_ASN1_ENUMERATED
+#define i2a_ASN1_INTEGER v1_i2a_ASN1_INTEGER
+#define i2a_ASN1_OBJECT v1_i2a_ASN1_OBJECT
+#define i2a_ASN1_STRING v1_i2a_ASN1_STRING
+#define i2b_PrivateKey_bio v1_i2b_PrivateKey_bio
+#define i2b_PublicKey_bio v1_i2b_PublicKey_bio
+#define i2b_PVK_bio v1_i2b_PVK_bio
+#define i2c_ASN1_BIT_STRING v1_i2c_ASN1_BIT_STRING
+#define i2c_ASN1_INTEGER v1_i2c_ASN1_INTEGER
+#define i2c_uint64_int v1_i2c_uint64_int
+#define i2d_ACCESS_DESCRIPTION v1_i2d_ACCESS_DESCRIPTION
+#define i2d_ADMISSIONS v1_i2d_ADMISSIONS
+#define i2d_ADMISSION_SYNTAX v1_i2d_ADMISSION_SYNTAX
+#define i2d_ASIdentifierChoice v1_i2d_ASIdentifierChoice
+#define i2d_ASIdentifiers v1_i2d_ASIdentifiers
+#define i2d_ASIdOrRange v1_i2d_ASIdOrRange
+#define i2d_ASN1_bio_stream v1_i2d_ASN1_bio_stream
+#define i2d_ASN1_BIT_STRING v1_i2d_ASN1_BIT_STRING
+#define i2d_ASN1_BMPSTRING v1_i2d_ASN1_BMPSTRING
+#define i2d_ASN1_ENUMERATED v1_i2d_ASN1_ENUMERATED
+#define i2d_ASN1_GENERALIZEDTIME v1_i2d_ASN1_GENERALIZEDTIME
+#define i2d_ASN1_GENERALSTRING v1_i2d_ASN1_GENERALSTRING
+#define i2d_ASN1_IA5STRING v1_i2d_ASN1_IA5STRING
+#define i2d_ASN1_INTEGER v1_i2d_ASN1_INTEGER
+#define i2d_ASN1_NULL v1_i2d_ASN1_NULL
+#define i2d_ASN1_OBJECT v1_i2d_ASN1_OBJECT
+#define i2d_ASN1_OCTET_STRING v1_i2d_ASN1_OCTET_STRING
+#define i2d_ASN1_PRINTABLE v1_i2d_ASN1_PRINTABLE
+#define i2d_ASN1_PRINTABLESTRING v1_i2d_ASN1_PRINTABLESTRING
+#define i2d_ASN1_SEQUENCE_ANY v1_i2d_ASN1_SEQUENCE_ANY
+#define i2d_ASN1_SET_ANY v1_i2d_ASN1_SET_ANY
+#define i2d_ASN1_T61STRING v1_i2d_ASN1_T61STRING
+#define i2d_ASN1_TIME v1_i2d_ASN1_TIME
+#define i2d_ASN1_TYPE v1_i2d_ASN1_TYPE
+#define i2d_ASN1_UNIVERSALSTRING v1_i2d_ASN1_UNIVERSALSTRING
+#define i2d_ASN1_UTCTIME v1_i2d_ASN1_UTCTIME
+#define i2d_ASN1_UTF8STRING v1_i2d_ASN1_UTF8STRING
+#define i2d_ASN1_VISIBLESTRING v1_i2d_ASN1_VISIBLESTRING
+#define i2d_ASRange v1_i2d_ASRange
+#define i2d_AUTHORITY_INFO_ACCESS v1_i2d_AUTHORITY_INFO_ACCESS
+#define i2d_AUTHORITY_KEYID v1_i2d_AUTHORITY_KEYID
+#define i2d_BASIC_CONSTRAINTS v1_i2d_BASIC_CONSTRAINTS
+#define i2d_CERTIFICATEPOLICIES v1_i2d_CERTIFICATEPOLICIES
+#define i2d_CMS_bio v1_i2d_CMS_bio
+#define i2d_CMS_bio_stream v1_i2d_CMS_bio_stream
+#define i2d_CMS_ContentInfo v1_i2d_CMS_ContentInfo
+#define i2d_CMS_ReceiptRequest v1_i2d_CMS_ReceiptRequest
+#define i2d_CRL_DIST_POINTS v1_i2d_CRL_DIST_POINTS
+#define i2d_DHparams v1_i2d_DHparams
+#define i2d_DHxparams v1_i2d_DHxparams
+#define i2d_DIRECTORYSTRING v1_i2d_DIRECTORYSTRING
+#define i2d_DISPLAYTEXT v1_i2d_DISPLAYTEXT
+#define i2d_DIST_POINT v1_i2d_DIST_POINT
+#define i2d_DIST_POINT_NAME v1_i2d_DIST_POINT_NAME
+#define i2d_DSAparams v1_i2d_DSAparams
+#define i2d_DSAPrivateKey v1_i2d_DSAPrivateKey
+#define i2d_DSAPrivateKey_bio v1_i2d_DSAPrivateKey_bio
+#define i2d_DSAPrivateKey_fp v1_i2d_DSAPrivateKey_fp
+#define i2d_DSA_PUBKEY v1_i2d_DSA_PUBKEY
+#define i2d_DSA_PUBKEY_bio v1_i2d_DSA_PUBKEY_bio
+#define i2d_DSA_PUBKEY_fp v1_i2d_DSA_PUBKEY_fp
+#define i2d_DSAPublicKey v1_i2d_DSAPublicKey
+#define i2d_DSA_SIG v1_i2d_DSA_SIG
+#define i2d_ECDSA_SIG v1_i2d_ECDSA_SIG
+#define i2d_ECParameters v1_i2d_ECParameters
+#define i2d_ECPKParameters v1_i2d_ECPKParameters
+#define i2d_ECPKPARAMETERS v1_i2d_ECPKPARAMETERS
+#define i2d_ECPrivateKey v1_i2d_ECPrivateKey
+#define i2d_EC_PRIVATEKEY v1_i2d_EC_PRIVATEKEY
+#define i2d_ECPrivateKey_bio v1_i2d_ECPrivateKey_bio
+#define i2d_ECPrivateKey_fp v1_i2d_ECPrivateKey_fp
+#define i2d_EC_PUBKEY v1_i2d_EC_PUBKEY
+#define i2d_EC_PUBKEY_bio v1_i2d_EC_PUBKEY_bio
+#define i2d_EC_PUBKEY_fp v1_i2d_EC_PUBKEY_fp
+#define i2d_EDIPARTYNAME v1_i2d_EDIPARTYNAME
+#define i2d_ESS_CERT_ID v1_i2d_ESS_CERT_ID
+#define i2d_ESS_CERT_ID_V2 v1_i2d_ESS_CERT_ID_V2
+#define i2d_ESS_ISSUER_SERIAL v1_i2d_ESS_ISSUER_SERIAL
+#define i2d_ESS_SIGNING_CERT v1_i2d_ESS_SIGNING_CERT
+#define i2d_ESS_SIGNING_CERT_V2 v1_i2d_ESS_SIGNING_CERT_V2
+#define i2d_EXTENDED_KEY_USAGE v1_i2d_EXTENDED_KEY_USAGE
+#define i2d_GENERAL_NAME v1_i2d_GENERAL_NAME
+#define i2d_GENERAL_NAMES v1_i2d_GENERAL_NAMES
+#define i2d_GOST_KX_MESSAGE v1_i2d_GOST_KX_MESSAGE
+#define i2d_int_dhx v1_i2d_int_dhx
+#define i2d_IPAddressChoice v1_i2d_IPAddressChoice
+#define i2d_IPAddressFamily v1_i2d_IPAddressFamily
+#define i2d_IPAddressOrRange v1_i2d_IPAddressOrRange
+#define i2d_IPAddressRange v1_i2d_IPAddressRange
+#define i2d_ISSUING_DIST_POINT v1_i2d_ISSUING_DIST_POINT
+#define i2d_NAMING_AUTHORITY v1_i2d_NAMING_AUTHORITY
+#define i2d_NETSCAPE_CERT_SEQUENCE v1_i2d_NETSCAPE_CERT_SEQUENCE
+#define i2d_NETSCAPE_ENCRYPTED_PKEY v1_i2d_NETSCAPE_ENCRYPTED_PKEY
+#define i2d_NETSCAPE_PKEY v1_i2d_NETSCAPE_PKEY
+#define i2d_NETSCAPE_SPKAC v1_i2d_NETSCAPE_SPKAC
+#define i2d_NETSCAPE_SPKI v1_i2d_NETSCAPE_SPKI
+#define i2d_NOTICEREF v1_i2d_NOTICEREF
+#define i2d_OCSP_BASICRESP v1_i2d_OCSP_BASICRESP
+#define i2d_OCSP_CERTID v1_i2d_OCSP_CERTID
+#define i2d_OCSP_CERTSTATUS v1_i2d_OCSP_CERTSTATUS
+#define i2d_OCSP_CRLID v1_i2d_OCSP_CRLID
+#define i2d_OCSP_ONEREQ v1_i2d_OCSP_ONEREQ
+#define i2d_OCSP_REQINFO v1_i2d_OCSP_REQINFO
+#define i2d_OCSP_REQUEST v1_i2d_OCSP_REQUEST
+#define i2d_OCSP_RESPBYTES v1_i2d_OCSP_RESPBYTES
+#define i2d_OCSP_RESPDATA v1_i2d_OCSP_RESPDATA
+#define i2d_OCSP_RESPID v1_i2d_OCSP_RESPID
+#define i2d_OCSP_RESPONSE v1_i2d_OCSP_RESPONSE
+#define i2d_OCSP_REVOKEDINFO v1_i2d_OCSP_REVOKEDINFO
+#define i2d_OCSP_SERVICELOC v1_i2d_OCSP_SERVICELOC
+#define i2d_OCSP_SIGNATURE v1_i2d_OCSP_SIGNATURE
+#define i2d_OCSP_SINGLERESP v1_i2d_OCSP_SINGLERESP
+#define i2d_OTHERNAME v1_i2d_OTHERNAME
+#define i2d_PBE2PARAM v1_i2d_PBE2PARAM
+#define i2d_PBEPARAM v1_i2d_PBEPARAM
+#define i2d_PBKDF2PARAM v1_i2d_PBKDF2PARAM
+#define i2d_PKCS12 v1_i2d_PKCS12
+#define i2d_PKCS12_BAGS v1_i2d_PKCS12_BAGS
+#define i2d_PKCS12_bio v1_i2d_PKCS12_bio
+#define i2d_PKCS12_fp v1_i2d_PKCS12_fp
+#define i2d_PKCS12_MAC_DATA v1_i2d_PKCS12_MAC_DATA
+#define i2d_PKCS12_SAFEBAG v1_i2d_PKCS12_SAFEBAG
+#define i2d_PKCS7 v1_i2d_PKCS7
+#define i2d_PKCS7_bio v1_i2d_PKCS7_bio
+#define i2d_PKCS7_bio_stream v1_i2d_PKCS7_bio_stream
+#define i2d_PKCS7_DIGEST v1_i2d_PKCS7_DIGEST
+#define i2d_PKCS7_ENC_CONTENT v1_i2d_PKCS7_ENC_CONTENT
+#define i2d_PKCS7_ENCRYPT v1_i2d_PKCS7_ENCRYPT
+#define i2d_PKCS7_ENVELOPE v1_i2d_PKCS7_ENVELOPE
+#define i2d_PKCS7_fp v1_i2d_PKCS7_fp
+#define i2d_PKCS7_ISSUER_AND_SERIAL v1_i2d_PKCS7_ISSUER_AND_SERIAL
+#define i2d_PKCS7_NDEF v1_i2d_PKCS7_NDEF
+#define i2d_PKCS7_RECIP_INFO v1_i2d_PKCS7_RECIP_INFO
+#define i2d_PKCS7_SIGNED v1_i2d_PKCS7_SIGNED
+#define i2d_PKCS7_SIGN_ENVELOPE v1_i2d_PKCS7_SIGN_ENVELOPE
+#define i2d_PKCS7_SIGNER_INFO v1_i2d_PKCS7_SIGNER_INFO
+#define i2d_PKCS8_bio v1_i2d_PKCS8_bio
+#define i2d_PKCS8_fp v1_i2d_PKCS8_fp
+#define i2d_PKCS8PrivateKey_bio v1_i2d_PKCS8PrivateKey_bio
+#define i2d_PKCS8PrivateKey_fp v1_i2d_PKCS8PrivateKey_fp
+#define i2d_PKCS8PrivateKeyInfo_bio v1_i2d_PKCS8PrivateKeyInfo_bio
+#define i2d_PKCS8PrivateKeyInfo_fp v1_i2d_PKCS8PrivateKeyInfo_fp
+#define i2d_PKCS8PrivateKey_nid_bio v1_i2d_PKCS8PrivateKey_nid_bio
+#define i2d_PKCS8PrivateKey_nid_fp v1_i2d_PKCS8PrivateKey_nid_fp
+#define i2d_PKCS8_PRIV_KEY_INFO v1_i2d_PKCS8_PRIV_KEY_INFO
+#define i2d_PKCS8_PRIV_KEY_INFO_bio v1_i2d_PKCS8_PRIV_KEY_INFO_bio
+#define i2d_PKCS8_PRIV_KEY_INFO_fp v1_i2d_PKCS8_PRIV_KEY_INFO_fp
+#define i2d_PKEY_USAGE_PERIOD v1_i2d_PKEY_USAGE_PERIOD
+#define i2d_POLICYINFO v1_i2d_POLICYINFO
+#define i2d_POLICYQUALINFO v1_i2d_POLICYQUALINFO
+#define i2d_PrivateKey v1_i2d_PrivateKey
+#define i2d_PrivateKey_bio v1_i2d_PrivateKey_bio
+#define i2d_PrivateKey_fp v1_i2d_PrivateKey_fp
+#define i2d_PROFESSION_INFO v1_i2d_PROFESSION_INFO
+#define i2d_PROXY_CERT_INFO_EXTENSION v1_i2d_PROXY_CERT_INFO_EXTENSION
+#define i2d_PROXY_POLICY v1_i2d_PROXY_POLICY
+#define i2d_PUBKEY v1_i2d_PUBKEY
+#define i2d_PUBKEY_bio v1_i2d_PUBKEY_bio
+#define i2d_PUBKEY_fp v1_i2d_PUBKEY_fp
+#define i2d_PublicKey v1_i2d_PublicKey
+#define i2d_re_X509_CRL_tbs v1_i2d_re_X509_CRL_tbs
+#define i2d_re_X509_REQ_tbs v1_i2d_re_X509_REQ_tbs
+#define i2d_re_X509_tbs v1_i2d_re_X509_tbs
+#define i2d_RSA_OAEP_PARAMS v1_i2d_RSA_OAEP_PARAMS
+#define i2d_RSAPrivateKey v1_i2d_RSAPrivateKey
+#define i2d_RSAPrivateKey_bio v1_i2d_RSAPrivateKey_bio
+#define i2d_RSAPrivateKey_fp v1_i2d_RSAPrivateKey_fp
+#define i2d_RSA_PSS_PARAMS v1_i2d_RSA_PSS_PARAMS
+#define i2d_RSA_PUBKEY v1_i2d_RSA_PUBKEY
+#define i2d_RSA_PUBKEY_bio v1_i2d_RSA_PUBKEY_bio
+#define i2d_RSA_PUBKEY_fp v1_i2d_RSA_PUBKEY_fp
+#define i2d_RSAPublicKey v1_i2d_RSAPublicKey
+#define i2d_RSAPublicKey_bio v1_i2d_RSAPublicKey_bio
+#define i2d_RSAPublicKey_fp v1_i2d_RSAPublicKey_fp
+#define i2d_SCRYPT_PARAMS v1_i2d_SCRYPT_PARAMS
+#define i2d_SCT_LIST v1_i2d_SCT_LIST
+#define i2d_SM2_Ciphertext v1_i2d_SM2_Ciphertext
+#define i2d_SSL_SESSION v1_i2d_SSL_SESSION
+#define i2d_SXNET v1_i2d_SXNET
+#define i2d_SXNETID v1_i2d_SXNETID
+#define i2d_TS_ACCURACY v1_i2d_TS_ACCURACY
+#define i2d_TS_MSG_IMPRINT v1_i2d_TS_MSG_IMPRINT
+#define i2d_TS_MSG_IMPRINT_bio v1_i2d_TS_MSG_IMPRINT_bio
+#define i2d_TS_MSG_IMPRINT_fp v1_i2d_TS_MSG_IMPRINT_fp
+#define i2d_TS_REQ v1_i2d_TS_REQ
+#define i2d_TS_REQ_bio v1_i2d_TS_REQ_bio
+#define i2d_TS_REQ_fp v1_i2d_TS_REQ_fp
+#define i2d_TS_RESP v1_i2d_TS_RESP
+#define i2d_TS_RESP_bio v1_i2d_TS_RESP_bio
+#define i2d_TS_RESP_fp v1_i2d_TS_RESP_fp
+#define i2d_TS_STATUS_INFO v1_i2d_TS_STATUS_INFO
+#define i2d_TS_TST_INFO v1_i2d_TS_TST_INFO
+#define i2d_TS_TST_INFO_bio v1_i2d_TS_TST_INFO_bio
+#define i2d_TS_TST_INFO_fp v1_i2d_TS_TST_INFO_fp
+#define i2d_USERNOTICE v1_i2d_USERNOTICE
+#define i2d_X509 v1_i2d_X509
+#define i2d_X509_ALGOR v1_i2d_X509_ALGOR
+#define i2d_X509_ALGORS v1_i2d_X509_ALGORS
+#define i2d_X509_ATTRIBUTE v1_i2d_X509_ATTRIBUTE
+#define i2d_X509_AUX v1_i2d_X509_AUX
+#define i2d_X509_bio v1_i2d_X509_bio
+#define i2d_X509_CERT_AUX v1_i2d_X509_CERT_AUX
+#define i2d_X509_CINF v1_i2d_X509_CINF
+#define i2d_X509_CRL v1_i2d_X509_CRL
+#define i2d_X509_CRL_bio v1_i2d_X509_CRL_bio
+#define i2d_X509_CRL_fp v1_i2d_X509_CRL_fp
+#define i2d_X509_CRL_INFO v1_i2d_X509_CRL_INFO
+#define i2d_X509_EXTENSION v1_i2d_X509_EXTENSION
+#define i2d_X509_EXTENSIONS v1_i2d_X509_EXTENSIONS
+#define i2d_X509_fp v1_i2d_X509_fp
+#define i2d_X509_NAME v1_i2d_X509_NAME
+#define i2d_X509_NAME_ENTRY v1_i2d_X509_NAME_ENTRY
+#define i2d_X509_PUBKEY v1_i2d_X509_PUBKEY
+#define i2d_X509_REQ v1_i2d_X509_REQ
+#define i2d_X509_REQ_bio v1_i2d_X509_REQ_bio
+#define i2d_X509_REQ_fp v1_i2d_X509_REQ_fp
+#define i2d_X509_REQ_INFO v1_i2d_X509_REQ_INFO
+#define i2d_X509_REVOKED v1_i2d_X509_REVOKED
+#define i2d_X509_SIG v1_i2d_X509_SIG
+#define i2d_X509_VAL v1_i2d_X509_VAL
+#define i2o_ECPublicKey v1_i2o_ECPublicKey
+#define i2o_SCT v1_i2o_SCT
+#define i2o_SCT_LIST v1_i2o_SCT_LIST
+#define i2o_SCT_signature v1_i2o_SCT_signature
+#define i2s_ASN1_ENUMERATED v1_i2s_ASN1_ENUMERATED
+#define i2s_ASN1_ENUMERATED_TABLE v1_i2s_ASN1_ENUMERATED_TABLE
+#define i2s_ASN1_IA5STRING v1_i2s_ASN1_IA5STRING
+#define i2s_ASN1_INTEGER v1_i2s_ASN1_INTEGER
+#define i2s_ASN1_OCTET_STRING v1_i2s_ASN1_OCTET_STRING
+#define i2t_ASN1_OBJECT v1_i2t_ASN1_OBJECT
+#define i2v_ASN1_BIT_STRING v1_i2v_ASN1_BIT_STRING
+#define i2v_GENERAL_NAME v1_i2v_GENERAL_NAME
+#define i2v_GENERAL_NAMES v1_i2v_GENERAL_NAMES
+#define IDEA_cbc_encrypt v1_IDEA_cbc_encrypt
+#define IDEA_cfb64_encrypt v1_IDEA_cfb64_encrypt
+#define IDEA_ecb_encrypt v1_IDEA_ecb_encrypt
+#define IDEA_encrypt v1_IDEA_encrypt
+#define IDEA_ofb64_encrypt v1_IDEA_ofb64_encrypt
+#define IDEA_options v1_IDEA_options
+#define IDEA_set_decrypt_key v1_IDEA_set_decrypt_key
+#define IDEA_set_encrypt_key v1_IDEA_set_encrypt_key
+#define INT32_it v1_INT32_it
+#define INT64_it v1_INT64_it
+#define int_bn_mod_inverse v1_int_bn_mod_inverse
+#define int_rsa_verify v1_int_rsa_verify
+#define IPAddressChoice_free v1_IPAddressChoice_free
+#define IPAddressChoice_it v1_IPAddressChoice_it
+#define IPAddressChoice_new v1_IPAddressChoice_new
+#define IPAddressFamily_free v1_IPAddressFamily_free
+#define IPAddressFamily_it v1_IPAddressFamily_it
+#define IPAddressFamily_new v1_IPAddressFamily_new
+#define IPAddressOrRange_free v1_IPAddressOrRange_free
+#define IPAddressOrRange_it v1_IPAddressOrRange_it
+#define IPAddressOrRange_new v1_IPAddressOrRange_new
+#define IPAddressRange_free v1_IPAddressRange_free
+#define IPAddressRange_it v1_IPAddressRange_it
+#define IPAddressRange_new v1_IPAddressRange_new
+#define is_partially_overlapping v1_is_partially_overlapping
+#define ISSUING_DIST_POINT_free v1_ISSUING_DIST_POINT_free
+#define ISSUING_DIST_POINT_it v1_ISSUING_DIST_POINT_it
+#define ISSUING_DIST_POINT_new v1_ISSUING_DIST_POINT_new
+#define level_add_node v1_level_add_node
+#define level_find_node v1_level_find_node
+#define LONG_it v1_LONG_it
+#define lookup_sess_in_cache v1_lookup_sess_in_cache
+#define MD4 v1_MD4
+#define md4_block_data_order v1_md4_block_data_order
+#define MD4_Final v1_MD4_Final
+#define MD4_Init v1_MD4_Init
+#define MD4_Transform v1_MD4_Transform
+#define MD4_Update v1_MD4_Update
+//#define MD5 v1_MD5
+#define md5_block_asm_data_order v1_md5_block_asm_data_order
+#define MD5_Final v1_MD5_Final
+#define MD5_Init v1_MD5_Init
+#define MD5_Transform v1_MD5_Transform
+#define MD5_Update v1_MD5_Update
+#define MDC2 v1_MDC2
+#define MDC2_Final v1_MDC2_Final
+#define MDC2_Init v1_MDC2_Init
+#define MDC2_Update v1_MDC2_Update
+#define name_cmp v1_name_cmp
+#define NAME_CONSTRAINTS_check v1_NAME_CONSTRAINTS_check
+#define NAME_CONSTRAINTS_check_CN v1_NAME_CONSTRAINTS_check_CN
+#define NAME_CONSTRAINTS_free v1_NAME_CONSTRAINTS_free
+#define NAME_CONSTRAINTS_it v1_NAME_CONSTRAINTS_it
+#define NAME_CONSTRAINTS_new v1_NAME_CONSTRAINTS_new
+#define NAMING_AUTHORITY_free v1_NAMING_AUTHORITY_free
+#define NAMING_AUTHORITY_get0_authorityId v1_NAMING_AUTHORITY_get0_authorityId
+#define NAMING_AUTHORITY_get0_authorityText v1_NAMING_AUTHORITY_get0_authorityText
+#define NAMING_AUTHORITY_get0_authorityURL v1_NAMING_AUTHORITY_get0_authorityURL
+#define NAMING_AUTHORITY_it v1_NAMING_AUTHORITY_it
+#define NAMING_AUTHORITY_new v1_NAMING_AUTHORITY_new
+#define NAMING_AUTHORITY_set0_authorityId v1_NAMING_AUTHORITY_set0_authorityId
+#define NAMING_AUTHORITY_set0_authorityText v1_NAMING_AUTHORITY_set0_authorityText
+#define NAMING_AUTHORITY_set0_authorityURL v1_NAMING_AUTHORITY_set0_authorityURL
+#define NCONF_default v1_NCONF_default
+#define NCONF_dump_bio v1_NCONF_dump_bio
+#define NCONF_dump_fp v1_NCONF_dump_fp
+#define NCONF_free v1_NCONF_free
+#define NCONF_free_data v1_NCONF_free_data
+#define NCONF_get_number_e v1_NCONF_get_number_e
+#define NCONF_get_section v1_NCONF_get_section
+#define NCONF_get_string v1_NCONF_get_string
+#define NCONF_load v1_NCONF_load
+#define NCONF_load_bio v1_NCONF_load_bio
+#define NCONF_load_fp v1_NCONF_load_fp
+#define NCONF_new v1_NCONF_new
+#define NCONF_WIN32 v1_NCONF_WIN32
+#define NETSCAPE_CERT_SEQUENCE_free v1_NETSCAPE_CERT_SEQUENCE_free
+#define NETSCAPE_CERT_SEQUENCE_it v1_NETSCAPE_CERT_SEQUENCE_it
+#define NETSCAPE_CERT_SEQUENCE_new v1_NETSCAPE_CERT_SEQUENCE_new
+#define NETSCAPE_ENCRYPTED_PKEY_free v1_NETSCAPE_ENCRYPTED_PKEY_free
+#define NETSCAPE_ENCRYPTED_PKEY_new v1_NETSCAPE_ENCRYPTED_PKEY_new
+#define NETSCAPE_PKEY_free v1_NETSCAPE_PKEY_free
+#define NETSCAPE_PKEY_new v1_NETSCAPE_PKEY_new
+#define NETSCAPE_SPKAC_free v1_NETSCAPE_SPKAC_free
+#define NETSCAPE_SPKAC_it v1_NETSCAPE_SPKAC_it
+#define NETSCAPE_SPKAC_new v1_NETSCAPE_SPKAC_new
+#define NETSCAPE_SPKI_b64_decode v1_NETSCAPE_SPKI_b64_decode
+#define NETSCAPE_SPKI_b64_encode v1_NETSCAPE_SPKI_b64_encode
+#define NETSCAPE_SPKI_free v1_NETSCAPE_SPKI_free
+#define NETSCAPE_SPKI_get_pubkey v1_NETSCAPE_SPKI_get_pubkey
+#define NETSCAPE_SPKI_it v1_NETSCAPE_SPKI_it
+#define NETSCAPE_SPKI_new v1_NETSCAPE_SPKI_new
+#define NETSCAPE_SPKI_print v1_NETSCAPE_SPKI_print
+#define NETSCAPE_SPKI_set_pubkey v1_NETSCAPE_SPKI_set_pubkey
+#define NETSCAPE_SPKI_sign v1_NETSCAPE_SPKI_sign
+#define NETSCAPE_SPKI_verify v1_NETSCAPE_SPKI_verify
+#define NOTICEREF_free v1_NOTICEREF_free
+#define NOTICEREF_it v1_NOTICEREF_it
+#define NOTICEREF_new v1_NOTICEREF_new
+#define n_ssl3_mac v1_n_ssl3_mac
+#define o2i_ECPublicKey v1_o2i_ECPublicKey
+#define o2i_SCT v1_o2i_SCT
+#define o2i_SCT_LIST v1_o2i_SCT_LIST
+#define o2i_SCT_signature v1_o2i_SCT_signature
+#define OBJ_add_object v1_OBJ_add_object
+#define OBJ_add_sigid v1_OBJ_add_sigid
+#define OBJ_bsearch_ v1_OBJ_bsearch_
+#define OBJ_bsearch_ex_ v1_OBJ_bsearch_ex_
+#define OBJ_bsearch_ssl_cipher_id v1_OBJ_bsearch_ssl_cipher_id
+#define obj_cleanup_int v1_obj_cleanup_int
+#define OBJ_cmp v1_OBJ_cmp
+#define OBJ_create v1_OBJ_create
+#define OBJ_create_objects v1_OBJ_create_objects
+#define OBJ_dup v1_OBJ_dup
+#define OBJ_find_sigid_algs v1_OBJ_find_sigid_algs
+#define OBJ_find_sigid_by_algs v1_OBJ_find_sigid_by_algs
+#define OBJ_get0_data v1_OBJ_get0_data
+#define OBJ_length v1_OBJ_length
+#define OBJ_ln2nid v1_OBJ_ln2nid
+#define OBJ_NAME_add v1_OBJ_NAME_add
+#define OBJ_NAME_cleanup v1_OBJ_NAME_cleanup
+#define OBJ_NAME_do_all v1_OBJ_NAME_do_all
+#define OBJ_NAME_do_all_sorted v1_OBJ_NAME_do_all_sorted
+#define OBJ_NAME_get v1_OBJ_NAME_get
+#define OBJ_NAME_init v1_OBJ_NAME_init
+#define OBJ_NAME_new_index v1_OBJ_NAME_new_index
+#define OBJ_NAME_remove v1_OBJ_NAME_remove
+#define OBJ_new_nid v1_OBJ_new_nid
+#define OBJ_nid2ln v1_OBJ_nid2ln
+#define OBJ_nid2obj v1_OBJ_nid2obj
+#define OBJ_nid2sn v1_OBJ_nid2sn
+#define OBJ_obj2nid v1_OBJ_obj2nid
+#define OBJ_obj2txt v1_OBJ_obj2txt
+#define OBJ_sigid_free v1_OBJ_sigid_free
+#define OBJ_sn2nid v1_OBJ_sn2nid
+#define OBJ_txt2nid v1_OBJ_txt2nid
+#define OBJ_txt2obj v1_OBJ_txt2obj
+#define OCSP_accept_responses_new v1_OCSP_accept_responses_new
+#define OCSP_archive_cutoff_new v1_OCSP_archive_cutoff_new
+#define OCSP_basic_add1_cert v1_OCSP_basic_add1_cert
+#define OCSP_basic_add1_nonce v1_OCSP_basic_add1_nonce
+#define OCSP_basic_add1_status v1_OCSP_basic_add1_status
+#define OCSP_BASICRESP_add1_ext_i2d v1_OCSP_BASICRESP_add1_ext_i2d
+#define OCSP_BASICRESP_add_ext v1_OCSP_BASICRESP_add_ext
+#define OCSP_BASICRESP_delete_ext v1_OCSP_BASICRESP_delete_ext
+#define OCSP_BASICRESP_free v1_OCSP_BASICRESP_free
+#define OCSP_BASICRESP_get1_ext_d2i v1_OCSP_BASICRESP_get1_ext_d2i
+#define OCSP_BASICRESP_get_ext v1_OCSP_BASICRESP_get_ext
+#define OCSP_BASICRESP_get_ext_by_critical v1_OCSP_BASICRESP_get_ext_by_critical
+#define OCSP_BASICRESP_get_ext_by_NID v1_OCSP_BASICRESP_get_ext_by_NID
+#define OCSP_BASICRESP_get_ext_by_OBJ v1_OCSP_BASICRESP_get_ext_by_OBJ
+#define OCSP_BASICRESP_get_ext_count v1_OCSP_BASICRESP_get_ext_count
+#define OCSP_BASICRESP_it v1_OCSP_BASICRESP_it
+#define OCSP_BASICRESP_new v1_OCSP_BASICRESP_new
+#define OCSP_basic_sign v1_OCSP_basic_sign
+#define OCSP_basic_sign_ctx v1_OCSP_basic_sign_ctx
+#define OCSP_basic_verify v1_OCSP_basic_verify
+#define OCSP_CERTID_dup v1_OCSP_CERTID_dup
+#define OCSP_CERTID_free v1_OCSP_CERTID_free
+#define OCSP_CERTID_it v1_OCSP_CERTID_it
+#define OCSP_cert_id_new v1_OCSP_cert_id_new
+#define OCSP_CERTID_new v1_OCSP_CERTID_new
+#define OCSP_CERTSTATUS_free v1_OCSP_CERTSTATUS_free
+#define OCSP_CERTSTATUS_it v1_OCSP_CERTSTATUS_it
+#define OCSP_CERTSTATUS_new v1_OCSP_CERTSTATUS_new
+#define OCSP_cert_status_str v1_OCSP_cert_status_str
+#define OCSP_cert_to_id v1_OCSP_cert_to_id
+#define OCSP_check_nonce v1_OCSP_check_nonce
+#define OCSP_check_validity v1_OCSP_check_validity
+#define OCSP_copy_nonce v1_OCSP_copy_nonce
+#define OCSP_CRLID_free v1_OCSP_CRLID_free
+#define OCSP_CRLID_it v1_OCSP_CRLID_it
+#define OCSP_crlID_new v1_OCSP_crlID_new
+#define OCSP_CRLID_new v1_OCSP_CRLID_new
+#define OCSP_crl_reason_str v1_OCSP_crl_reason_str
+#define OCSP_id_cmp v1_OCSP_id_cmp
+#define OCSP_id_get0_info v1_OCSP_id_get0_info
+#define OCSP_id_issuer_cmp v1_OCSP_id_issuer_cmp
+#define OCSP_ONEREQ_add1_ext_i2d v1_OCSP_ONEREQ_add1_ext_i2d
+#define OCSP_ONEREQ_add_ext v1_OCSP_ONEREQ_add_ext
+#define OCSP_ONEREQ_delete_ext v1_OCSP_ONEREQ_delete_ext
+#define OCSP_ONEREQ_free v1_OCSP_ONEREQ_free
+#define OCSP_onereq_get0_id v1_OCSP_onereq_get0_id
+#define OCSP_ONEREQ_get1_ext_d2i v1_OCSP_ONEREQ_get1_ext_d2i
+#define OCSP_ONEREQ_get_ext v1_OCSP_ONEREQ_get_ext
+#define OCSP_ONEREQ_get_ext_by_critical v1_OCSP_ONEREQ_get_ext_by_critical
+#define OCSP_ONEREQ_get_ext_by_NID v1_OCSP_ONEREQ_get_ext_by_NID
+#define OCSP_ONEREQ_get_ext_by_OBJ v1_OCSP_ONEREQ_get_ext_by_OBJ
+#define OCSP_ONEREQ_get_ext_count v1_OCSP_ONEREQ_get_ext_count
+#define OCSP_ONEREQ_it v1_OCSP_ONEREQ_it
+#define OCSP_ONEREQ_new v1_OCSP_ONEREQ_new
+#define OCSP_parse_url v1_OCSP_parse_url
+#define OCSP_REQ_CTX_add1_header v1_OCSP_REQ_CTX_add1_header
+#define OCSP_REQ_CTX_free v1_OCSP_REQ_CTX_free
+#define OCSP_REQ_CTX_get0_mem_bio v1_OCSP_REQ_CTX_get0_mem_bio
+#define OCSP_REQ_CTX_http v1_OCSP_REQ_CTX_http
+#define OCSP_REQ_CTX_i2d v1_OCSP_REQ_CTX_i2d
+#define OCSP_REQ_CTX_nbio v1_OCSP_REQ_CTX_nbio
+#define OCSP_REQ_CTX_nbio_d2i v1_OCSP_REQ_CTX_nbio_d2i
+#define OCSP_REQ_CTX_new v1_OCSP_REQ_CTX_new
+#define OCSP_REQ_CTX_set1_req v1_OCSP_REQ_CTX_set1_req
+#define OCSP_REQINFO_free v1_OCSP_REQINFO_free
+#define OCSP_REQINFO_it v1_OCSP_REQINFO_it
+#define OCSP_REQINFO_new v1_OCSP_REQINFO_new
+#define OCSP_request_add0_id v1_OCSP_request_add0_id
+#define OCSP_request_add1_cert v1_OCSP_request_add1_cert
+#define OCSP_REQUEST_add1_ext_i2d v1_OCSP_REQUEST_add1_ext_i2d
+#define OCSP_request_add1_nonce v1_OCSP_request_add1_nonce
+#define OCSP_REQUEST_add_ext v1_OCSP_REQUEST_add_ext
+#define OCSP_REQUEST_delete_ext v1_OCSP_REQUEST_delete_ext
+#define OCSP_REQUEST_free v1_OCSP_REQUEST_free
+#define OCSP_REQUEST_get1_ext_d2i v1_OCSP_REQUEST_get1_ext_d2i
+#define OCSP_REQUEST_get_ext v1_OCSP_REQUEST_get_ext
+#define OCSP_REQUEST_get_ext_by_critical v1_OCSP_REQUEST_get_ext_by_critical
+#define OCSP_REQUEST_get_ext_by_NID v1_OCSP_REQUEST_get_ext_by_NID
+#define OCSP_REQUEST_get_ext_by_OBJ v1_OCSP_REQUEST_get_ext_by_OBJ
+#define OCSP_REQUEST_get_ext_count v1_OCSP_REQUEST_get_ext_count
+#define OCSP_request_is_signed v1_OCSP_request_is_signed
+#define OCSP_REQUEST_it v1_OCSP_REQUEST_it
+#define OCSP_REQUEST_new v1_OCSP_REQUEST_new
+#define OCSP_request_onereq_count v1_OCSP_request_onereq_count
+#define OCSP_request_onereq_get0 v1_OCSP_request_onereq_get0
+#define OCSP_REQUEST_print v1_OCSP_REQUEST_print
+#define OCSP_request_set1_name v1_OCSP_request_set1_name
+#define OCSP_request_sign v1_OCSP_request_sign
+#define OCSP_request_verify v1_OCSP_request_verify
+#define OCSP_RESPBYTES_free v1_OCSP_RESPBYTES_free
+#define OCSP_RESPBYTES_it v1_OCSP_RESPBYTES_it
+#define OCSP_RESPBYTES_new v1_OCSP_RESPBYTES_new
+#define OCSP_resp_count v1_OCSP_resp_count
+#define OCSP_RESPDATA_free v1_OCSP_RESPDATA_free
+#define OCSP_RESPDATA_it v1_OCSP_RESPDATA_it
+#define OCSP_RESPDATA_new v1_OCSP_RESPDATA_new
+#define OCSP_resp_find v1_OCSP_resp_find
+#define OCSP_resp_find_status v1_OCSP_resp_find_status
+#define OCSP_resp_get0 v1_OCSP_resp_get0
+#define OCSP_resp_get0_certs v1_OCSP_resp_get0_certs
+#define OCSP_resp_get0_id v1_OCSP_resp_get0_id
+#define OCSP_resp_get0_produced_at v1_OCSP_resp_get0_produced_at
+#define OCSP_resp_get0_respdata v1_OCSP_resp_get0_respdata
+#define OCSP_resp_get0_signature v1_OCSP_resp_get0_signature
+#define OCSP_resp_get0_signer v1_OCSP_resp_get0_signer
+#define OCSP_resp_get0_tbs_sigalg v1_OCSP_resp_get0_tbs_sigalg
+#define OCSP_resp_get1_id v1_OCSP_resp_get1_id
+#define OCSP_RESPID_free v1_OCSP_RESPID_free
+#define OCSP_RESPID_it v1_OCSP_RESPID_it
+#define OCSP_RESPID_match v1_OCSP_RESPID_match
+#define OCSP_RESPID_new v1_OCSP_RESPID_new
+#define OCSP_RESPID_set_by_key v1_OCSP_RESPID_set_by_key
+#define OCSP_RESPID_set_by_name v1_OCSP_RESPID_set_by_name
+#define OCSP_response_create v1_OCSP_response_create
+#define OCSP_RESPONSE_free v1_OCSP_RESPONSE_free
+#define OCSP_response_get1_basic v1_OCSP_response_get1_basic
+#define OCSP_RESPONSE_it v1_OCSP_RESPONSE_it
+#define OCSP_RESPONSE_new v1_OCSP_RESPONSE_new
+#define OCSP_RESPONSE_print v1_OCSP_RESPONSE_print
+#define OCSP_response_status v1_OCSP_response_status
+#define OCSP_response_status_str v1_OCSP_response_status_str
+#define OCSP_REVOKEDINFO_free v1_OCSP_REVOKEDINFO_free
+#define OCSP_REVOKEDINFO_it v1_OCSP_REVOKEDINFO_it
+#define OCSP_REVOKEDINFO_new v1_OCSP_REVOKEDINFO_new
+#define OCSP_sendreq_bio v1_OCSP_sendreq_bio
+#define OCSP_sendreq_nbio v1_OCSP_sendreq_nbio
+#define OCSP_sendreq_new v1_OCSP_sendreq_new
+#define OCSP_SERVICELOC_free v1_OCSP_SERVICELOC_free
+#define OCSP_SERVICELOC_it v1_OCSP_SERVICELOC_it
+#define OCSP_SERVICELOC_new v1_OCSP_SERVICELOC_new
+#define OCSP_set_max_response_length v1_OCSP_set_max_response_length
+#define OCSP_SIGNATURE_free v1_OCSP_SIGNATURE_free
+#define OCSP_SIGNATURE_it v1_OCSP_SIGNATURE_it
+#define OCSP_SIGNATURE_new v1_OCSP_SIGNATURE_new
+#define OCSP_single_get0_status v1_OCSP_single_get0_status
+#define OCSP_SINGLERESP_add1_ext_i2d v1_OCSP_SINGLERESP_add1_ext_i2d
+#define OCSP_SINGLERESP_add_ext v1_OCSP_SINGLERESP_add_ext
+#define OCSP_SINGLERESP_delete_ext v1_OCSP_SINGLERESP_delete_ext
+#define OCSP_SINGLERESP_free v1_OCSP_SINGLERESP_free
+#define OCSP_SINGLERESP_get0_id v1_OCSP_SINGLERESP_get0_id
+#define OCSP_SINGLERESP_get1_ext_d2i v1_OCSP_SINGLERESP_get1_ext_d2i
+#define OCSP_SINGLERESP_get_ext v1_OCSP_SINGLERESP_get_ext
+#define OCSP_SINGLERESP_get_ext_by_critical v1_OCSP_SINGLERESP_get_ext_by_critical
+#define OCSP_SINGLERESP_get_ext_by_NID v1_OCSP_SINGLERESP_get_ext_by_NID
+#define OCSP_SINGLERESP_get_ext_by_OBJ v1_OCSP_SINGLERESP_get_ext_by_OBJ
+#define OCSP_SINGLERESP_get_ext_count v1_OCSP_SINGLERESP_get_ext_count
+#define OCSP_SINGLERESP_it v1_OCSP_SINGLERESP_it
+#define OCSP_SINGLERESP_new v1_OCSP_SINGLERESP_new
+#define OCSP_url_svcloc_new v1_OCSP_url_svcloc_new
+#define openssl_add_all_ciphers_int v1_openssl_add_all_ciphers_int
+#define openssl_add_all_digests_int v1_openssl_add_all_digests_int
+#define OPENSSL_asc2uni v1_OPENSSL_asc2uni
+#define OPENSSL_atexit v1_OPENSSL_atexit
+#define OPENSSL_atomic_add v1_OPENSSL_atomic_add
+#define OPENSSL_buf2hexstr v1_OPENSSL_buf2hexstr
+#define OPENSSL_cipher_name v1_OPENSSL_cipher_name
+#define OPENSSL_cleanse v1_OPENSSL_cleanse
+#define OPENSSL_cleanup v1_OPENSSL_cleanup
+#define OPENSSL_config v1_OPENSSL_config
+#define openssl_config_int v1_openssl_config_int
+#define OPENSSL_cpuid_setup v1_OPENSSL_cpuid_setup
+#define OPENSSL_die v1_OPENSSL_die
+#define OPENSSL_DIR_end v1_OPENSSL_DIR_end
+#define OPENSSL_DIR_read v1_OPENSSL_DIR_read
+#define openssl_fopen v1_openssl_fopen
+#define OPENSSL_fork_child v1_OPENSSL_fork_child
+#define OPENSSL_fork_parent v1_OPENSSL_fork_parent
+#define OPENSSL_fork_prepare v1_OPENSSL_fork_prepare
+#define openssl_get_fork_id v1_openssl_get_fork_id
+#define OPENSSL_gmtime v1_OPENSSL_gmtime
+#define OPENSSL_gmtime_adj v1_OPENSSL_gmtime_adj
+#define OPENSSL_gmtime_diff v1_OPENSSL_gmtime_diff
+#define OPENSSL_hexchar2int v1_OPENSSL_hexchar2int
+#define OPENSSL_hexstr2buf v1_OPENSSL_hexstr2buf
+#define OPENSSL_ia32cap_P v1_OPENSSL_ia32cap_P
+#define OPENSSL_ia32_cpuid v1_OPENSSL_ia32_cpuid
+#define OPENSSL_ia32_rdrand_bytes v1_OPENSSL_ia32_rdrand_bytes
+#define OPENSSL_ia32_rdseed_bytes v1_OPENSSL_ia32_rdseed_bytes
+#define OPENSSL_init v1_OPENSSL_init
+#define OPENSSL_init_crypto v1_OPENSSL_init_crypto
+#define openssl_init_fork_handlers v1_openssl_init_fork_handlers
+#define OPENSSL_INIT_free v1_OPENSSL_INIT_free
+#define OPENSSL_INIT_new v1_OPENSSL_INIT_new
+#define OPENSSL_INIT_set_config_appname v1_OPENSSL_INIT_set_config_appname
+#define OPENSSL_INIT_set_config_file_flags v1_OPENSSL_INIT_set_config_file_flags
+#define OPENSSL_INIT_set_config_filename v1_OPENSSL_INIT_set_config_filename
+#define OPENSSL_init_ssl v1_OPENSSL_init_ssl
+#define OPENSSL_instrument_bus v1_OPENSSL_instrument_bus
+#define OPENSSL_instrument_bus2 v1_OPENSSL_instrument_bus2
+#define OPENSSL_isservice v1_OPENSSL_isservice
+#define OPENSSL_issetugid v1_OPENSSL_issetugid
+#define OPENSSL_LH_delete v1_OPENSSL_LH_delete
+#define OPENSSL_LH_doall v1_OPENSSL_LH_doall
+#define OPENSSL_LH_doall_arg v1_OPENSSL_LH_doall_arg
+#define OPENSSL_LH_error v1_OPENSSL_LH_error
+#define OPENSSL_LH_free v1_OPENSSL_LH_free
+#define OPENSSL_LH_get_down_load v1_OPENSSL_LH_get_down_load
+#define OPENSSL_LH_insert v1_OPENSSL_LH_insert
+#define OPENSSL_LH_new v1_OPENSSL_LH_new
+#define OPENSSL_LH_node_stats v1_OPENSSL_LH_node_stats
+#define OPENSSL_LH_node_stats_bio v1_OPENSSL_LH_node_stats_bio
+#define OPENSSL_LH_node_usage_stats v1_OPENSSL_LH_node_usage_stats
+#define OPENSSL_LH_node_usage_stats_bio v1_OPENSSL_LH_node_usage_stats_bio
+#define OPENSSL_LH_num_items v1_OPENSSL_LH_num_items
+#define OPENSSL_LH_retrieve v1_OPENSSL_LH_retrieve
+#define OPENSSL_LH_set_down_load v1_OPENSSL_LH_set_down_load
+#define OPENSSL_LH_stats v1_OPENSSL_LH_stats
+#define OPENSSL_LH_stats_bio v1_OPENSSL_LH_stats_bio
+#define openssl_lh_strcasehash v1_openssl_lh_strcasehash
+#define OPENSSL_LH_strhash v1_OPENSSL_LH_strhash
+#define OPENSSL_load_builtin_modules v1_OPENSSL_load_builtin_modules
+#define OPENSSL_memcmp v1_OPENSSL_memcmp
+#define openssl_no_config_int v1_openssl_no_config_int
+#define OPENSSL_rdtsc v1_OPENSSL_rdtsc
+#define OPENSSL_showfatal v1_OPENSSL_showfatal
+#define OPENSSL_sk_deep_copy v1_OPENSSL_sk_deep_copy
+#define OPENSSL_sk_delete v1_OPENSSL_sk_delete
+#define OPENSSL_sk_delete_ptr v1_OPENSSL_sk_delete_ptr
+#define OPENSSL_sk_dup v1_OPENSSL_sk_dup
+#define OPENSSL_sk_find v1_OPENSSL_sk_find
+#define OPENSSL_sk_find_ex v1_OPENSSL_sk_find_ex
+#define OPENSSL_sk_free v1_OPENSSL_sk_free
+#define OPENSSL_sk_insert v1_OPENSSL_sk_insert
+#define OPENSSL_sk_is_sorted v1_OPENSSL_sk_is_sorted
+#define OPENSSL_sk_new v1_OPENSSL_sk_new
+#define OPENSSL_sk_new_null v1_OPENSSL_sk_new_null
+#define OPENSSL_sk_new_reserve v1_OPENSSL_sk_new_reserve
+#define OPENSSL_sk_num v1_OPENSSL_sk_num
+#define OPENSSL_sk_pop v1_OPENSSL_sk_pop
+#define OPENSSL_sk_pop_free v1_OPENSSL_sk_pop_free
+#define OPENSSL_sk_push v1_OPENSSL_sk_push
+#define OPENSSL_sk_reserve v1_OPENSSL_sk_reserve
+#define OPENSSL_sk_set v1_OPENSSL_sk_set
+#define OPENSSL_sk_set_cmp_func v1_OPENSSL_sk_set_cmp_func
+#define OPENSSL_sk_shift v1_OPENSSL_sk_shift
+#define OPENSSL_sk_sort v1_OPENSSL_sk_sort
+#define OPENSSL_sk_unshift v1_OPENSSL_sk_unshift
+#define OPENSSL_sk_value v1_OPENSSL_sk_value
+#define OPENSSL_sk_zero v1_OPENSSL_sk_zero
+#define openssl_strerror_r v1_openssl_strerror_r
+#define OPENSSL_strlcat v1_OPENSSL_strlcat
+#define OPENSSL_strlcpy v1_OPENSSL_strlcpy
+#define OPENSSL_strnlen v1_OPENSSL_strnlen
+#define OPENSSL_thread_stop v1_OPENSSL_thread_stop
+#define OPENSSL_uni2asc v1_OPENSSL_uni2asc
+#define OPENSSL_uni2utf8 v1_OPENSSL_uni2utf8
+#define OPENSSL_utf82uni v1_OPENSSL_utf82uni
+#define OpenSSL_version v1_OpenSSL_version
+#define OpenSSL_version_num v1_OpenSSL_version_num
+#define OPENSSL_wipe_cpu v1_OPENSSL_wipe_cpu
+#define ossl_ctype_check v1_ossl_ctype_check
+#define ossl_ecdh_compute_key v1_ossl_ecdh_compute_key
+#define ossl_ecdsa_sign v1_ossl_ecdsa_sign
+#define ossl_ecdsa_sign_setup v1_ossl_ecdsa_sign_setup
+#define ossl_ecdsa_sign_sig v1_ossl_ecdsa_sign_sig
+#define ossl_ecdsa_verify v1_ossl_ecdsa_verify
+#define ossl_ecdsa_verify_sig v1_ossl_ecdsa_verify_sig
+#define ossl_ec_key_gen v1_ossl_ec_key_gen
+#define ossl_init_thread_start v1_ossl_init_thread_start
+#define ossl_safe_getenv v1_ossl_safe_getenv
+#define ossl_statem_accept v1_ossl_statem_accept
+#define ossl_statem_app_data_allowed v1_ossl_statem_app_data_allowed
+#define ossl_statem_check_finish_init v1_ossl_statem_check_finish_init
+#define ossl_statem_clear v1_ossl_statem_clear
+#define ossl_statem_client_construct_message v1_ossl_statem_client_construct_message
+#define ossl_statem_client_max_message_size v1_ossl_statem_client_max_message_size
+#define ossl_statem_client_post_process_message v1_ossl_statem_client_post_process_message
+#define ossl_statem_client_post_work v1_ossl_statem_client_post_work
+#define ossl_statem_client_pre_work v1_ossl_statem_client_pre_work
+#define ossl_statem_client_process_message v1_ossl_statem_client_process_message
+#define ossl_statem_client_read_transition v1_ossl_statem_client_read_transition
+#define ossl_statem_client_write_transition v1_ossl_statem_client_write_transition
+#define ossl_statem_connect v1_ossl_statem_connect
+#define ossl_statem_export_allowed v1_ossl_statem_export_allowed
+#define ossl_statem_export_early_allowed v1_ossl_statem_export_early_allowed
+#define ossl_statem_fatal v1_ossl_statem_fatal
+#define ossl_statem_get_in_handshake v1_ossl_statem_get_in_handshake
+#define ossl_statem_in_error v1_ossl_statem_in_error
+#define ossl_statem_server_construct_message v1_ossl_statem_server_construct_message
+#define ossl_statem_server_max_message_size v1_ossl_statem_server_max_message_size
+#define ossl_statem_server_post_process_message v1_ossl_statem_server_post_process_message
+#define ossl_statem_server_post_work v1_ossl_statem_server_post_work
+#define ossl_statem_server_pre_work v1_ossl_statem_server_pre_work
+#define ossl_statem_server_process_message v1_ossl_statem_server_process_message
+#define ossl_statem_server_read_transition v1_ossl_statem_server_read_transition
+#define ossl_statem_server_write_transition v1_ossl_statem_server_write_transition
+#define ossl_statem_set_hello_verify_done v1_ossl_statem_set_hello_verify_done
+#define ossl_statem_set_in_handshake v1_ossl_statem_set_in_handshake
+#define ossl_statem_set_in_init v1_ossl_statem_set_in_init
+#define ossl_statem_set_renegotiate v1_ossl_statem_set_renegotiate
+#define ossl_statem_skip_early_data v1_ossl_statem_skip_early_data
+#define ossl_store_attach_pem_bio v1_ossl_store_attach_pem_bio
+#define ossl_store_cleanup_int v1_ossl_store_cleanup_int
+#define OSSL_STORE_close v1_OSSL_STORE_close
+#define OSSL_STORE_ctrl v1_OSSL_STORE_ctrl
+#define ossl_store_destroy_loaders_int v1_ossl_store_destroy_loaders_int
+#define ossl_store_detach_pem_bio v1_ossl_store_detach_pem_bio
+#define OSSL_STORE_do_all_loaders v1_OSSL_STORE_do_all_loaders
+#define OSSL_STORE_eof v1_OSSL_STORE_eof
+#define OSSL_STORE_error v1_OSSL_STORE_error
+#define OSSL_STORE_expect v1_OSSL_STORE_expect
+#define ossl_store_file_attach_pem_bio_int v1_ossl_store_file_attach_pem_bio_int
+#define ossl_store_file_detach_pem_bio_int v1_ossl_store_file_detach_pem_bio_int
+#define ossl_store_file_loader_init v1_ossl_store_file_loader_init
+#define OSSL_STORE_find v1_OSSL_STORE_find
+#define ossl_store_get0_loader_int v1_ossl_store_get0_loader_int
+#define OSSL_STORE_INFO_free v1_OSSL_STORE_INFO_free
+#define OSSL_STORE_INFO_get0_CERT v1_OSSL_STORE_INFO_get0_CERT
+#define OSSL_STORE_INFO_get0_CRL v1_OSSL_STORE_INFO_get0_CRL
+#define ossl_store_info_get0_EMBEDDED_buffer v1_ossl_store_info_get0_EMBEDDED_buffer
+#define ossl_store_info_get0_EMBEDDED_pem_name v1_ossl_store_info_get0_EMBEDDED_pem_name
+#define OSSL_STORE_INFO_get0_NAME v1_OSSL_STORE_INFO_get0_NAME
+#define OSSL_STORE_INFO_get0_NAME_description v1_OSSL_STORE_INFO_get0_NAME_description
+#define OSSL_STORE_INFO_get0_PARAMS v1_OSSL_STORE_INFO_get0_PARAMS
+#define OSSL_STORE_INFO_get0_PKEY v1_OSSL_STORE_INFO_get0_PKEY
+#define OSSL_STORE_INFO_get1_CERT v1_OSSL_STORE_INFO_get1_CERT
+#define OSSL_STORE_INFO_get1_CRL v1_OSSL_STORE_INFO_get1_CRL
+#define OSSL_STORE_INFO_get1_NAME v1_OSSL_STORE_INFO_get1_NAME
+#define OSSL_STORE_INFO_get1_NAME_description v1_OSSL_STORE_INFO_get1_NAME_description
+#define OSSL_STORE_INFO_get1_PARAMS v1_OSSL_STORE_INFO_get1_PARAMS
+#define OSSL_STORE_INFO_get1_PKEY v1_OSSL_STORE_INFO_get1_PKEY
+#define OSSL_STORE_INFO_get_type v1_OSSL_STORE_INFO_get_type
+#define OSSL_STORE_INFO_new_CERT v1_OSSL_STORE_INFO_new_CERT
+#define OSSL_STORE_INFO_new_CRL v1_OSSL_STORE_INFO_new_CRL
+#define ossl_store_info_new_EMBEDDED v1_ossl_store_info_new_EMBEDDED
+#define OSSL_STORE_INFO_new_NAME v1_OSSL_STORE_INFO_new_NAME
+#define OSSL_STORE_INFO_new_PARAMS v1_OSSL_STORE_INFO_new_PARAMS
+#define OSSL_STORE_INFO_new_PKEY v1_OSSL_STORE_INFO_new_PKEY
+#define OSSL_STORE_INFO_set0_NAME_description v1_OSSL_STORE_INFO_set0_NAME_description
+#define OSSL_STORE_INFO_type_string v1_OSSL_STORE_INFO_type_string
+#define ossl_store_init_once v1_ossl_store_init_once
+#define OSSL_STORE_load v1_OSSL_STORE_load
+#define OSSL_STORE_LOADER_free v1_OSSL_STORE_LOADER_free
+#define OSSL_STORE_LOADER_get0_engine v1_OSSL_STORE_LOADER_get0_engine
+#define OSSL_STORE_LOADER_get0_scheme v1_OSSL_STORE_LOADER_get0_scheme
+#define OSSL_STORE_LOADER_new v1_OSSL_STORE_LOADER_new
+#define OSSL_STORE_LOADER_set_close v1_OSSL_STORE_LOADER_set_close
+#define OSSL_STORE_LOADER_set_ctrl v1_OSSL_STORE_LOADER_set_ctrl
+#define OSSL_STORE_LOADER_set_eof v1_OSSL_STORE_LOADER_set_eof
+#define OSSL_STORE_LOADER_set_error v1_OSSL_STORE_LOADER_set_error
+#define OSSL_STORE_LOADER_set_expect v1_OSSL_STORE_LOADER_set_expect
+#define OSSL_STORE_LOADER_set_find v1_OSSL_STORE_LOADER_set_find
+#define OSSL_STORE_LOADER_set_load v1_OSSL_STORE_LOADER_set_load
+#define OSSL_STORE_LOADER_set_open v1_OSSL_STORE_LOADER_set_open
+#define OSSL_STORE_open v1_OSSL_STORE_open
+#define OSSL_STORE_register_loader v1_OSSL_STORE_register_loader
+#define ossl_store_register_loader_int v1_ossl_store_register_loader_int
+#define OSSL_STORE_SEARCH_by_alias v1_OSSL_STORE_SEARCH_by_alias
+#define OSSL_STORE_SEARCH_by_issuer_serial v1_OSSL_STORE_SEARCH_by_issuer_serial
+#define OSSL_STORE_SEARCH_by_key_fingerprint v1_OSSL_STORE_SEARCH_by_key_fingerprint
+#define OSSL_STORE_SEARCH_by_name v1_OSSL_STORE_SEARCH_by_name
+#define OSSL_STORE_SEARCH_free v1_OSSL_STORE_SEARCH_free
+#define OSSL_STORE_SEARCH_get0_bytes v1_OSSL_STORE_SEARCH_get0_bytes
+#define OSSL_STORE_SEARCH_get0_digest v1_OSSL_STORE_SEARCH_get0_digest
+#define OSSL_STORE_SEARCH_get0_name v1_OSSL_STORE_SEARCH_get0_name
+#define OSSL_STORE_SEARCH_get0_serial v1_OSSL_STORE_SEARCH_get0_serial
+#define OSSL_STORE_SEARCH_get0_string v1_OSSL_STORE_SEARCH_get0_string
+#define OSSL_STORE_SEARCH_get_type v1_OSSL_STORE_SEARCH_get_type
+#define OSSL_STORE_supports_search v1_OSSL_STORE_supports_search
+#define OSSL_STORE_unregister_loader v1_OSSL_STORE_unregister_loader
+#define ossl_store_unregister_loader_int v1_ossl_store_unregister_loader_int
+#define OSSL_STORE_vctrl v1_OSSL_STORE_vctrl
+#define ossl_tolower v1_ossl_tolower
+#define ossl_toupper v1_ossl_toupper
+#define OTHERNAME_cmp v1_OTHERNAME_cmp
+#define OTHERNAME_free v1_OTHERNAME_free
+#define OTHERNAME_it v1_OTHERNAME_it
+#define OTHERNAME_new v1_OTHERNAME_new
+#define padlock_aes_block v1_padlock_aes_block
+#define padlock_capability v1_padlock_capability
+#define padlock_cbc_encrypt v1_padlock_cbc_encrypt
+#define padlock_cfb_encrypt v1_padlock_cfb_encrypt
+#define padlock_ctr32_encrypt v1_padlock_ctr32_encrypt
+#define padlock_ecb_encrypt v1_padlock_ecb_encrypt
+#define padlock_key_bswap v1_padlock_key_bswap
+#define padlock_ofb_encrypt v1_padlock_ofb_encrypt
+#define padlock_reload_key v1_padlock_reload_key
+#define padlock_sha1_blocks v1_padlock_sha1_blocks
+#define padlock_sha1_oneshot v1_padlock_sha1_oneshot
+#define padlock_sha256_blocks v1_padlock_sha256_blocks
+#define padlock_sha256_oneshot v1_padlock_sha256_oneshot
+#define padlock_sha512_blocks v1_padlock_sha512_blocks
+#define padlock_verify_context v1_padlock_verify_context
+#define padlock_xstore v1_padlock_xstore
+#define parse_ca_names v1_parse_ca_names
+#define PBE2PARAM_free v1_PBE2PARAM_free
+#define PBE2PARAM_it v1_PBE2PARAM_it
+#define PBE2PARAM_new v1_PBE2PARAM_new
+#define PBEPARAM_free v1_PBEPARAM_free
+#define PBEPARAM_it v1_PBEPARAM_it
+#define PBEPARAM_new v1_PBEPARAM_new
+#define PBKDF2PARAM_free v1_PBKDF2PARAM_free
+#define PBKDF2PARAM_it v1_PBKDF2PARAM_it
+#define PBKDF2PARAM_new v1_PBKDF2PARAM_new
+#define PEM_ASN1_read v1_PEM_ASN1_read
+#define PEM_ASN1_read_bio v1_PEM_ASN1_read_bio
+#define PEM_ASN1_write v1_PEM_ASN1_write
+#define PEM_ASN1_write_bio v1_PEM_ASN1_write_bio
+#define PEM_bytes_read_bio v1_PEM_bytes_read_bio
+#define PEM_bytes_read_bio_secmem v1_PEM_bytes_read_bio_secmem
+#define pem_check_suffix v1_pem_check_suffix
+#define PEM_def_callback v1_PEM_def_callback
+#define PEM_dek_info v1_PEM_dek_info
+#define PEM_do_header v1_PEM_do_header
+#define PEM_get_EVP_CIPHER_INFO v1_PEM_get_EVP_CIPHER_INFO
+#define PEM_proc_type v1_PEM_proc_type
+#define PEM_read v1_PEM_read
+#define PEM_read_bio v1_PEM_read_bio
+#define PEM_read_bio_CMS v1_PEM_read_bio_CMS
+#define PEM_read_bio_DHparams v1_PEM_read_bio_DHparams
+#define PEM_read_bio_DSAparams v1_PEM_read_bio_DSAparams
+#define PEM_read_bio_DSAPrivateKey v1_PEM_read_bio_DSAPrivateKey
+#define PEM_read_bio_DSA_PUBKEY v1_PEM_read_bio_DSA_PUBKEY
+#define PEM_read_bio_ECPKParameters v1_PEM_read_bio_ECPKParameters
+#define PEM_read_bio_ECPrivateKey v1_PEM_read_bio_ECPrivateKey
+#define PEM_read_bio_EC_PUBKEY v1_PEM_read_bio_EC_PUBKEY
+#define PEM_read_bio_ex v1_PEM_read_bio_ex
+#define PEM_read_bio_NETSCAPE_CERT_SEQUENCE v1_PEM_read_bio_NETSCAPE_CERT_SEQUENCE
+#define PEM_read_bio_Parameters v1_PEM_read_bio_Parameters
+#define PEM_read_bio_PKCS7 v1_PEM_read_bio_PKCS7
+#define PEM_read_bio_PKCS8 v1_PEM_read_bio_PKCS8
+#define PEM_read_bio_PKCS8_PRIV_KEY_INFO v1_PEM_read_bio_PKCS8_PRIV_KEY_INFO
+#define PEM_read_bio_PrivateKey v1_PEM_read_bio_PrivateKey
+#define PEM_read_bio_PUBKEY v1_PEM_read_bio_PUBKEY
+#define PEM_read_bio_RSAPrivateKey v1_PEM_read_bio_RSAPrivateKey
+#define PEM_read_bio_RSA_PUBKEY v1_PEM_read_bio_RSA_PUBKEY
+#define PEM_read_bio_RSAPublicKey v1_PEM_read_bio_RSAPublicKey
+#define PEM_read_bio_SSL_SESSION v1_PEM_read_bio_SSL_SESSION
+#define PEM_read_bio_X509 v1_PEM_read_bio_X509
+#define PEM_read_bio_X509_AUX v1_PEM_read_bio_X509_AUX
+#define PEM_read_bio_X509_CRL v1_PEM_read_bio_X509_CRL
+#define PEM_read_bio_X509_REQ v1_PEM_read_bio_X509_REQ
+#define PEM_read_CMS v1_PEM_read_CMS
+#define PEM_read_DHparams v1_PEM_read_DHparams
+#define PEM_read_DSAparams v1_PEM_read_DSAparams
+#define PEM_read_DSAPrivateKey v1_PEM_read_DSAPrivateKey
+#define PEM_read_DSA_PUBKEY v1_PEM_read_DSA_PUBKEY
+#define PEM_read_ECPKParameters v1_PEM_read_ECPKParameters
+#define PEM_read_ECPrivateKey v1_PEM_read_ECPrivateKey
+#define PEM_read_EC_PUBKEY v1_PEM_read_EC_PUBKEY
+#define PEM_read_NETSCAPE_CERT_SEQUENCE v1_PEM_read_NETSCAPE_CERT_SEQUENCE
+#define PEM_read_PKCS7 v1_PEM_read_PKCS7
+#define PEM_read_PKCS8 v1_PEM_read_PKCS8
+#define PEM_read_PKCS8_PRIV_KEY_INFO v1_PEM_read_PKCS8_PRIV_KEY_INFO
+#define PEM_read_PrivateKey v1_PEM_read_PrivateKey
+#define PEM_read_PUBKEY v1_PEM_read_PUBKEY
+#define PEM_read_RSAPrivateKey v1_PEM_read_RSAPrivateKey
+#define PEM_read_RSA_PUBKEY v1_PEM_read_RSA_PUBKEY
+#define PEM_read_RSAPublicKey v1_PEM_read_RSAPublicKey
+#define PEM_read_SSL_SESSION v1_PEM_read_SSL_SESSION
+#define PEM_read_X509 v1_PEM_read_X509
+#define PEM_read_X509_AUX v1_PEM_read_X509_AUX
+#define PEM_read_X509_CRL v1_PEM_read_X509_CRL
+#define PEM_read_X509_REQ v1_PEM_read_X509_REQ
+#define PEM_SignFinal v1_PEM_SignFinal
+#define PEM_SignInit v1_PEM_SignInit
+#define PEM_SignUpdate v1_PEM_SignUpdate
+#define PEM_write v1_PEM_write
+#define PEM_write_bio v1_PEM_write_bio
+#define PEM_write_bio_ASN1_stream v1_PEM_write_bio_ASN1_stream
+#define PEM_write_bio_CMS v1_PEM_write_bio_CMS
+#define PEM_write_bio_CMS_stream v1_PEM_write_bio_CMS_stream
+#define PEM_write_bio_DHparams v1_PEM_write_bio_DHparams
+#define PEM_write_bio_DHxparams v1_PEM_write_bio_DHxparams
+#define PEM_write_bio_DSAparams v1_PEM_write_bio_DSAparams
+#define PEM_write_bio_DSAPrivateKey v1_PEM_write_bio_DSAPrivateKey
+#define PEM_write_bio_DSA_PUBKEY v1_PEM_write_bio_DSA_PUBKEY
+#define PEM_write_bio_ECPKParameters v1_PEM_write_bio_ECPKParameters
+#define PEM_write_bio_ECPrivateKey v1_PEM_write_bio_ECPrivateKey
+#define PEM_write_bio_EC_PUBKEY v1_PEM_write_bio_EC_PUBKEY
+#define PEM_write_bio_NETSCAPE_CERT_SEQUENCE v1_PEM_write_bio_NETSCAPE_CERT_SEQUENCE
+#define PEM_write_bio_Parameters v1_PEM_write_bio_Parameters
+#define PEM_write_bio_PKCS7 v1_PEM_write_bio_PKCS7
+#define PEM_write_bio_PKCS7_stream v1_PEM_write_bio_PKCS7_stream
+#define PEM_write_bio_PKCS8 v1_PEM_write_bio_PKCS8
+#define PEM_write_bio_PKCS8PrivateKey v1_PEM_write_bio_PKCS8PrivateKey
+#define PEM_write_bio_PKCS8PrivateKey_nid v1_PEM_write_bio_PKCS8PrivateKey_nid
+#define PEM_write_bio_PKCS8_PRIV_KEY_INFO v1_PEM_write_bio_PKCS8_PRIV_KEY_INFO
+#define PEM_write_bio_PrivateKey v1_PEM_write_bio_PrivateKey
+#define PEM_write_bio_PrivateKey_traditional v1_PEM_write_bio_PrivateKey_traditional
+#define PEM_write_bio_PUBKEY v1_PEM_write_bio_PUBKEY
+#define PEM_write_bio_RSAPrivateKey v1_PEM_write_bio_RSAPrivateKey
+#define PEM_write_bio_RSA_PUBKEY v1_PEM_write_bio_RSA_PUBKEY
+#define PEM_write_bio_RSAPublicKey v1_PEM_write_bio_RSAPublicKey
+#define PEM_write_bio_SSL_SESSION v1_PEM_write_bio_SSL_SESSION
+#define PEM_write_bio_X509 v1_PEM_write_bio_X509
+#define PEM_write_bio_X509_AUX v1_PEM_write_bio_X509_AUX
+#define PEM_write_bio_X509_CRL v1_PEM_write_bio_X509_CRL
+#define PEM_write_bio_X509_REQ v1_PEM_write_bio_X509_REQ
+#define PEM_write_bio_X509_REQ_NEW v1_PEM_write_bio_X509_REQ_NEW
+#define PEM_write_CMS v1_PEM_write_CMS
+#define PEM_write_DHparams v1_PEM_write_DHparams
+#define PEM_write_DHxparams v1_PEM_write_DHxparams
+#define PEM_write_DSAparams v1_PEM_write_DSAparams
+#define PEM_write_DSAPrivateKey v1_PEM_write_DSAPrivateKey
+#define PEM_write_DSA_PUBKEY v1_PEM_write_DSA_PUBKEY
+#define PEM_write_ECPKParameters v1_PEM_write_ECPKParameters
+#define PEM_write_ECPrivateKey v1_PEM_write_ECPrivateKey
+#define PEM_write_EC_PUBKEY v1_PEM_write_EC_PUBKEY
+#define PEM_write_NETSCAPE_CERT_SEQUENCE v1_PEM_write_NETSCAPE_CERT_SEQUENCE
+#define PEM_write_PKCS7 v1_PEM_write_PKCS7
+#define PEM_write_PKCS8 v1_PEM_write_PKCS8
+#define PEM_write_PKCS8PrivateKey v1_PEM_write_PKCS8PrivateKey
+#define PEM_write_PKCS8PrivateKey_nid v1_PEM_write_PKCS8PrivateKey_nid
+#define PEM_write_PKCS8_PRIV_KEY_INFO v1_PEM_write_PKCS8_PRIV_KEY_INFO
+#define PEM_write_PrivateKey v1_PEM_write_PrivateKey
+#define PEM_write_PUBKEY v1_PEM_write_PUBKEY
+#define PEM_write_RSAPrivateKey v1_PEM_write_RSAPrivateKey
+#define PEM_write_RSA_PUBKEY v1_PEM_write_RSA_PUBKEY
+#define PEM_write_RSAPublicKey v1_PEM_write_RSAPublicKey
+#define PEM_write_SSL_SESSION v1_PEM_write_SSL_SESSION
+#define PEM_write_X509 v1_PEM_write_X509
+#define PEM_write_X509_AUX v1_PEM_write_X509_AUX
+#define PEM_write_X509_CRL v1_PEM_write_X509_CRL
+#define PEM_write_X509_REQ v1_PEM_write_X509_REQ
+#define PEM_write_X509_REQ_NEW v1_PEM_write_X509_REQ_NEW
+#define PEM_X509_INFO_read v1_PEM_X509_INFO_read
+#define PEM_X509_INFO_read_bio v1_PEM_X509_INFO_read_bio
+#define PEM_X509_INFO_write_bio v1_PEM_X509_INFO_write_bio
+#define pitem_free v1_pitem_free
+#define pitem_new v1_pitem_new
+#define PKCS12_add_cert v1_PKCS12_add_cert
+#define PKCS12_add_CSPName_asc v1_PKCS12_add_CSPName_asc
+#define PKCS12_add_friendlyname_asc v1_PKCS12_add_friendlyname_asc
+#define PKCS12_add_friendlyname_uni v1_PKCS12_add_friendlyname_uni
+#define PKCS12_add_friendlyname_utf8 v1_PKCS12_add_friendlyname_utf8
+#define PKCS12_add_key v1_PKCS12_add_key
+#define PKCS12_add_localkeyid v1_PKCS12_add_localkeyid
+#define PKCS12_add_safe v1_PKCS12_add_safe
+#define PKCS12_add_safes v1_PKCS12_add_safes
+#define PKCS12_AUTHSAFES_it v1_PKCS12_AUTHSAFES_it
+#define PKCS12_BAGS_free v1_PKCS12_BAGS_free
+#define PKCS12_BAGS_it v1_PKCS12_BAGS_it
+#define PKCS12_BAGS_new v1_PKCS12_BAGS_new
+#define PKCS12_create v1_PKCS12_create
+#define PKCS12_decrypt_skey v1_PKCS12_decrypt_skey
+#define PKCS12_free v1_PKCS12_free
+#define PKCS12_gen_mac v1_PKCS12_gen_mac
+#define PKCS12_get0_mac v1_PKCS12_get0_mac
+#define PKCS12_get_attr v1_PKCS12_get_attr
+#define PKCS12_get_attr_gen v1_PKCS12_get_attr_gen
+#define PKCS12_get_friendlyname v1_PKCS12_get_friendlyname
+#define PKCS12_init v1_PKCS12_init
+#define PKCS12_it v1_PKCS12_it
+#define PKCS12_item_decrypt_d2i v1_PKCS12_item_decrypt_d2i
+#define PKCS12_item_i2d_encrypt v1_PKCS12_item_i2d_encrypt
+#define PKCS12_item_pack_safebag v1_PKCS12_item_pack_safebag
+#define PKCS12_key_gen_asc v1_PKCS12_key_gen_asc
+#define PKCS12_key_gen_uni v1_PKCS12_key_gen_uni
+#define PKCS12_key_gen_utf8 v1_PKCS12_key_gen_utf8
+#define PKCS12_MAC_DATA_free v1_PKCS12_MAC_DATA_free
+#define PKCS12_MAC_DATA_it v1_PKCS12_MAC_DATA_it
+#define PKCS12_MAC_DATA_new v1_PKCS12_MAC_DATA_new
+#define PKCS12_mac_present v1_PKCS12_mac_present
+#define PKCS12_new v1_PKCS12_new
+#define PKCS12_newpass v1_PKCS12_newpass
+#define PKCS12_pack_authsafes v1_PKCS12_pack_authsafes
+#define PKCS12_pack_p7data v1_PKCS12_pack_p7data
+#define PKCS12_pack_p7encdata v1_PKCS12_pack_p7encdata
+#define PKCS12_parse v1_PKCS12_parse
+#define PKCS12_PBE_add v1_PKCS12_PBE_add
+#define PKCS12_pbe_crypt v1_PKCS12_pbe_crypt
+#define PKCS12_PBE_keyivgen v1_PKCS12_PBE_keyivgen
+#define PKCS12_SAFEBAG_create0_p8inf v1_PKCS12_SAFEBAG_create0_p8inf
+#define PKCS12_SAFEBAG_create0_pkcs8 v1_PKCS12_SAFEBAG_create0_pkcs8
+#define PKCS12_SAFEBAG_create_cert v1_PKCS12_SAFEBAG_create_cert
+#define PKCS12_SAFEBAG_create_crl v1_PKCS12_SAFEBAG_create_crl
+#define PKCS12_SAFEBAG_create_pkcs8_encrypt v1_PKCS12_SAFEBAG_create_pkcs8_encrypt
+#define PKCS12_SAFEBAG_free v1_PKCS12_SAFEBAG_free
+#define PKCS12_SAFEBAG_get0_attr v1_PKCS12_SAFEBAG_get0_attr
+#define PKCS12_SAFEBAG_get0_attrs v1_PKCS12_SAFEBAG_get0_attrs
+#define PKCS12_SAFEBAG_get0_p8inf v1_PKCS12_SAFEBAG_get0_p8inf
+#define PKCS12_SAFEBAG_get0_pkcs8 v1_PKCS12_SAFEBAG_get0_pkcs8
+#define PKCS12_SAFEBAG_get0_safes v1_PKCS12_SAFEBAG_get0_safes
+#define PKCS12_SAFEBAG_get0_type v1_PKCS12_SAFEBAG_get0_type
+#define PKCS12_SAFEBAG_get1_cert v1_PKCS12_SAFEBAG_get1_cert
+#define PKCS12_SAFEBAG_get1_crl v1_PKCS12_SAFEBAG_get1_crl
+#define PKCS12_SAFEBAG_get_bag_nid v1_PKCS12_SAFEBAG_get_bag_nid
+#define PKCS12_SAFEBAG_get_nid v1_PKCS12_SAFEBAG_get_nid
+#define PKCS12_SAFEBAG_it v1_PKCS12_SAFEBAG_it
+#define PKCS12_SAFEBAG_new v1_PKCS12_SAFEBAG_new
+#define PKCS12_SAFEBAGS_it v1_PKCS12_SAFEBAGS_it
+#define PKCS12_set_mac v1_PKCS12_set_mac
+#define PKCS12_setup_mac v1_PKCS12_setup_mac
+#define PKCS12_unpack_authsafes v1_PKCS12_unpack_authsafes
+#define PKCS12_unpack_p7data v1_PKCS12_unpack_p7data
+#define PKCS12_unpack_p7encdata v1_PKCS12_unpack_p7encdata
+#define PKCS12_verify_mac v1_PKCS12_verify_mac
+#define PKCS1_MGF1 v1_PKCS1_MGF1
+#define PKCS5_pbe2_set v1_PKCS5_pbe2_set
+#define PKCS5_pbe2_set_iv v1_PKCS5_pbe2_set_iv
+#define PKCS5_pbe2_set_scrypt v1_PKCS5_pbe2_set_scrypt
+#define PKCS5_PBE_add v1_PKCS5_PBE_add
+#define PKCS5_PBE_keyivgen v1_PKCS5_PBE_keyivgen
+#define PKCS5_pbe_set v1_PKCS5_pbe_set
+#define PKCS5_pbe_set0_algor v1_PKCS5_pbe_set0_algor
+#define PKCS5_PBKDF2_HMAC v1_PKCS5_PBKDF2_HMAC
+#define PKCS5_PBKDF2_HMAC_SHA1 v1_PKCS5_PBKDF2_HMAC_SHA1
+#define PKCS5_pbkdf2_set v1_PKCS5_pbkdf2_set
+#define PKCS5_v2_PBE_keyivgen v1_PKCS5_v2_PBE_keyivgen
+#define PKCS5_v2_PBKDF2_keyivgen v1_PKCS5_v2_PBKDF2_keyivgen
+#define PKCS5_v2_scrypt_keyivgen v1_PKCS5_v2_scrypt_keyivgen
+#define PKCS7_add0_attrib_signing_time v1_PKCS7_add0_attrib_signing_time
+#define PKCS7_add1_attrib_digest v1_PKCS7_add1_attrib_digest
+#define PKCS7_add_attrib_content_type v1_PKCS7_add_attrib_content_type
+#define PKCS7_add_attrib_smimecap v1_PKCS7_add_attrib_smimecap
+#define PKCS7_add_attribute v1_PKCS7_add_attribute
+#define PKCS7_add_certificate v1_PKCS7_add_certificate
+#define PKCS7_add_crl v1_PKCS7_add_crl
+#define PKCS7_add_recipient v1_PKCS7_add_recipient
+#define PKCS7_add_recipient_info v1_PKCS7_add_recipient_info
+#define PKCS7_add_signature v1_PKCS7_add_signature
+#define PKCS7_add_signed_attribute v1_PKCS7_add_signed_attribute
+#define PKCS7_add_signer v1_PKCS7_add_signer
+#define PKCS7_ATTR_SIGN_it v1_PKCS7_ATTR_SIGN_it
+#define PKCS7_ATTR_VERIFY_it v1_PKCS7_ATTR_VERIFY_it
+#define PKCS7_cert_from_signer_info v1_PKCS7_cert_from_signer_info
+#define PKCS7_content_new v1_PKCS7_content_new
+#define PKCS7_ctrl v1_PKCS7_ctrl
+#define PKCS7_dataDecode v1_PKCS7_dataDecode
+#define PKCS7_dataFinal v1_PKCS7_dataFinal
+#define PKCS7_dataInit v1_PKCS7_dataInit
+#define PKCS7_dataVerify v1_PKCS7_dataVerify
+#define PKCS7_decrypt v1_PKCS7_decrypt
+#define PKCS7_DIGEST_free v1_PKCS7_DIGEST_free
+#define PKCS7_digest_from_attributes v1_PKCS7_digest_from_attributes
+#define PKCS7_DIGEST_it v1_PKCS7_DIGEST_it
+#define PKCS7_DIGEST_new v1_PKCS7_DIGEST_new
+#define PKCS7_dup v1_PKCS7_dup
+#define PKCS7_ENC_CONTENT_free v1_PKCS7_ENC_CONTENT_free
+#define PKCS7_ENC_CONTENT_it v1_PKCS7_ENC_CONTENT_it
+#define PKCS7_ENC_CONTENT_new v1_PKCS7_ENC_CONTENT_new
+#define PKCS7_encrypt v1_PKCS7_encrypt
+#define PKCS7_ENCRYPT_free v1_PKCS7_ENCRYPT_free
+#define PKCS7_ENCRYPT_it v1_PKCS7_ENCRYPT_it
+#define PKCS7_ENCRYPT_new v1_PKCS7_ENCRYPT_new
+#define PKCS7_ENVELOPE_free v1_PKCS7_ENVELOPE_free
+#define PKCS7_ENVELOPE_it v1_PKCS7_ENVELOPE_it
+#define PKCS7_ENVELOPE_new v1_PKCS7_ENVELOPE_new
+#define PKCS7_final v1_PKCS7_final
+#define PKCS7_free v1_PKCS7_free
+#define PKCS7_get0_signers v1_PKCS7_get0_signers
+#define PKCS7_get_attribute v1_PKCS7_get_attribute
+#define PKCS7_get_issuer_and_serial v1_PKCS7_get_issuer_and_serial
+#define PKCS7_get_signed_attribute v1_PKCS7_get_signed_attribute
+#define PKCS7_get_signer_info v1_PKCS7_get_signer_info
+#define PKCS7_get_smimecap v1_PKCS7_get_smimecap
+#define PKCS7_ISSUER_AND_SERIAL_digest v1_PKCS7_ISSUER_AND_SERIAL_digest
+#define PKCS7_ISSUER_AND_SERIAL_free v1_PKCS7_ISSUER_AND_SERIAL_free
+#define PKCS7_ISSUER_AND_SERIAL_it v1_PKCS7_ISSUER_AND_SERIAL_it
+#define PKCS7_ISSUER_AND_SERIAL_new v1_PKCS7_ISSUER_AND_SERIAL_new
+#define PKCS7_it v1_PKCS7_it
+#define PKCS7_new v1_PKCS7_new
+#define PKCS7_print_ctx v1_PKCS7_print_ctx
+#define PKCS7_RECIP_INFO_free v1_PKCS7_RECIP_INFO_free
+#define PKCS7_RECIP_INFO_get0_alg v1_PKCS7_RECIP_INFO_get0_alg
+#define PKCS7_RECIP_INFO_it v1_PKCS7_RECIP_INFO_it
+#define PKCS7_RECIP_INFO_new v1_PKCS7_RECIP_INFO_new
+#define PKCS7_RECIP_INFO_set v1_PKCS7_RECIP_INFO_set
+#define PKCS7_set0_type_other v1_PKCS7_set0_type_other
+#define PKCS7_set_attributes v1_PKCS7_set_attributes
+#define PKCS7_set_cipher v1_PKCS7_set_cipher
+#define PKCS7_set_content v1_PKCS7_set_content
+#define PKCS7_set_digest v1_PKCS7_set_digest
+#define PKCS7_set_signed_attributes v1_PKCS7_set_signed_attributes
+#define PKCS7_set_type v1_PKCS7_set_type
+#define PKCS7_sign v1_PKCS7_sign
+#define PKCS7_sign_add_signer v1_PKCS7_sign_add_signer
+#define PKCS7_signatureVerify v1_PKCS7_signatureVerify
+#define PKCS7_SIGNED_free v1_PKCS7_SIGNED_free
+#define PKCS7_SIGNED_it v1_PKCS7_SIGNED_it
+#define PKCS7_SIGNED_new v1_PKCS7_SIGNED_new
+#define PKCS7_SIGN_ENVELOPE_free v1_PKCS7_SIGN_ENVELOPE_free
+#define PKCS7_SIGN_ENVELOPE_it v1_PKCS7_SIGN_ENVELOPE_it
+#define PKCS7_SIGN_ENVELOPE_new v1_PKCS7_SIGN_ENVELOPE_new
+#define PKCS7_SIGNER_INFO_free v1_PKCS7_SIGNER_INFO_free
+#define PKCS7_SIGNER_INFO_get0_algs v1_PKCS7_SIGNER_INFO_get0_algs
+#define PKCS7_SIGNER_INFO_it v1_PKCS7_SIGNER_INFO_it
+#define PKCS7_SIGNER_INFO_new v1_PKCS7_SIGNER_INFO_new
+#define PKCS7_SIGNER_INFO_set v1_PKCS7_SIGNER_INFO_set
+#define PKCS7_SIGNER_INFO_sign v1_PKCS7_SIGNER_INFO_sign
+#define PKCS7_simple_smimecap v1_PKCS7_simple_smimecap
+#define PKCS7_stream v1_PKCS7_stream
+#define PKCS7_to_TS_TST_INFO v1_PKCS7_to_TS_TST_INFO
+#define PKCS7_verify v1_PKCS7_verify
+#define PKCS8_add_keyusage v1_PKCS8_add_keyusage
+#define PKCS8_decrypt v1_PKCS8_decrypt
+#define PKCS8_encrypt v1_PKCS8_encrypt
+#define PKCS8_get_attr v1_PKCS8_get_attr
+#define PKCS8_pkey_add1_attr_by_NID v1_PKCS8_pkey_add1_attr_by_NID
+#define PKCS8_pkey_get0 v1_PKCS8_pkey_get0
+#define PKCS8_pkey_get0_attrs v1_PKCS8_pkey_get0_attrs
+#define PKCS8_pkey_set0 v1_PKCS8_pkey_set0
+#define PKCS8_PRIV_KEY_INFO_free v1_PKCS8_PRIV_KEY_INFO_free
+#define PKCS8_PRIV_KEY_INFO_it v1_PKCS8_PRIV_KEY_INFO_it
+#define PKCS8_PRIV_KEY_INFO_new v1_PKCS8_PRIV_KEY_INFO_new
+#define PKCS8_set0_pbe v1_PKCS8_set0_pbe
+#define PKEY_USAGE_PERIOD_free v1_PKEY_USAGE_PERIOD_free
+#define PKEY_USAGE_PERIOD_it v1_PKEY_USAGE_PERIOD_it
+#define PKEY_USAGE_PERIOD_new v1_PKEY_USAGE_PERIOD_new
+#define policy_cache_find_data v1_policy_cache_find_data
+#define policy_cache_free v1_policy_cache_free
+#define policy_cache_set v1_policy_cache_set
+#define policy_cache_set_mapping v1_policy_cache_set_mapping
+#define POLICY_CONSTRAINTS_free v1_POLICY_CONSTRAINTS_free
+#define POLICY_CONSTRAINTS_it v1_POLICY_CONSTRAINTS_it
+#define POLICY_CONSTRAINTS_new v1_POLICY_CONSTRAINTS_new
+#define policy_data_free v1_policy_data_free
+#define policy_data_new v1_policy_data_new
+#define POLICYINFO_free v1_POLICYINFO_free
+#define POLICYINFO_it v1_POLICYINFO_it
+#define POLICYINFO_new v1_POLICYINFO_new
+#define POLICY_MAPPING_free v1_POLICY_MAPPING_free
+#define POLICY_MAPPING_it v1_POLICY_MAPPING_it
+#define POLICY_MAPPING_new v1_POLICY_MAPPING_new
+#define POLICY_MAPPINGS_it v1_POLICY_MAPPINGS_it
+#define policy_node_cmp_new v1_policy_node_cmp_new
+#define policy_node_free v1_policy_node_free
+#define policy_node_match v1_policy_node_match
+#define POLICYQUALINFO_free v1_POLICYQUALINFO_free
+#define POLICYQUALINFO_it v1_POLICYQUALINFO_it
+#define POLICYQUALINFO_new v1_POLICYQUALINFO_new
+#define poly1305_asn1_meth v1_poly1305_asn1_meth
+#define poly1305_blocks v1_poly1305_blocks
+#define Poly1305_ctx_size v1_Poly1305_ctx_size
+#define poly1305_emit v1_poly1305_emit
+#define Poly1305_Final v1_Poly1305_Final
+#define poly1305_init v1_poly1305_init
+#define Poly1305_Init v1_Poly1305_Init
+#define poly1305_pkey_meth v1_poly1305_pkey_meth
+#define Poly1305_Update v1_Poly1305_Update
+#define pqueue_find v1_pqueue_find
+#define pqueue_free v1_pqueue_free
+#define pqueue_insert v1_pqueue_insert
+#define pqueue_iterator v1_pqueue_iterator
+#define pqueue_new v1_pqueue_new
+#define pqueue_next v1_pqueue_next
+#define pqueue_peek v1_pqueue_peek
+#define pqueue_pop v1_pqueue_pop
+#define pqueue_size v1_pqueue_size
+#define PROFESSION_INFO_free v1_PROFESSION_INFO_free
+#define PROFESSION_INFO_get0_addProfessionInfo v1_PROFESSION_INFO_get0_addProfessionInfo
+#define PROFESSION_INFO_get0_namingAuthority v1_PROFESSION_INFO_get0_namingAuthority
+#define PROFESSION_INFO_get0_professionItems v1_PROFESSION_INFO_get0_professionItems
+#define PROFESSION_INFO_get0_professionOIDs v1_PROFESSION_INFO_get0_professionOIDs
+#define PROFESSION_INFO_get0_registrationNumber v1_PROFESSION_INFO_get0_registrationNumber
+#define PROFESSION_INFO_it v1_PROFESSION_INFO_it
+#define PROFESSION_INFO_new v1_PROFESSION_INFO_new
+#define PROFESSION_INFO_set0_addProfessionInfo v1_PROFESSION_INFO_set0_addProfessionInfo
+#define PROFESSION_INFO_set0_namingAuthority v1_PROFESSION_INFO_set0_namingAuthority
+#define PROFESSION_INFO_set0_professionItems v1_PROFESSION_INFO_set0_professionItems
+#define PROFESSION_INFO_set0_professionOIDs v1_PROFESSION_INFO_set0_professionOIDs
+#define PROFESSION_INFO_set0_registrationNumber v1_PROFESSION_INFO_set0_registrationNumber
+#define PROXY_CERT_INFO_EXTENSION_free v1_PROXY_CERT_INFO_EXTENSION_free
+#define PROXY_CERT_INFO_EXTENSION_it v1_PROXY_CERT_INFO_EXTENSION_it
+#define PROXY_CERT_INFO_EXTENSION_new v1_PROXY_CERT_INFO_EXTENSION_new
+#define PROXY_POLICY_free v1_PROXY_POLICY_free
+#define PROXY_POLICY_it v1_PROXY_POLICY_it
+#define PROXY_POLICY_new v1_PROXY_POLICY_new
+#define quic_get_message v1_quic_get_message
+#define quic_set_encryption_secrets v1_quic_set_encryption_secrets
+#define RAND_add v1_RAND_add
+#define RAND_bytes v1_RAND_bytes
+#define rand_cleanup_int v1_rand_cleanup_int
+#define RAND_DRBG_bytes v1_RAND_DRBG_bytes
+#define rand_drbg_cleanup_additional_data v1_rand_drbg_cleanup_additional_data
+#define rand_drbg_cleanup_entropy v1_rand_drbg_cleanup_entropy
+#define rand_drbg_cleanup_int v1_rand_drbg_cleanup_int
+#define rand_drbg_cleanup_nonce v1_rand_drbg_cleanup_nonce
+#define rand_drbg_enable_locking v1_rand_drbg_enable_locking
+#define RAND_DRBG_free v1_RAND_DRBG_free
+#define RAND_DRBG_generate v1_RAND_DRBG_generate
+#define RAND_DRBG_get0_master v1_RAND_DRBG_get0_master
+#define RAND_DRBG_get0_private v1_RAND_DRBG_get0_private
+#define RAND_DRBG_get0_public v1_RAND_DRBG_get0_public
+#define rand_drbg_get_additional_data v1_rand_drbg_get_additional_data
+#define rand_drbg_get_entropy v1_rand_drbg_get_entropy
+#define RAND_DRBG_get_ex_data v1_RAND_DRBG_get_ex_data
+#define rand_drbg_get_nonce v1_rand_drbg_get_nonce
+#define RAND_DRBG_instantiate v1_RAND_DRBG_instantiate
+#define rand_drbg_lock v1_rand_drbg_lock
+#define RAND_DRBG_new v1_RAND_DRBG_new
+#define RAND_DRBG_reseed v1_RAND_DRBG_reseed
+#define rand_drbg_restart v1_rand_drbg_restart
+#define RAND_DRBG_secure_new v1_RAND_DRBG_secure_new
+#define rand_drbg_seedlen v1_rand_drbg_seedlen
+#define RAND_DRBG_set v1_RAND_DRBG_set
+#define RAND_DRBG_set_callbacks v1_RAND_DRBG_set_callbacks
+#define RAND_DRBG_set_defaults v1_RAND_DRBG_set_defaults
+#define RAND_DRBG_set_ex_data v1_RAND_DRBG_set_ex_data
+#define RAND_DRBG_set_reseed_defaults v1_RAND_DRBG_set_reseed_defaults
+#define RAND_DRBG_set_reseed_interval v1_RAND_DRBG_set_reseed_interval
+#define RAND_DRBG_set_reseed_time_interval v1_RAND_DRBG_set_reseed_time_interval
+#define RAND_DRBG_uninstantiate v1_RAND_DRBG_uninstantiate
+#define rand_drbg_unlock v1_rand_drbg_unlock
+#define RAND_file_name v1_RAND_file_name
+#define RAND_get_rand_method v1_RAND_get_rand_method
+#define RAND_keep_random_devices_open v1_RAND_keep_random_devices_open
+#define RAND_load_file v1_RAND_load_file
+#define rand_meth v1_rand_meth
+#define RAND_OpenSSL v1_RAND_OpenSSL
+#define RAND_poll v1_RAND_poll
+#define rand_pool_acquire_entropy v1_rand_pool_acquire_entropy
+#define rand_pool_add v1_rand_pool_add
+#define rand_pool_add_additional_data v1_rand_pool_add_additional_data
+#define rand_pool_add_begin v1_rand_pool_add_begin
+#define rand_pool_add_end v1_rand_pool_add_end
+#define rand_pool_add_nonce_data v1_rand_pool_add_nonce_data
+#define rand_pool_attach v1_rand_pool_attach
+#define rand_pool_buffer v1_rand_pool_buffer
+#define rand_pool_bytes_needed v1_rand_pool_bytes_needed
+#define rand_pool_bytes_remaining v1_rand_pool_bytes_remaining
+#define rand_pool_cleanup v1_rand_pool_cleanup
+#define rand_pool_detach v1_rand_pool_detach
+#define rand_pool_entropy v1_rand_pool_entropy
+#define rand_pool_entropy_available v1_rand_pool_entropy_available
+#define rand_pool_entropy_needed v1_rand_pool_entropy_needed
+#define rand_pool_free v1_rand_pool_free
+#define rand_pool_init v1_rand_pool_init
+#define rand_pool_keep_random_devices_open v1_rand_pool_keep_random_devices_open
+#define rand_pool_length v1_rand_pool_length
+#define rand_pool_new v1_rand_pool_new
+#define rand_pool_reattach v1_rand_pool_reattach
+#define RAND_priv_bytes v1_RAND_priv_bytes
+#define RAND_pseudo_bytes v1_RAND_pseudo_bytes
+#define RAND_seed v1_RAND_seed
+#define RAND_set_rand_engine v1_RAND_set_rand_engine
+#define RAND_set_rand_method v1_RAND_set_rand_method
+#define RAND_status v1_RAND_status
+#define RAND_write_file v1_RAND_write_file
+#define RC2_cbc_encrypt v1_RC2_cbc_encrypt
+#define RC2_cfb64_encrypt v1_RC2_cfb64_encrypt
+#define RC2_decrypt v1_RC2_decrypt
+#define RC2_ecb_encrypt v1_RC2_ecb_encrypt
+#define RC2_encrypt v1_RC2_encrypt
+#define RC2_ofb64_encrypt v1_RC2_ofb64_encrypt
+#define RC2_set_key v1_RC2_set_key
+//#define RC4 v1_RC4
+#define rc4_md5_enc v1_rc4_md5_enc
+#define RC4_options v1_RC4_options
+#define RC4_set_key v1_RC4_set_key
+#define RECORD_LAYER_clear v1_RECORD_LAYER_clear
+#define RECORD_LAYER_get_rrec_length v1_RECORD_LAYER_get_rrec_length
+#define RECORD_LAYER_init v1_RECORD_LAYER_init
+#define RECORD_LAYER_is_sslv2_record v1_RECORD_LAYER_is_sslv2_record
+#define RECORD_LAYER_processed_read_pending v1_RECORD_LAYER_processed_read_pending
+#define RECORD_LAYER_read_pending v1_RECORD_LAYER_read_pending
+#define RECORD_LAYER_release v1_RECORD_LAYER_release
+#define RECORD_LAYER_reset_read_sequence v1_RECORD_LAYER_reset_read_sequence
+#define RECORD_LAYER_reset_write_sequence v1_RECORD_LAYER_reset_write_sequence
+#define RECORD_LAYER_write_pending v1_RECORD_LAYER_write_pending
+#define RIPEMD160 v1_RIPEMD160
+#define ripemd160_block_data_order v1_ripemd160_block_data_order
+#define RIPEMD160_Final v1_RIPEMD160_Final
+#define RIPEMD160_Init v1_RIPEMD160_Init
+#define RIPEMD160_Transform v1_RIPEMD160_Transform
+#define RIPEMD160_Update v1_RIPEMD160_Update
+#define rsa_asn1_meths v1_rsa_asn1_meths
+#define RSA_bits v1_RSA_bits
+#define RSA_blinding_off v1_RSA_blinding_off
+#define RSA_blinding_on v1_RSA_blinding_on
+#define RSA_check_key v1_RSA_check_key
+#define RSA_check_key_ex v1_RSA_check_key_ex
+#define RSA_clear_flags v1_RSA_clear_flags
+#define RSA_flags v1_RSA_flags
+#define RSA_free v1_RSA_free
+#define RSA_generate_key v1_RSA_generate_key
+#define RSA_generate_key_ex v1_RSA_generate_key_ex
+#define RSA_generate_multi_prime_key v1_RSA_generate_multi_prime_key
+#define RSA_get0_crt_params v1_RSA_get0_crt_params
+#define RSA_get0_d v1_RSA_get0_d
+#define RSA_get0_dmp1 v1_RSA_get0_dmp1
+#define RSA_get0_dmq1 v1_RSA_get0_dmq1
+#define RSA_get0_e v1_RSA_get0_e
+#define RSA_get0_engine v1_RSA_get0_engine
+#define RSA_get0_factors v1_RSA_get0_factors
+#define RSA_get0_iqmp v1_RSA_get0_iqmp
+#define RSA_get0_key v1_RSA_get0_key
+#define RSA_get0_multi_prime_crt_params v1_RSA_get0_multi_prime_crt_params
+#define RSA_get0_multi_prime_factors v1_RSA_get0_multi_prime_factors
+#define RSA_get0_n v1_RSA_get0_n
+#define RSA_get0_p v1_RSA_get0_p
+#define RSA_get0_pss_params v1_RSA_get0_pss_params
+#define RSA_get0_q v1_RSA_get0_q
+#define RSA_get_default_method v1_RSA_get_default_method
+#define RSA_get_ex_data v1_RSA_get_ex_data
+#define RSA_get_method v1_RSA_get_method
+#define RSA_get_multi_prime_extra_count v1_RSA_get_multi_prime_extra_count
+#define RSA_get_version v1_RSA_get_version
+#define RSA_meth_dup v1_RSA_meth_dup
+#define RSA_meth_free v1_RSA_meth_free
+#define RSA_meth_get0_app_data v1_RSA_meth_get0_app_data
+#define RSA_meth_get0_name v1_RSA_meth_get0_name
+#define RSA_meth_get_bn_mod_exp v1_RSA_meth_get_bn_mod_exp
+#define RSA_meth_get_finish v1_RSA_meth_get_finish
+#define RSA_meth_get_flags v1_RSA_meth_get_flags
+#define RSA_meth_get_init v1_RSA_meth_get_init
+#define RSA_meth_get_keygen v1_RSA_meth_get_keygen
+#define RSA_meth_get_mod_exp v1_RSA_meth_get_mod_exp
+#define RSA_meth_get_multi_prime_keygen v1_RSA_meth_get_multi_prime_keygen
+#define RSA_meth_get_priv_dec v1_RSA_meth_get_priv_dec
+#define RSA_meth_get_priv_enc v1_RSA_meth_get_priv_enc
+#define RSA_meth_get_pub_dec v1_RSA_meth_get_pub_dec
+#define RSA_meth_get_pub_enc v1_RSA_meth_get_pub_enc
+#define RSA_meth_get_sign v1_RSA_meth_get_sign
+#define RSA_meth_get_verify v1_RSA_meth_get_verify
+#define RSA_meth_new v1_RSA_meth_new
+#define RSA_meth_set0_app_data v1_RSA_meth_set0_app_data
+#define RSA_meth_set1_name v1_RSA_meth_set1_name
+#define RSA_meth_set_bn_mod_exp v1_RSA_meth_set_bn_mod_exp
+#define RSA_meth_set_finish v1_RSA_meth_set_finish
+#define RSA_meth_set_flags v1_RSA_meth_set_flags
+#define RSA_meth_set_init v1_RSA_meth_set_init
+#define RSA_meth_set_keygen v1_RSA_meth_set_keygen
+#define RSA_meth_set_mod_exp v1_RSA_meth_set_mod_exp
+#define RSA_meth_set_multi_prime_keygen v1_RSA_meth_set_multi_prime_keygen
+#define RSA_meth_set_priv_dec v1_RSA_meth_set_priv_dec
+#define RSA_meth_set_priv_enc v1_RSA_meth_set_priv_enc
+#define RSA_meth_set_pub_dec v1_RSA_meth_set_pub_dec
+#define RSA_meth_set_pub_enc v1_RSA_meth_set_pub_enc
+#define RSA_meth_set_sign v1_RSA_meth_set_sign
+#define RSA_meth_set_verify v1_RSA_meth_set_verify
+#define rsa_multip_calc_product v1_rsa_multip_calc_product
+#define rsa_multip_cap v1_rsa_multip_cap
+#define rsa_multip_info_free v1_rsa_multip_info_free
+#define rsa_multip_info_free_ex v1_rsa_multip_info_free_ex
+#define rsa_multip_info_new v1_rsa_multip_info_new
+#define RSA_new v1_RSA_new
+#define RSA_new_method v1_RSA_new_method
+#define RSA_null_method v1_RSA_null_method
+#define RSA_OAEP_PARAMS_free v1_RSA_OAEP_PARAMS_free
+#define RSA_OAEP_PARAMS_it v1_RSA_OAEP_PARAMS_it
+#define RSA_OAEP_PARAMS_new v1_RSA_OAEP_PARAMS_new
+#define RSA_padding_add_none v1_RSA_padding_add_none
+#define RSA_padding_add_PKCS1_OAEP v1_RSA_padding_add_PKCS1_OAEP
+#define RSA_padding_add_PKCS1_OAEP_mgf1 v1_RSA_padding_add_PKCS1_OAEP_mgf1
+#define RSA_padding_add_PKCS1_PSS v1_RSA_padding_add_PKCS1_PSS
+#define RSA_padding_add_PKCS1_PSS_mgf1 v1_RSA_padding_add_PKCS1_PSS_mgf1
+#define RSA_padding_add_PKCS1_type_1 v1_RSA_padding_add_PKCS1_type_1
+#define RSA_padding_add_PKCS1_type_2 v1_RSA_padding_add_PKCS1_type_2
+#define RSA_padding_add_SSLv23 v1_RSA_padding_add_SSLv23
+#define RSA_padding_add_X931 v1_RSA_padding_add_X931
+#define RSA_padding_check_none v1_RSA_padding_check_none
+#define RSA_padding_check_PKCS1_OAEP v1_RSA_padding_check_PKCS1_OAEP
+#define RSA_padding_check_PKCS1_OAEP_mgf1 v1_RSA_padding_check_PKCS1_OAEP_mgf1
+#define RSA_padding_check_PKCS1_type_1 v1_RSA_padding_check_PKCS1_type_1
+#define RSA_padding_check_PKCS1_type_2 v1_RSA_padding_check_PKCS1_type_2
+#define RSA_padding_check_SSLv23 v1_RSA_padding_check_SSLv23
+#define RSA_padding_check_X931 v1_RSA_padding_check_X931
+#define RSA_PKCS1_OpenSSL v1_RSA_PKCS1_OpenSSL
+#define RSA_pkey_ctx_ctrl v1_RSA_pkey_ctx_ctrl
+#define rsa_pkey_meth v1_rsa_pkey_meth
+#define RSA_PRIME_INFO_it v1_RSA_PRIME_INFO_it
+#define RSA_print v1_RSA_print
+#define RSA_print_fp v1_RSA_print_fp
+#define RSA_private_decrypt v1_RSA_private_decrypt
+#define RSA_private_encrypt v1_RSA_private_encrypt
+#define RSAPrivateKey_dup v1_RSAPrivateKey_dup
+#define RSAPrivateKey_it v1_RSAPrivateKey_it
+#define rsa_pss_asn1_meth v1_rsa_pss_asn1_meth
+#define rsa_pss_get_param v1_rsa_pss_get_param
+#define rsa_pss_params_create v1_rsa_pss_params_create
+#define RSA_PSS_PARAMS_free v1_RSA_PSS_PARAMS_free
+#define RSA_PSS_PARAMS_it v1_RSA_PSS_PARAMS_it
+#define RSA_PSS_PARAMS_new v1_RSA_PSS_PARAMS_new
+#define rsa_pss_pkey_meth v1_rsa_pss_pkey_meth
+#define RSA_public_decrypt v1_RSA_public_decrypt
+#define RSA_public_encrypt v1_RSA_public_encrypt
+#define RSAPublicKey_dup v1_RSAPublicKey_dup
+#define RSAPublicKey_it v1_RSAPublicKey_it
+#define RSA_security_bits v1_RSA_security_bits
+#define RSA_set0_crt_params v1_RSA_set0_crt_params
+#define RSA_set0_factors v1_RSA_set0_factors
+#define RSA_set0_key v1_RSA_set0_key
+#define RSA_set0_multi_prime_params v1_RSA_set0_multi_prime_params
+#define RSA_set_default_method v1_RSA_set_default_method
+#define RSA_set_ex_data v1_RSA_set_ex_data
+#define RSA_set_flags v1_RSA_set_flags
+#define RSA_set_method v1_RSA_set_method
+#define RSA_setup_blinding v1_RSA_setup_blinding
+#define RSA_sign v1_RSA_sign
+#define RSA_sign_ASN1_OCTET_STRING v1_RSA_sign_ASN1_OCTET_STRING
+#define RSA_size v1_RSA_size
+#define RSA_test_flags v1_RSA_test_flags
+#define RSA_up_ref v1_RSA_up_ref
+#define RSA_verify v1_RSA_verify
+#define RSA_verify_ASN1_OCTET_STRING v1_RSA_verify_ASN1_OCTET_STRING
+#define RSA_verify_PKCS1_PSS v1_RSA_verify_PKCS1_PSS
+#define RSA_verify_PKCS1_PSS_mgf1 v1_RSA_verify_PKCS1_PSS_mgf1
+#define RSA_X931_derive_ex v1_RSA_X931_derive_ex
+#define RSA_X931_generate_key_ex v1_RSA_X931_generate_key_ex
+#define RSA_X931_hash_id v1_RSA_X931_hash_id
+#define rsaz_1024_gather5_avx2 v1_rsaz_1024_gather5_avx2
+#define RSAZ_1024_mod_exp_avx2 v1_RSAZ_1024_mod_exp_avx2
+#define rsaz_1024_mul_avx2 v1_rsaz_1024_mul_avx2
+#define rsaz_1024_norm2red_avx2 v1_rsaz_1024_norm2red_avx2
+#define rsaz_1024_red2norm_avx2 v1_rsaz_1024_red2norm_avx2
+#define rsaz_1024_scatter5_avx2 v1_rsaz_1024_scatter5_avx2
+#define rsaz_1024_sqr_avx2 v1_rsaz_1024_sqr_avx2
+#define rsaz_512_gather4 v1_rsaz_512_gather4
+#define RSAZ_512_mod_exp v1_RSAZ_512_mod_exp
+#define rsaz_512_mul v1_rsaz_512_mul
+#define rsaz_512_mul_by_one v1_rsaz_512_mul_by_one
+#define rsaz_512_mul_gather4 v1_rsaz_512_mul_gather4
+#define rsaz_512_mul_scatter4 v1_rsaz_512_mul_scatter4
+#define rsaz_512_scatter4 v1_rsaz_512_scatter4
+#define rsaz_512_sqr v1_rsaz_512_sqr
+#define rsaz_avx2_eligible v1_rsaz_avx2_eligible
+#define s2i_ASN1_IA5STRING v1_s2i_ASN1_IA5STRING
+#define s2i_ASN1_INTEGER v1_s2i_ASN1_INTEGER
+#define s2i_ASN1_OCTET_STRING v1_s2i_ASN1_OCTET_STRING
+#define SCRYPT_PARAMS_free v1_SCRYPT_PARAMS_free
+#define SCRYPT_PARAMS_it v1_SCRYPT_PARAMS_it
+#define SCRYPT_PARAMS_new v1_SCRYPT_PARAMS_new
+#define scrypt_pkey_meth v1_scrypt_pkey_meth
+#define SCT_CTX_free v1_SCT_CTX_free
+#define SCT_CTX_new v1_SCT_CTX_new
+#define SCT_CTX_set1_cert v1_SCT_CTX_set1_cert
+#define SCT_CTX_set1_issuer v1_SCT_CTX_set1_issuer
+#define SCT_CTX_set1_issuer_pubkey v1_SCT_CTX_set1_issuer_pubkey
+#define SCT_CTX_set1_pubkey v1_SCT_CTX_set1_pubkey
+#define SCT_CTX_set_time v1_SCT_CTX_set_time
+#define SCT_CTX_verify v1_SCT_CTX_verify
+#define SCT_free v1_SCT_free
+#define SCT_get0_extensions v1_SCT_get0_extensions
+#define SCT_get0_log_id v1_SCT_get0_log_id
+#define SCT_get0_signature v1_SCT_get0_signature
+#define SCT_get_log_entry_type v1_SCT_get_log_entry_type
+#define SCT_get_signature_nid v1_SCT_get_signature_nid
+#define SCT_get_source v1_SCT_get_source
+#define SCT_get_timestamp v1_SCT_get_timestamp
+#define SCT_get_validation_status v1_SCT_get_validation_status
+#define SCT_get_version v1_SCT_get_version
+#define SCT_is_complete v1_SCT_is_complete
+#define SCT_LIST_free v1_SCT_LIST_free
+#define SCT_LIST_print v1_SCT_LIST_print
+#define SCT_LIST_validate v1_SCT_LIST_validate
+#define SCT_new v1_SCT_new
+#define SCT_new_from_base64 v1_SCT_new_from_base64
+#define SCT_print v1_SCT_print
+#define SCT_set0_extensions v1_SCT_set0_extensions
+#define SCT_set0_log_id v1_SCT_set0_log_id
+#define SCT_set0_signature v1_SCT_set0_signature
+#define SCT_set1_extensions v1_SCT_set1_extensions
+#define SCT_set1_log_id v1_SCT_set1_log_id
+#define SCT_set1_signature v1_SCT_set1_signature
+#define SCT_set_log_entry_type v1_SCT_set_log_entry_type
+#define SCT_set_signature_nid v1_SCT_set_signature_nid
+#define SCT_set_source v1_SCT_set_source
+#define SCT_set_timestamp v1_SCT_set_timestamp
+#define SCT_set_version v1_SCT_set_version
+#define SCT_signature_is_complete v1_SCT_signature_is_complete
+#define SCT_validate v1_SCT_validate
+#define SCT_validation_status_string v1_SCT_validation_status_string
+#define SEED_cbc_encrypt v1_SEED_cbc_encrypt
+#define SEED_cfb128_encrypt v1_SEED_cfb128_encrypt
+#define SEED_decrypt v1_SEED_decrypt
+#define SEED_ecb_encrypt v1_SEED_ecb_encrypt
+#define SEED_encrypt v1_SEED_encrypt
+#define SEED_ofb128_encrypt v1_SEED_ofb128_encrypt
+#define SEED_set_key v1_SEED_set_key
+#define send_certificate_request v1_send_certificate_request
+//#define SHA1 v1_SHA1
+#define sha1_block_data_order v1_sha1_block_data_order
+#define SHA1_Final v1_SHA1_Final
+#define SHA1_Init v1_SHA1_Init
+#define sha1_multi_block v1_sha1_multi_block
+#define SHA1_Transform v1_SHA1_Transform
+#define SHA1_Update v1_SHA1_Update
+#define SHA224 v1_SHA224
+#define SHA224_Final v1_SHA224_Final
+#define SHA224_Init v1_SHA224_Init
+#define SHA224_Update v1_SHA224_Update
+//#define SHA256 v1_SHA256
+#define sha256_block_data_order v1_sha256_block_data_order
+#define SHA256_Final v1_SHA256_Final
+#define SHA256_Init v1_SHA256_Init
+#define sha256_multi_block v1_sha256_multi_block
+#define SHA256_Transform v1_SHA256_Transform
+#define SHA256_Update v1_SHA256_Update
+//#define SHA384 v1_SHA384
+#define SHA384_Final v1_SHA384_Final
+#define SHA384_Init v1_SHA384_Init
+#define SHA384_Update v1_SHA384_Update
+#define SHA3_absorb v1_SHA3_absorb
+#define SHA3_squeeze v1_SHA3_squeeze
+//#define SHA512 v1_SHA512
+#define sha512_224_init v1_sha512_224_init
+#define sha512_256_init v1_sha512_256_init
+#define sha512_block_data_order v1_sha512_block_data_order
+#define SHA512_Final v1_SHA512_Final
+#define SHA512_Init v1_SHA512_Init
+#define SHA512_Transform v1_SHA512_Transform
+#define SHA512_Update v1_SHA512_Update
+#define _shadow_DES_check_key v1__shadow_DES_check_key
+#define should_add_extension v1_should_add_extension
+#define siphash_asn1_meth v1_siphash_asn1_meth
+#define SipHash_ctx_size v1_SipHash_ctx_size
+#define SipHash_Final v1_SipHash_Final
+#define SipHash_hash_size v1_SipHash_hash_size
+#define SipHash_Init v1_SipHash_Init
+#define siphash_pkey_meth v1_siphash_pkey_meth
+#define SipHash_set_hash_size v1_SipHash_set_hash_size
+#define SipHash_Update v1_SipHash_Update
+#define sm2_asn1_meth v1_sm2_asn1_meth
+#define SM2_Ciphertext_free v1_SM2_Ciphertext_free
+#define SM2_Ciphertext_it v1_SM2_Ciphertext_it
+#define SM2_Ciphertext_new v1_SM2_Ciphertext_new
+#define sm2_ciphertext_size v1_sm2_ciphertext_size
+#define sm2_compute_z_digest v1_sm2_compute_z_digest
+#define sm2_decrypt v1_sm2_decrypt
+#define sm2_do_sign v1_sm2_do_sign
+#define sm2_do_verify v1_sm2_do_verify
+#define sm2_encrypt v1_sm2_encrypt
+#define sm2_pkey_meth v1_sm2_pkey_meth
+#define sm2_plaintext_size v1_sm2_plaintext_size
+#define sm2_sign v1_sm2_sign
+#define sm2_verify v1_sm2_verify
+#define sm3_block_data_order v1_sm3_block_data_order
+#define sm3_final v1_sm3_final
+#define sm3_init v1_sm3_init
+#define sm3_transform v1_sm3_transform
+#define sm3_update v1_sm3_update
+#define SM4_decrypt v1_SM4_decrypt
+#define SM4_encrypt v1_SM4_encrypt
+#define SM4_set_key v1_SM4_set_key
+#define SMIME_crlf_copy v1_SMIME_crlf_copy
+#define SMIME_read_ASN1 v1_SMIME_read_ASN1
+#define SMIME_read_CMS v1_SMIME_read_CMS
+#define SMIME_read_PKCS7 v1_SMIME_read_PKCS7
+#define SMIME_text v1_SMIME_text
+#define SMIME_write_ASN1 v1_SMIME_write_ASN1
+#define SMIME_write_CMS v1_SMIME_write_CMS
+#define SMIME_write_PKCS7 v1_SMIME_write_PKCS7
+#define SRP_Calc_A v1_SRP_Calc_A
+#define SRP_Calc_A_param v1_SRP_Calc_A_param
+#define SRP_Calc_B v1_SRP_Calc_B
+#define SRP_Calc_client_key v1_SRP_Calc_client_key
+#define SRP_Calc_server_key v1_SRP_Calc_server_key
+#define SRP_Calc_u v1_SRP_Calc_u
+#define SRP_Calc_x v1_SRP_Calc_x
+#define SRP_check_known_gN_param v1_SRP_check_known_gN_param
+#define SRP_create_verifier v1_SRP_create_verifier
+#define SRP_create_verifier_BN v1_SRP_create_verifier_BN
+#define srp_generate_client_master_secret v1_srp_generate_client_master_secret
+#define srp_generate_server_master_secret v1_srp_generate_server_master_secret
+#define SRP_get_default_gN v1_SRP_get_default_gN
+#define SRP_user_pwd_free v1_SRP_user_pwd_free
+#define SRP_VBASE_free v1_SRP_VBASE_free
+#define SRP_VBASE_get1_by_user v1_SRP_VBASE_get1_by_user
+#define SRP_VBASE_get_by_user v1_SRP_VBASE_get_by_user
+#define SRP_VBASE_init v1_SRP_VBASE_init
+#define SRP_VBASE_new v1_SRP_VBASE_new
+#define SRP_Verify_A_mod_N v1_SRP_Verify_A_mod_N
+#define SRP_Verify_B_mod_N v1_SRP_Verify_B_mod_N
+#define srp_verify_server_param v1_srp_verify_server_param
+#define ssl3_alert_code v1_ssl3_alert_code
+#define SSL3_BUFFER_clear v1_SSL3_BUFFER_clear
+#define SSL3_BUFFER_release v1_SSL3_BUFFER_release
+#define SSL3_BUFFER_set_data v1_SSL3_BUFFER_set_data
+#define ssl3_callback_ctrl v1_ssl3_callback_ctrl
+#define ssl3_cbc_copy_mac v1_ssl3_cbc_copy_mac
+#define ssl3_cbc_digest_record v1_ssl3_cbc_digest_record
+#define ssl3_cbc_record_digest_supported v1_ssl3_cbc_record_digest_supported
+#define ssl3_cbc_remove_padding v1_ssl3_cbc_remove_padding
+#define ssl3_change_cipher_state v1_ssl3_change_cipher_state
+#define ssl3_check_cert_and_algorithm v1_ssl3_check_cert_and_algorithm
+#define ssl3_choose_cipher v1_ssl3_choose_cipher
+#define ssl3_cleanup_key_block v1_ssl3_cleanup_key_block
+#define ssl3_clear v1_ssl3_clear
+#define ssl3_comp_find v1_ssl3_comp_find
+#define ssl3_ctrl v1_ssl3_ctrl
+#define ssl3_ctx_callback_ctrl v1_ssl3_ctx_callback_ctrl
+#define ssl3_ctx_ctrl v1_ssl3_ctx_ctrl
+#define ssl3_default_timeout v1_ssl3_default_timeout
+#define ssl3_digest_cached_records v1_ssl3_digest_cached_records
+#define ssl3_dispatch_alert v1_ssl3_dispatch_alert
+#define ssl3_do_change_cipher_spec v1_ssl3_do_change_cipher_spec
+#define ssl3_do_compress v1_ssl3_do_compress
+#define ssl3_do_uncompress v1_ssl3_do_uncompress
+#define ssl3_do_write v1_ssl3_do_write
+#define ssl3_enc v1_ssl3_enc
+#define ssl3_final_finish_mac v1_ssl3_final_finish_mac
+#define ssl3_finish_mac v1_ssl3_finish_mac
+#define ssl3_free v1_ssl3_free
+#define ssl3_free_digest_list v1_ssl3_free_digest_list
+#define ssl3_generate_master_secret v1_ssl3_generate_master_secret
+#define ssl3_get_cipher v1_ssl3_get_cipher
+#define ssl3_get_cipher_by_char v1_ssl3_get_cipher_by_char
+#define ssl3_get_cipher_by_id v1_ssl3_get_cipher_by_id
+#define ssl3_get_cipher_by_std_name v1_ssl3_get_cipher_by_std_name
+#define ssl3_get_record v1_ssl3_get_record
+#define ssl3_get_req_cert_type v1_ssl3_get_req_cert_type
+#define ssl3_handshake_write v1_ssl3_handshake_write
+#define ssl3_init_finished_mac v1_ssl3_init_finished_mac
+#define ssl3_new v1_ssl3_new
+#define ssl3_num_ciphers v1_ssl3_num_ciphers
+#define ssl3_output_cert_chain v1_ssl3_output_cert_chain
+#define ssl3_peek v1_ssl3_peek
+#define ssl3_pending v1_ssl3_pending
+#define ssl3_put_cipher_by_char v1_ssl3_put_cipher_by_char
+#define ssl3_read v1_ssl3_read
+#define ssl3_read_bytes v1_ssl3_read_bytes
+#define ssl3_read_n v1_ssl3_read_n
+#define SSL3_RECORD_clear v1_SSL3_RECORD_clear
+#define SSL3_RECORD_release v1_SSL3_RECORD_release
+#define ssl3_record_sequence_update v1_ssl3_record_sequence_update
+#define SSL3_RECORD_set_seq_num v1_SSL3_RECORD_set_seq_num
+#define ssl3_release_read_buffer v1_ssl3_release_read_buffer
+#define ssl3_release_write_buffer v1_ssl3_release_write_buffer
+#define ssl3_renegotiate v1_ssl3_renegotiate
+#define ssl3_renegotiate_check v1_ssl3_renegotiate_check
+#define ssl3_send_alert v1_ssl3_send_alert
+#define ssl3_set_handshake_header v1_ssl3_set_handshake_header
+#define ssl3_setup_buffers v1_ssl3_setup_buffers
+#define ssl3_setup_key_block v1_ssl3_setup_key_block
+#define ssl3_setup_read_buffer v1_ssl3_setup_read_buffer
+#define ssl3_setup_write_buffer v1_ssl3_setup_write_buffer
+#define ssl3_shutdown v1_ssl3_shutdown
+#define ssl3_take_mac v1_ssl3_take_mac
+#define ssl3_undef_enc_method v1_ssl3_undef_enc_method
+#define ssl3_write v1_ssl3_write
+#define ssl3_write_bytes v1_ssl3_write_bytes
+#define ssl3_write_pending v1_ssl3_write_pending
+#define SSL_accept v1_SSL_accept
+#define SSL_add1_host v1_SSL_add1_host
+#define SSL_add1_to_CA_list v1_SSL_add1_to_CA_list
+#define SSL_add_client_CA v1_SSL_add_client_CA
+#define SSL_add_dir_cert_subjects_to_stack v1_SSL_add_dir_cert_subjects_to_stack
+#define SSL_add_file_cert_subjects_to_stack v1_SSL_add_file_cert_subjects_to_stack
+#define SSL_add_ssl_module v1_SSL_add_ssl_module
+#define SSL_alert_desc_string v1_SSL_alert_desc_string
+#define SSL_alert_desc_string_long v1_SSL_alert_desc_string_long
+#define SSL_alert_type_string v1_SSL_alert_type_string
+#define SSL_alert_type_string_long v1_SSL_alert_type_string_long
+#define SSL_alloc_buffers v1_SSL_alloc_buffers
+#define ssl_allow_compression v1_ssl_allow_compression
+#define ssl_bad_method v1_ssl_bad_method
+#define ssl_build_cert_chain v1_ssl_build_cert_chain
+#define SSL_bytes_to_cipher_list v1_SSL_bytes_to_cipher_list
+#define ssl_cache_cipherlist v1_ssl_cache_cipherlist
+#define SSL_callback_ctrl v1_SSL_callback_ctrl
+#define ssl_cert_add0_chain_cert v1_ssl_cert_add0_chain_cert
+#define ssl_cert_add1_chain_cert v1_ssl_cert_add1_chain_cert
+#define ssl_cert_clear_certs v1_ssl_cert_clear_certs
+#define ssl_cert_dup v1_ssl_cert_dup
+#define ssl_cert_free v1_ssl_cert_free
+#define ssl_cert_get_cert_store v1_ssl_cert_get_cert_store
+#define ssl_cert_is_disabled v1_ssl_cert_is_disabled
+#define ssl_cert_lookup_by_idx v1_ssl_cert_lookup_by_idx
+#define ssl_cert_lookup_by_nid v1_ssl_cert_lookup_by_nid
+#define ssl_cert_lookup_by_pkey v1_ssl_cert_lookup_by_pkey
+#define ssl_cert_new v1_ssl_cert_new
+#define SSL_certs_clear v1_SSL_certs_clear
+#define ssl_cert_select_current v1_ssl_cert_select_current
+#define ssl_cert_set0_chain v1_ssl_cert_set0_chain
+#define ssl_cert_set1_chain v1_ssl_cert_set1_chain
+#define ssl_cert_set_cert_cb v1_ssl_cert_set_cert_cb
+#define ssl_cert_set_cert_store v1_ssl_cert_set_cert_store
+#define ssl_cert_set_current v1_ssl_cert_set_current
+#define SSL_check_chain v1_SSL_check_chain
+#define SSL_check_private_key v1_SSL_check_private_key
+#define ssl_check_srvr_ecc_cert_and_alg v1_ssl_check_srvr_ecc_cert_and_alg
+#define ssl_check_version_downgrade v1_ssl_check_version_downgrade
+#define ssl_choose_client_version v1_ssl_choose_client_version
+#define ssl_choose_server_version v1_ssl_choose_server_version
+#define SSL_CIPHER_description v1_SSL_CIPHER_description
+#define ssl_cipher_disabled v1_ssl_cipher_disabled
+#define SSL_CIPHER_find v1_SSL_CIPHER_find
+#define SSL_CIPHER_get_auth_nid v1_SSL_CIPHER_get_auth_nid
+#define SSL_CIPHER_get_bits v1_SSL_CIPHER_get_bits
+#define SSL_CIPHER_get_cipher_nid v1_SSL_CIPHER_get_cipher_nid
+#define SSL_CIPHER_get_digest_nid v1_SSL_CIPHER_get_digest_nid
+#define ssl_cipher_get_evp v1_ssl_cipher_get_evp
+#define SSL_CIPHER_get_handshake_digest v1_SSL_CIPHER_get_handshake_digest
+#define SSL_CIPHER_get_id v1_SSL_CIPHER_get_id
+#define SSL_CIPHER_get_kx_nid v1_SSL_CIPHER_get_kx_nid
+#define SSL_CIPHER_get_name v1_SSL_CIPHER_get_name
+#define ssl_cipher_get_overhead v1_ssl_cipher_get_overhead
+#define SSL_CIPHER_get_prf_nid v1_SSL_CIPHER_get_prf_nid
+#define SSL_CIPHER_get_protocol_id v1_SSL_CIPHER_get_protocol_id
+#define SSL_CIPHER_get_version v1_SSL_CIPHER_get_version
+#define ssl_cipher_id_cmp v1_ssl_cipher_id_cmp
+#define SSL_CIPHER_is_aead v1_SSL_CIPHER_is_aead
+#define ssl_cipher_ptr_id_cmp v1_ssl_cipher_ptr_id_cmp
+#define SSL_CIPHER_standard_name v1_SSL_CIPHER_standard_name
+#define SSL_clear v1_SSL_clear
+#define ssl_clear_bad_session v1_ssl_clear_bad_session
+#define ssl_clear_cipher_ctx v1_ssl_clear_cipher_ctx
+#define ssl_clear_hash_ctx v1_ssl_clear_hash_ctx
+#define SSL_clear_not_quic v1_SSL_clear_not_quic
+#define SSL_clear_options v1_SSL_clear_options
+#define SSL_clear_quic v1_SSL_clear_quic
+#define SSL_client_hello_get0_ciphers v1_SSL_client_hello_get0_ciphers
+#define SSL_client_hello_get0_compression_methods v1_SSL_client_hello_get0_compression_methods
+#define SSL_client_hello_get0_ext v1_SSL_client_hello_get0_ext
+#define SSL_client_hello_get0_legacy_version v1_SSL_client_hello_get0_legacy_version
+#define SSL_client_hello_get0_random v1_SSL_client_hello_get0_random
+#define SSL_client_hello_get0_session_id v1_SSL_client_hello_get0_session_id
+#define SSL_client_hello_get1_extensions_present v1_SSL_client_hello_get1_extensions_present
+#define SSL_client_hello_isv2 v1_SSL_client_hello_isv2
+#define SSL_client_version v1_SSL_client_version
+#define SSL_COMP_add_compression_method v1_SSL_COMP_add_compression_method
+#define ssl_comp_free_compression_methods_int v1_ssl_comp_free_compression_methods_int
+#define SSL_COMP_get0_name v1_SSL_COMP_get0_name
+#define SSL_COMP_get_compression_methods v1_SSL_COMP_get_compression_methods
+#define SSL_COMP_get_id v1_SSL_COMP_get_id
+#define SSL_COMP_get_name v1_SSL_COMP_get_name
+#define SSL_COMP_set0_compression_methods v1_SSL_COMP_set0_compression_methods
+#define SSL_CONF_cmd v1_SSL_CONF_cmd
+#define SSL_CONF_cmd_argv v1_SSL_CONF_cmd_argv
+#define SSL_CONF_cmd_value_type v1_SSL_CONF_cmd_value_type
+#define SSL_CONF_CTX_clear_flags v1_SSL_CONF_CTX_clear_flags
+#define SSL_CONF_CTX_finish v1_SSL_CONF_CTX_finish
+#define SSL_CONF_CTX_free v1_SSL_CONF_CTX_free
+#define SSL_CONF_CTX_new v1_SSL_CONF_CTX_new
+#define SSL_CONF_CTX_set1_prefix v1_SSL_CONF_CTX_set1_prefix
+#define SSL_CONF_CTX_set_flags v1_SSL_CONF_CTX_set_flags
+#define SSL_CONF_CTX_set_ssl v1_SSL_CONF_CTX_set_ssl
+#define SSL_CONF_CTX_set_ssl_ctx v1_SSL_CONF_CTX_set_ssl_ctx
+#define SSL_config v1_SSL_config
+#define SSL_connect v1_SSL_connect
+#define SSL_copy_session_id v1_SSL_copy_session_id
+#define ssl_create_cipher_list v1_ssl_create_cipher_list
+#define SSL_ct_is_enabled v1_SSL_ct_is_enabled
+#define SSL_ctrl v1_SSL_ctrl
+#define SSL_CTX_add1_to_CA_list v1_SSL_CTX_add1_to_CA_list
+#define SSL_CTX_add_client_CA v1_SSL_CTX_add_client_CA
+#define SSL_CTX_add_client_custom_ext v1_SSL_CTX_add_client_custom_ext
+#define SSL_CTX_add_custom_ext v1_SSL_CTX_add_custom_ext
+#define SSL_CTX_add_server_custom_ext v1_SSL_CTX_add_server_custom_ext
+#define SSL_CTX_add_session v1_SSL_CTX_add_session
+#define SSL_CTX_callback_ctrl v1_SSL_CTX_callback_ctrl
+#define SSL_CTX_check_private_key v1_SSL_CTX_check_private_key
+#define SSL_CTX_clear_options v1_SSL_CTX_clear_options
+#define SSL_CTX_config v1_SSL_CTX_config
+#define SSL_CTX_ct_is_enabled v1_SSL_CTX_ct_is_enabled
+#define SSL_CTX_ctrl v1_SSL_CTX_ctrl
+#define SSL_CTX_dane_clear_flags v1_SSL_CTX_dane_clear_flags
+#define SSL_CTX_dane_enable v1_SSL_CTX_dane_enable
+#define SSL_CTX_dane_mtype_set v1_SSL_CTX_dane_mtype_set
+#define SSL_CTX_dane_set_flags v1_SSL_CTX_dane_set_flags
+#define SSL_CTX_enable_ct v1_SSL_CTX_enable_ct
+#define SSL_CTX_flush_sessions v1_SSL_CTX_flush_sessions
+#define SSL_CTX_free v1_SSL_CTX_free
+#define SSL_CTX_get0_CA_list v1_SSL_CTX_get0_CA_list
+#define SSL_CTX_get0_certificate v1_SSL_CTX_get0_certificate
+#define SSL_CTX_get0_ctlog_store v1_SSL_CTX_get0_ctlog_store
+#define SSL_CTX_get0_param v1_SSL_CTX_get0_param
+#define SSL_CTX_get0_privatekey v1_SSL_CTX_get0_privatekey
+#define SSL_CTX_get0_security_ex_data v1_SSL_CTX_get0_security_ex_data
+#define SSL_CTX_get_cert_store v1_SSL_CTX_get_cert_store
+#define SSL_CTX_get_ciphers v1_SSL_CTX_get_ciphers
+#define SSL_CTX_get_client_CA_list v1_SSL_CTX_get_client_CA_list
+#define SSL_CTX_get_client_cert_cb v1_SSL_CTX_get_client_cert_cb
+#define SSL_CTX_get_default_passwd_cb v1_SSL_CTX_get_default_passwd_cb
+#define SSL_CTX_get_default_passwd_cb_userdata v1_SSL_CTX_get_default_passwd_cb_userdata
+#define SSL_CTX_get_ex_data v1_SSL_CTX_get_ex_data
+#define SSL_CTX_get_info_callback v1_SSL_CTX_get_info_callback
+#define SSL_CTX_get_keylog_callback v1_SSL_CTX_get_keylog_callback
+#define SSL_CTX_get_max_early_data v1_SSL_CTX_get_max_early_data
+#define SSL_CTX_get_num_tickets v1_SSL_CTX_get_num_tickets
+#define SSL_CTX_get_options v1_SSL_CTX_get_options
+#define SSL_CTX_get_quiet_shutdown v1_SSL_CTX_get_quiet_shutdown
+#define SSL_CTX_get_record_padding_callback_arg v1_SSL_CTX_get_record_padding_callback_arg
+#define SSL_CTX_get_recv_max_early_data v1_SSL_CTX_get_recv_max_early_data
+#define SSL_CTX_get_security_callback v1_SSL_CTX_get_security_callback
+#define SSL_CTX_get_security_level v1_SSL_CTX_get_security_level
+#define SSL_CTX_get_ssl_method v1_SSL_CTX_get_ssl_method
+#define SSL_CTX_get_timeout v1_SSL_CTX_get_timeout
+#define SSL_CTX_get_verify_callback v1_SSL_CTX_get_verify_callback
+#define SSL_CTX_get_verify_depth v1_SSL_CTX_get_verify_depth
+#define SSL_CTX_get_verify_mode v1_SSL_CTX_get_verify_mode
+#define SSL_CTX_has_client_custom_ext v1_SSL_CTX_has_client_custom_ext
+#define SSL_CTX_load_verify_locations v1_SSL_CTX_load_verify_locations
+#define SSL_CTX_new v1_SSL_CTX_new
+#define SSL_CTX_remove_session v1_SSL_CTX_remove_session
+#define ssl_ctx_security v1_ssl_ctx_security
+#define SSL_CTX_sess_get_get_cb v1_SSL_CTX_sess_get_get_cb
+#define SSL_CTX_sess_get_new_cb v1_SSL_CTX_sess_get_new_cb
+#define SSL_CTX_sess_get_remove_cb v1_SSL_CTX_sess_get_remove_cb
+#define SSL_CTX_sessions v1_SSL_CTX_sessions
+#define SSL_CTX_sess_set_get_cb v1_SSL_CTX_sess_set_get_cb
+#define SSL_CTX_sess_set_new_cb v1_SSL_CTX_sess_set_new_cb
+#define SSL_CTX_sess_set_remove_cb v1_SSL_CTX_sess_set_remove_cb
+#define SSL_CTX_set0_CA_list v1_SSL_CTX_set0_CA_list
+#define SSL_CTX_set0_ctlog_store v1_SSL_CTX_set0_ctlog_store
+#define SSL_CTX_set0_security_ex_data v1_SSL_CTX_set0_security_ex_data
+#define SSL_CTX_set1_cert_store v1_SSL_CTX_set1_cert_store
+#define SSL_CTX_set1_param v1_SSL_CTX_set1_param
+#define SSL_CTX_set_allow_early_data_cb v1_SSL_CTX_set_allow_early_data_cb
+#define SSL_CTX_set_alpn_protos v1_SSL_CTX_set_alpn_protos
+#define SSL_CTX_set_alpn_select_cb v1_SSL_CTX_set_alpn_select_cb
+#define SSL_CTX_set_block_padding v1_SSL_CTX_set_block_padding
+#define SSL_CTX_set_cert_cb v1_SSL_CTX_set_cert_cb
+#define SSL_CTX_set_cert_store v1_SSL_CTX_set_cert_store
+#define SSL_CTX_set_cert_verify_callback v1_SSL_CTX_set_cert_verify_callback
+#define SSL_CTX_set_cipher_list v1_SSL_CTX_set_cipher_list
+#define SSL_CTX_set_ciphersuites v1_SSL_CTX_set_ciphersuites
+#define SSL_CTX_set_client_CA_list v1_SSL_CTX_set_client_CA_list
+#define SSL_CTX_set_client_cert_cb v1_SSL_CTX_set_client_cert_cb
+#define SSL_CTX_set_client_cert_engine v1_SSL_CTX_set_client_cert_engine
+#define SSL_CTX_set_client_hello_cb v1_SSL_CTX_set_client_hello_cb
+#define SSL_CTX_set_cookie_generate_cb v1_SSL_CTX_set_cookie_generate_cb
+#define SSL_CTX_set_cookie_verify_cb v1_SSL_CTX_set_cookie_verify_cb
+#define SSL_CTX_set_ctlog_list_file v1_SSL_CTX_set_ctlog_list_file
+#define SSL_CTX_set_ct_validation_callback v1_SSL_CTX_set_ct_validation_callback
+#define SSL_CTX_set_default_ctlog_list_file v1_SSL_CTX_set_default_ctlog_list_file
+#define SSL_CTX_set_default_passwd_cb v1_SSL_CTX_set_default_passwd_cb
+#define SSL_CTX_set_default_passwd_cb_userdata v1_SSL_CTX_set_default_passwd_cb_userdata
+#define SSL_CTX_set_default_read_buffer_len v1_SSL_CTX_set_default_read_buffer_len
+#define SSL_CTX_set_default_verify_dir v1_SSL_CTX_set_default_verify_dir
+#define SSL_CTX_set_default_verify_file v1_SSL_CTX_set_default_verify_file
+#define SSL_CTX_set_default_verify_paths v1_SSL_CTX_set_default_verify_paths
+#define SSL_CTX_set_ex_data v1_SSL_CTX_set_ex_data
+#define SSL_CTX_set_generate_session_id v1_SSL_CTX_set_generate_session_id
+#define SSL_CTX_set_info_callback v1_SSL_CTX_set_info_callback
+#define SSL_CTX_set_keylog_callback v1_SSL_CTX_set_keylog_callback
+#define SSL_CTX_set_max_early_data v1_SSL_CTX_set_max_early_data
+#define SSL_CTX_set_msg_callback v1_SSL_CTX_set_msg_callback
+#define SSL_CTX_set_next_protos_advertised_cb v1_SSL_CTX_set_next_protos_advertised_cb
+#define SSL_CTX_set_next_proto_select_cb v1_SSL_CTX_set_next_proto_select_cb
+#define SSL_CTX_set_not_resumable_session_callback v1_SSL_CTX_set_not_resumable_session_callback
+#define SSL_CTX_set_num_tickets v1_SSL_CTX_set_num_tickets
+#define SSL_CTX_set_options v1_SSL_CTX_set_options
+#define SSL_CTX_set_post_handshake_auth v1_SSL_CTX_set_post_handshake_auth
+#define SSL_CTX_set_psk_client_callback v1_SSL_CTX_set_psk_client_callback
+#define SSL_CTX_set_psk_find_session_callback v1_SSL_CTX_set_psk_find_session_callback
+#define SSL_CTX_set_psk_server_callback v1_SSL_CTX_set_psk_server_callback
+#define SSL_CTX_set_psk_use_session_callback v1_SSL_CTX_set_psk_use_session_callback
+#define SSL_CTX_set_purpose v1_SSL_CTX_set_purpose
+#define SSL_CTX_set_quic_method v1_SSL_CTX_set_quic_method
+#define SSL_CTX_set_quiet_shutdown v1_SSL_CTX_set_quiet_shutdown
+#define SSL_CTX_set_record_padding_callback v1_SSL_CTX_set_record_padding_callback
+#define SSL_CTX_set_record_padding_callback_arg v1_SSL_CTX_set_record_padding_callback_arg
+#define SSL_CTX_set_recv_max_early_data v1_SSL_CTX_set_recv_max_early_data
+#define SSL_CTX_set_security_callback v1_SSL_CTX_set_security_callback
+#define SSL_CTX_set_security_level v1_SSL_CTX_set_security_level
+#define SSL_CTX_set_session_id_context v1_SSL_CTX_set_session_id_context
+#define SSL_CTX_set_session_ticket_cb v1_SSL_CTX_set_session_ticket_cb
+#define SSL_CTX_set_srp_cb_arg v1_SSL_CTX_set_srp_cb_arg
+#define SSL_CTX_set_srp_client_pwd_callback v1_SSL_CTX_set_srp_client_pwd_callback
+#define SSL_CTX_set_srp_password v1_SSL_CTX_set_srp_password
+#define SSL_CTX_set_srp_strength v1_SSL_CTX_set_srp_strength
+#define SSL_CTX_set_srp_username v1_SSL_CTX_set_srp_username
+#define SSL_CTX_set_srp_username_callback v1_SSL_CTX_set_srp_username_callback
+#define SSL_CTX_set_srp_verify_param_callback v1_SSL_CTX_set_srp_verify_param_callback
+#define SSL_CTX_set_ssl_version v1_SSL_CTX_set_ssl_version
+#define SSL_CTX_set_stateless_cookie_generate_cb v1_SSL_CTX_set_stateless_cookie_generate_cb
+#define SSL_CTX_set_stateless_cookie_verify_cb v1_SSL_CTX_set_stateless_cookie_verify_cb
+#define SSL_CTX_set_timeout v1_SSL_CTX_set_timeout
+#define SSL_CTX_set_tlsext_max_fragment_length v1_SSL_CTX_set_tlsext_max_fragment_length
+#define SSL_CTX_set_tlsext_use_srtp v1_SSL_CTX_set_tlsext_use_srtp
+#define SSL_CTX_set_tmp_dh_callback v1_SSL_CTX_set_tmp_dh_callback
+#define SSL_CTX_set_trust v1_SSL_CTX_set_trust
+#define SSL_CTX_set_verify v1_SSL_CTX_set_verify
+#define SSL_CTX_set_verify_depth v1_SSL_CTX_set_verify_depth
+#define SSL_CTX_SRP_CTX_free v1_SSL_CTX_SRP_CTX_free
+#define SSL_CTX_SRP_CTX_init v1_SSL_CTX_SRP_CTX_init
+#define ssl_ctx_system_config v1_ssl_ctx_system_config
+#define SSL_CTX_up_ref v1_SSL_CTX_up_ref
+#define SSL_CTX_use_cert_and_key v1_SSL_CTX_use_cert_and_key
+#define SSL_CTX_use_certificate v1_SSL_CTX_use_certificate
+#define SSL_CTX_use_certificate_ASN1 v1_SSL_CTX_use_certificate_ASN1
+#define SSL_CTX_use_certificate_chain_file v1_SSL_CTX_use_certificate_chain_file
+#define SSL_CTX_use_certificate_file v1_SSL_CTX_use_certificate_file
+#define SSL_CTX_use_PrivateKey v1_SSL_CTX_use_PrivateKey
+#define SSL_CTX_use_PrivateKey_ASN1 v1_SSL_CTX_use_PrivateKey_ASN1
+#define SSL_CTX_use_PrivateKey_file v1_SSL_CTX_use_PrivateKey_file
+#define SSL_CTX_use_psk_identity_hint v1_SSL_CTX_use_psk_identity_hint
+#define SSL_CTX_use_RSAPrivateKey v1_SSL_CTX_use_RSAPrivateKey
+#define SSL_CTX_use_RSAPrivateKey_ASN1 v1_SSL_CTX_use_RSAPrivateKey_ASN1
+#define SSL_CTX_use_RSAPrivateKey_file v1_SSL_CTX_use_RSAPrivateKey_file
+#define SSL_CTX_use_serverinfo v1_SSL_CTX_use_serverinfo
+#define SSL_CTX_use_serverinfo_ex v1_SSL_CTX_use_serverinfo_ex
+#define SSL_CTX_use_serverinfo_file v1_SSL_CTX_use_serverinfo_file
+#define SSL_dane_clear_flags v1_SSL_dane_clear_flags
+#define SSL_dane_enable v1_SSL_dane_enable
+#define SSL_dane_set_flags v1_SSL_dane_set_flags
+#define SSL_dane_tlsa_add v1_SSL_dane_tlsa_add
+#define ssl_derive v1_ssl_derive
+#define ssl_dh_to_pkey v1_ssl_dh_to_pkey
+#define ssl_do_client_cert_cb v1_ssl_do_client_cert_cb
+#define SSL_do_handshake v1_SSL_do_handshake
+#define SSL_dup v1_SSL_dup
+#define SSL_dup_CA_list v1_SSL_dup_CA_list
+#define SSL_enable_ct v1_SSL_enable_ct
+#define SSL_export_keying_material v1_SSL_export_keying_material
+#define SSL_export_keying_material_early v1_SSL_export_keying_material_early
+#define SSL_extension_supported v1_SSL_extension_supported
+#define ssl_fill_hello_random v1_ssl_fill_hello_random
+#define SSL_free v1_SSL_free
+#define SSL_free_buffers v1_SSL_free_buffers
+#define ssl_free_wbio_buffer v1_ssl_free_wbio_buffer
+#define ssl_generate_master_secret v1_ssl_generate_master_secret
+#define ssl_generate_param_group v1_ssl_generate_param_group
+#define ssl_generate_pkey v1_ssl_generate_pkey
+#define ssl_generate_pkey_group v1_ssl_generate_pkey_group
+#define ssl_generate_session_id v1_ssl_generate_session_id
+#define SSL_get0_alpn_selected v1_SSL_get0_alpn_selected
+#define SSL_get0_CA_list v1_SSL_get0_CA_list
+#define SSL_get0_dane v1_SSL_get0_dane
+#define SSL_get0_dane_authority v1_SSL_get0_dane_authority
+#define SSL_get0_dane_tlsa v1_SSL_get0_dane_tlsa
+#define SSL_get0_next_proto_negotiated v1_SSL_get0_next_proto_negotiated
+#define SSL_get0_param v1_SSL_get0_param
+#define SSL_get0_peer_CA_list v1_SSL_get0_peer_CA_list
+#define SSL_get0_peername v1_SSL_get0_peername
+#define SSL_get0_peer_scts v1_SSL_get0_peer_scts
+#define SSL_get0_security_ex_data v1_SSL_get0_security_ex_data
+#define SSL_get0_verified_chain v1_SSL_get0_verified_chain
+#define SSL_get1_session v1_SSL_get1_session
+#define SSL_get1_supported_ciphers v1_SSL_get1_supported_ciphers
+#define ssl_get_algorithm2 v1_ssl_get_algorithm2
+#define SSL_get_all_async_fds v1_SSL_get_all_async_fds
+#define ssl_get_auto_dh v1_ssl_get_auto_dh
+#define SSL_get_certificate v1_SSL_get_certificate
+#define SSL_get_changed_async_fds v1_SSL_get_changed_async_fds
+#define ssl_get_cipher_by_char v1_ssl_get_cipher_by_char
+#define SSL_get_cipher_list v1_SSL_get_cipher_list
+#define SSL_get_ciphers v1_SSL_get_ciphers
+#define ssl_get_ciphers_by_id v1_ssl_get_ciphers_by_id
+#define SSL_get_client_CA_list v1_SSL_get_client_CA_list
+#define SSL_get_client_ciphers v1_SSL_get_client_ciphers
+#define SSL_get_client_random v1_SSL_get_client_random
+#define SSL_get_current_cipher v1_SSL_get_current_cipher
+#define SSL_get_current_compression v1_SSL_get_current_compression
+#define SSL_get_current_expansion v1_SSL_get_current_expansion
+#define SSL_get_default_passwd_cb v1_SSL_get_default_passwd_cb
+#define SSL_get_default_passwd_cb_userdata v1_SSL_get_default_passwd_cb_userdata
+#define SSL_get_default_timeout v1_SSL_get_default_timeout
+#define SSL_get_early_data_status v1_SSL_get_early_data_status
+#define SSL_get_error v1_SSL_get_error
+#define SSL_get_ex_data v1_SSL_get_ex_data
+#define SSL_get_ex_data_X509_STORE_CTX_idx v1_SSL_get_ex_data_X509_STORE_CTX_idx
+#define SSL_get_fd v1_SSL_get_fd
+#define SSL_get_finished v1_SSL_get_finished
+#define SSL_get_info_callback v1_SSL_get_info_callback
+#define SSL_get_key_update_type v1_SSL_get_key_update_type
+#define SSL_get_max_early_data v1_SSL_get_max_early_data
+#define ssl_get_max_send_fragment v1_ssl_get_max_send_fragment
+#define ssl_get_min_max_version v1_ssl_get_min_max_version
+#define ssl_get_new_session v1_ssl_get_new_session
+#define SSL_get_num_tickets v1_SSL_get_num_tickets
+#define SSL_get_options v1_SSL_get_options
+#define SSL_get_peer_cert_chain v1_SSL_get_peer_cert_chain
+#define SSL_get_peer_certificate v1_SSL_get_peer_certificate
+#define SSL_get_peer_finished v1_SSL_get_peer_finished
+#define SSL_get_peer_quic_transport_params v1_SSL_get_peer_quic_transport_params
+#define SSL_get_peer_quic_transport_version v1_SSL_get_peer_quic_transport_version
+#define SSL_get_peer_signature_type_nid v1_SSL_get_peer_signature_type_nid
+#define SSL_get_pending_cipher v1_SSL_get_pending_cipher
+#define ssl_get_prev_session v1_ssl_get_prev_session
+#define SSL_get_privatekey v1_SSL_get_privatekey
+#define SSL_get_psk_identity v1_SSL_get_psk_identity
+#define SSL_get_psk_identity_hint v1_SSL_get_psk_identity_hint
+#define SSL_get_quic_transport_version v1_SSL_get_quic_transport_version
+#define SSL_get_quiet_shutdown v1_SSL_get_quiet_shutdown
+#define SSL_get_rbio v1_SSL_get_rbio
+#define SSL_get_read_ahead v1_SSL_get_read_ahead
+#define SSL_get_record_padding_callback_arg v1_SSL_get_record_padding_callback_arg
+#define SSL_get_recv_max_early_data v1_SSL_get_recv_max_early_data
+#define SSL_get_rfd v1_SSL_get_rfd
+#define SSL_get_security_callback v1_SSL_get_security_callback
+#define SSL_get_security_level v1_SSL_get_security_level
+#define ssl_get_security_level_bits v1_ssl_get_security_level_bits
+#define SSL_get_selected_srtp_profile v1_SSL_get_selected_srtp_profile
+#define ssl_get_server_cert_serverinfo v1_ssl_get_server_cert_serverinfo
+#define SSL_get_servername v1_SSL_get_servername
+#define SSL_get_servername_type v1_SSL_get_servername_type
+#define SSL_get_server_random v1_SSL_get_server_random
+#define SSL_get_session v1_SSL_get_session
+#define SSL_get_shared_ciphers v1_SSL_get_shared_ciphers
+#define SSL_get_shared_sigalgs v1_SSL_get_shared_sigalgs
+#define SSL_get_shutdown v1_SSL_get_shutdown
+#define SSL_get_sigalgs v1_SSL_get_sigalgs
+#define SSL_get_signature_type_nid v1_SSL_get_signature_type_nid
+#define ssl_get_split_send_fragment v1_ssl_get_split_send_fragment
+#define SSL_get_srp_g v1_SSL_get_srp_g
+#define SSL_get_srp_N v1_SSL_get_srp_N
+#define SSL_get_srp_userinfo v1_SSL_get_srp_userinfo
+#define SSL_get_srp_username v1_SSL_get_srp_username
+#define SSL_get_srtp_profiles v1_SSL_get_srtp_profiles
+#define SSL_get_SSL_CTX v1_SSL_get_SSL_CTX
+#define SSL_get_ssl_method v1_SSL_get_ssl_method
+#define SSL_get_state v1_SSL_get_state
+#define SSL_get_verify_callback v1_SSL_get_verify_callback
+#define SSL_get_verify_depth v1_SSL_get_verify_depth
+#define SSL_get_verify_mode v1_SSL_get_verify_mode
+#define SSL_get_verify_result v1_SSL_get_verify_result
+#define SSL_get_version v1_SSL_get_version
+#define SSL_get_wbio v1_SSL_get_wbio
+#define SSL_get_wfd v1_SSL_get_wfd
+#define ssl_handshake_hash v1_ssl_handshake_hash
+#define ssl_handshake_md v1_ssl_handshake_md
+#define SSL_has_matching_session_id v1_SSL_has_matching_session_id
+#define SSL_has_pending v1_SSL_has_pending
+#define SSL_in_before v1_SSL_in_before
+#define SSL_in_init v1_SSL_in_init
+#define ssl_init_wbio_buffer v1_ssl_init_wbio_buffer
+#define SSL_is_dtls v1_SSL_is_dtls
+#define SSL_is_init_finished v1_SSL_is_init_finished
+#define SSL_is_quic v1_SSL_is_quic
+#define SSL_is_server v1_SSL_is_server
+#define SSL_key_update v1_SSL_key_update
+#define ssl_load_ciphers v1_ssl_load_ciphers
+#define SSL_load_client_CA_file v1_SSL_load_client_CA_file
+#define ssl_log_rsa_client_key_exchange v1_ssl_log_rsa_client_key_exchange
+#define ssl_log_secret v1_ssl_log_secret
+#define ssl_md v1_ssl_md
+#define SSL_new v1_SSL_new
+#define SSL_new_session_ticket v1_SSL_new_session_ticket
+#define SSL_peek v1_SSL_peek
+#define SSL_peek_ex v1_SSL_peek_ex
+#define SSL_pending v1_SSL_pending
+#define ssl_prf_md v1_ssl_prf_md
+#define SSL_process_quic_post_handshake v1_SSL_process_quic_post_handshake
+#define ssl_protocol_to_string v1_ssl_protocol_to_string
+#define SSL_provide_quic_data v1_SSL_provide_quic_data
+#define SSL_quic_max_handshake_flight_len v1_SSL_quic_max_handshake_flight_len
+#define SSL_quic_read_level v1_SSL_quic_read_level
+#define SSL_quic_write_level v1_SSL_quic_write_level
+#define SSL_read v1_SSL_read
+#define SSL_read_early_data v1_SSL_read_early_data
+#define SSL_read_ex v1_SSL_read_ex
+#define ssl_read_internal v1_ssl_read_internal
+#define SSL_renegotiate v1_SSL_renegotiate
+#define SSL_renegotiate_abbreviated v1_SSL_renegotiate_abbreviated
+#define SSL_renegotiate_pending v1_SSL_renegotiate_pending
+#define ssl_replace_hash v1_ssl_replace_hash
+#define SSL_rstate_string v1_SSL_rstate_string
+#define SSL_rstate_string_long v1_SSL_rstate_string_long
+#define ssl_security v1_ssl_security
+#define ssl_security_cert v1_ssl_security_cert
+#define ssl_security_cert_chain v1_ssl_security_cert_chain
+#define SSL_select_next_proto v1_SSL_select_next_proto
+#define ssl_session_dup v1_ssl_session_dup
+#define SSL_SESSION_dup v1_SSL_SESSION_dup
+#define SSL_SESSION_free v1_SSL_SESSION_free
+#define SSL_SESSION_get0_alpn_selected v1_SSL_SESSION_get0_alpn_selected
+#define SSL_SESSION_get0_cipher v1_SSL_SESSION_get0_cipher
+#define SSL_SESSION_get0_hostname v1_SSL_SESSION_get0_hostname
+#define SSL_SESSION_get0_id_context v1_SSL_SESSION_get0_id_context
+#define SSL_SESSION_get0_peer v1_SSL_SESSION_get0_peer
+#define SSL_SESSION_get0_ticket v1_SSL_SESSION_get0_ticket
+#define SSL_SESSION_get0_ticket_appdata v1_SSL_SESSION_get0_ticket_appdata
+#define SSL_SESSION_get_compress_id v1_SSL_SESSION_get_compress_id
+#define SSL_SESSION_get_ex_data v1_SSL_SESSION_get_ex_data
+#define SSL_SESSION_get_id v1_SSL_SESSION_get_id
+#define SSL_SESSION_get_master_key v1_SSL_SESSION_get_master_key
+#define SSL_SESSION_get_max_early_data v1_SSL_SESSION_get_max_early_data
+#define SSL_SESSION_get_max_fragment_length v1_SSL_SESSION_get_max_fragment_length
+#define SSL_SESSION_get_protocol_version v1_SSL_SESSION_get_protocol_version
+#define SSL_SESSION_get_ticket_lifetime_hint v1_SSL_SESSION_get_ticket_lifetime_hint
+#define SSL_SESSION_get_time v1_SSL_SESSION_get_time
+#define SSL_SESSION_get_timeout v1_SSL_SESSION_get_timeout
+#define SSL_SESSION_has_ticket v1_SSL_SESSION_has_ticket
+#define SSL_SESSION_is_resumable v1_SSL_SESSION_is_resumable
+#define SSL_SESSION_new v1_SSL_SESSION_new
+#define SSL_SESSION_print v1_SSL_SESSION_print
+#define SSL_SESSION_print_fp v1_SSL_SESSION_print_fp
+#define SSL_SESSION_print_keylog v1_SSL_SESSION_print_keylog
+#define SSL_session_reused v1_SSL_session_reused
+#define SSL_SESSION_set1_alpn_selected v1_SSL_SESSION_set1_alpn_selected
+#define SSL_SESSION_set1_hostname v1_SSL_SESSION_set1_hostname
+#define SSL_SESSION_set1_id v1_SSL_SESSION_set1_id
+#define SSL_SESSION_set1_id_context v1_SSL_SESSION_set1_id_context
+#define SSL_SESSION_set1_master_key v1_SSL_SESSION_set1_master_key
+#define SSL_SESSION_set1_ticket_appdata v1_SSL_SESSION_set1_ticket_appdata
+#define SSL_SESSION_set_cipher v1_SSL_SESSION_set_cipher
+#define SSL_SESSION_set_ex_data v1_SSL_SESSION_set_ex_data
+#define SSL_SESSION_set_max_early_data v1_SSL_SESSION_set_max_early_data
+#define SSL_SESSION_set_protocol_version v1_SSL_SESSION_set_protocol_version
+#define SSL_SESSION_set_time v1_SSL_SESSION_set_time
+#define SSL_SESSION_set_timeout v1_SSL_SESSION_set_timeout
+#define SSL_SESSION_up_ref v1_SSL_SESSION_up_ref
+#define SSL_set0_CA_list v1_SSL_set0_CA_list
+#define SSL_set0_rbio v1_SSL_set0_rbio
+#define SSL_set0_security_ex_data v1_SSL_set0_security_ex_data
+#define SSL_set0_wbio v1_SSL_set0_wbio
+#define SSL_set1_host v1_SSL_set1_host
+#define SSL_set1_param v1_SSL_set1_param
+#define SSL_set_accept_state v1_SSL_set_accept_state
+#define SSL_set_allow_early_data_cb v1_SSL_set_allow_early_data_cb
+#define SSL_set_alpn_protos v1_SSL_set_alpn_protos
+#define SSL_set_bio v1_SSL_set_bio
+#define SSL_set_block_padding v1_SSL_set_block_padding
+#define SSL_set_cert_cb v1_SSL_set_cert_cb
+#define SSL_set_cipher_list v1_SSL_set_cipher_list
+#define SSL_set_ciphersuites v1_SSL_set_ciphersuites
+#define SSL_set_client_CA_list v1_SSL_set_client_CA_list
+#define ssl_set_client_disabled v1_ssl_set_client_disabled
+#define ssl_set_client_hello_version v1_ssl_set_client_hello_version
+#define SSL_set_connect_state v1_SSL_set_connect_state
+#define SSL_set_ct_validation_callback v1_SSL_set_ct_validation_callback
+#define SSL_set_debug v1_SSL_set_debug
+#define SSL_set_default_passwd_cb v1_SSL_set_default_passwd_cb
+#define SSL_set_default_passwd_cb_userdata v1_SSL_set_default_passwd_cb_userdata
+#define SSL_set_default_read_buffer_len v1_SSL_set_default_read_buffer_len
+#define SSL_set_ex_data v1_SSL_set_ex_data
+#define SSL_set_fd v1_SSL_set_fd
+#define SSL_set_generate_session_id v1_SSL_set_generate_session_id
+#define SSL_set_hostflags v1_SSL_set_hostflags
+#define SSL_set_info_callback v1_SSL_set_info_callback
+#define ssl_set_masks v1_ssl_set_masks
+#define SSL_set_max_early_data v1_SSL_set_max_early_data
+#define SSL_set_msg_callback v1_SSL_set_msg_callback
+#define SSL_set_not_resumable_session_callback v1_SSL_set_not_resumable_session_callback
+#define SSL_set_num_tickets v1_SSL_set_num_tickets
+#define SSL_set_options v1_SSL_set_options
+#define SSL_set_post_handshake_auth v1_SSL_set_post_handshake_auth
+#define SSL_set_psk_client_callback v1_SSL_set_psk_client_callback
+#define SSL_set_psk_find_session_callback v1_SSL_set_psk_find_session_callback
+#define SSL_set_psk_server_callback v1_SSL_set_psk_server_callback
+#define SSL_set_psk_use_session_callback v1_SSL_set_psk_use_session_callback
+#define SSL_set_purpose v1_SSL_set_purpose
+#define SSL_set_quic_early_data_enabled v1_SSL_set_quic_early_data_enabled
+#define SSL_set_quic_method v1_SSL_set_quic_method
+#define SSL_set_quic_transport_params v1_SSL_set_quic_transport_params
+#define SSL_set_quic_transport_version v1_SSL_set_quic_transport_version
+#define SSL_set_quic_use_legacy_codepoint v1_SSL_set_quic_use_legacy_codepoint
+#define SSL_set_quiet_shutdown v1_SSL_set_quiet_shutdown
+#define SSL_set_read_ahead v1_SSL_set_read_ahead
+#define SSL_set_record_padding_callback v1_SSL_set_record_padding_callback
+#define SSL_set_record_padding_callback_arg v1_SSL_set_record_padding_callback_arg
+#define SSL_set_recv_max_early_data v1_SSL_set_recv_max_early_data
+#define SSL_set_rfd v1_SSL_set_rfd
+#define SSL_set_security_callback v1_SSL_set_security_callback
+#define SSL_set_security_level v1_SSL_set_security_level
+#define SSL_set_session v1_SSL_set_session
+#define SSL_set_session_id_context v1_SSL_set_session_id_context
+#define SSL_set_session_secret_cb v1_SSL_set_session_secret_cb
+#define SSL_set_session_ticket_ext v1_SSL_set_session_ticket_ext
+#define SSL_set_session_ticket_ext_cb v1_SSL_set_session_ticket_ext_cb
+#define SSL_set_shutdown v1_SSL_set_shutdown
+#define ssl_set_sig_mask v1_ssl_set_sig_mask
+#define SSL_set_srp_server_param v1_SSL_set_srp_server_param
+#define SSL_set_srp_server_param_pw v1_SSL_set_srp_server_param_pw
+#define SSL_set_SSL_CTX v1_SSL_set_SSL_CTX
+#define SSL_set_ssl_method v1_SSL_set_ssl_method
+#define SSL_set_tlsext_max_fragment_length v1_SSL_set_tlsext_max_fragment_length
+#define SSL_set_tlsext_use_srtp v1_SSL_set_tlsext_use_srtp
+#define SSL_set_tmp_dh_callback v1_SSL_set_tmp_dh_callback
+#define SSL_set_trust v1_SSL_set_trust
+#define SSL_set_verify v1_SSL_set_verify
+#define SSL_set_verify_depth v1_SSL_set_verify_depth
+#define SSL_set_verify_result v1_SSL_set_verify_result
+#define ssl_set_version_bound v1_ssl_set_version_bound
+#define SSL_set_wfd v1_SSL_set_wfd
+#define SSL_shutdown v1_SSL_shutdown
+#define ssl_sort_cipher_list v1_ssl_sort_cipher_list
+#define SSL_SRP_CTX_free v1_SSL_SRP_CTX_free
+#define SSL_SRP_CTX_init v1_SSL_SRP_CTX_init
+#define SSL_srp_server_param_with_username v1_SSL_srp_server_param_with_username
+#define SSL_stateless v1_SSL_stateless
+#define SSL_state_string v1_SSL_state_string
+#define SSL_state_string_long v1_SSL_state_string_long
+#define ssl_undefined_const_function v1_ssl_undefined_const_function
+#define ssl_undefined_function v1_ssl_undefined_function
+#define ssl_undefined_void_function v1_ssl_undefined_void_function
+#define ssl_update_cache v1_ssl_update_cache
+#define SSL_up_ref v1_SSL_up_ref
+#define SSL_use_cert_and_key v1_SSL_use_cert_and_key
+#define SSL_use_certificate v1_SSL_use_certificate
+#define SSL_use_certificate_ASN1 v1_SSL_use_certificate_ASN1
+#define SSL_use_certificate_chain_file v1_SSL_use_certificate_chain_file
+#define SSL_use_certificate_file v1_SSL_use_certificate_file
+#define SSL_use_PrivateKey v1_SSL_use_PrivateKey
+#define SSL_use_PrivateKey_ASN1 v1_SSL_use_PrivateKey_ASN1
+#define SSL_use_PrivateKey_file v1_SSL_use_PrivateKey_file
+#define SSL_use_psk_identity_hint v1_SSL_use_psk_identity_hint
+#define SSL_use_RSAPrivateKey v1_SSL_use_RSAPrivateKey
+#define SSL_use_RSAPrivateKey_ASN1 v1_SSL_use_RSAPrivateKey_ASN1
+#define SSL_use_RSAPrivateKey_file v1_SSL_use_RSAPrivateKey_file
+#define sslv3_client_method v1_sslv3_client_method
+#define SSLv3_client_method v1_SSLv3_client_method
+#define SSLv3_enc_data v1_SSLv3_enc_data
+#define sslv3_method v1_sslv3_method
+#define SSLv3_method v1_SSLv3_method
+#define sslv3_server_method v1_sslv3_server_method
+#define SSLv3_server_method v1_SSLv3_server_method
+#define ssl_validate_ct v1_ssl_validate_ct
+#define ssl_verify_cert_chain v1_ssl_verify_cert_chain
+#define SSL_verify_client_post_handshake v1_SSL_verify_client_post_handshake
+#define SSL_version v1_SSL_version
+#define SSL_version_str v1_SSL_version_str
+#define ssl_version_supported v1_ssl_version_supported
+#define SSL_waiting_for_async v1_SSL_waiting_for_async
+#define SSL_want v1_SSL_want
+#define SSL_write v1_SSL_write
+#define SSL_write_early_data v1_SSL_write_early_data
+#define SSL_write_ex v1_SSL_write_ex
+#define ssl_write_internal v1_ssl_write_internal
+#define ssl_x509err2alert v1_ssl_x509err2alert
+#define statem_flush v1_statem_flush
+#define SXNET_add_id_asc v1_SXNET_add_id_asc
+#define SXNET_add_id_INTEGER v1_SXNET_add_id_INTEGER
+#define SXNET_add_id_ulong v1_SXNET_add_id_ulong
+#define SXNET_free v1_SXNET_free
+#define SXNET_get_id_asc v1_SXNET_get_id_asc
+#define SXNET_get_id_INTEGER v1_SXNET_get_id_INTEGER
+#define SXNET_get_id_ulong v1_SXNET_get_id_ulong
+#define SXNETID_free v1_SXNETID_free
+#define SXNETID_it v1_SXNETID_it
+#define SXNETID_new v1_SXNETID_new
+#define SXNET_it v1_SXNET_it
+#define SXNET_new v1_SXNET_new
+#define tls11downgrade v1_tls11downgrade
+#define tls12_check_peer_sigalg v1_tls12_check_peer_sigalg
+#define tls12_copy_sigalgs v1_tls12_copy_sigalgs
+#define tls12downgrade v1_tls12downgrade
+#define tls12_get_psigalgs v1_tls12_get_psigalgs
+#define tls13_alert_code v1_tls13_alert_code
+#define tls13_change_cipher_state v1_tls13_change_cipher_state
+#define tls13_derive_finishedkey v1_tls13_derive_finishedkey
+#define tls13_derive_iv v1_tls13_derive_iv
+#define tls13_derive_key v1_tls13_derive_key
+#define tls13_enc v1_tls13_enc
+#define tls13_export_keying_material v1_tls13_export_keying_material
+#define tls13_export_keying_material_early v1_tls13_export_keying_material_early
+#define tls13_final_finish_mac v1_tls13_final_finish_mac
+#define tls13_generate_handshake_secret v1_tls13_generate_handshake_secret
+#define tls13_generate_master_secret v1_tls13_generate_master_secret
+#define tls13_generate_secret v1_tls13_generate_secret
+#define tls13_hkdf_expand v1_tls13_hkdf_expand
+#define tls13_restore_handshake_digest_for_pha v1_tls13_restore_handshake_digest_for_pha
+#define tls13_save_handshake_digest_for_pha v1_tls13_save_handshake_digest_for_pha
+#define tls13_setup_key_block v1_tls13_setup_key_block
+#define tls13_update_key v1_tls13_update_key
+#define tls1_alert_code v1_tls1_alert_code
+#define tls1_cbc_remove_padding v1_tls1_cbc_remove_padding
+#define tls1_change_cipher_state v1_tls1_change_cipher_state
+#define tls1_check_chain v1_tls1_check_chain
+#define tls1_check_ec_tmp_key v1_tls1_check_ec_tmp_key
+#define tls1_check_group_id v1_tls1_check_group_id
+#define tls1_clear v1_tls1_clear
+#define tls1_default_timeout v1_tls1_default_timeout
+#define tls1_enc v1_tls1_enc
+#define tls1_export_keying_material v1_tls1_export_keying_material
+#define tls1_final_finish_mac v1_tls1_final_finish_mac
+#define tls1_free v1_tls1_free
+#define tls1_generate_master_secret v1_tls1_generate_master_secret
+#define tls1_get_formatlist v1_tls1_get_formatlist
+#define tls1_get_supported_groups v1_tls1_get_supported_groups
+#define tls1_group_id_lookup v1_tls1_group_id_lookup
+#define tls1_lookup_md v1_tls1_lookup_md
+#define tls1_mac v1_tls1_mac
+#define tls1_new v1_tls1_new
+#define tls1_prf_pkey_meth v1_tls1_prf_pkey_meth
+#define tls1_process_sigalgs v1_tls1_process_sigalgs
+#define tls1_save_sigalgs v1_tls1_save_sigalgs
+#define tls1_save_u16 v1_tls1_save_u16
+#define tls1_set_cert_validity v1_tls1_set_cert_validity
+#define tls1_set_groups v1_tls1_set_groups
+#define tls1_set_groups_list v1_tls1_set_groups_list
+#define tls1_set_peer_legacy_sigalg v1_tls1_set_peer_legacy_sigalg
+#define tls1_set_raw_sigalgs v1_tls1_set_raw_sigalgs
+#define tls1_set_server_sigalgs v1_tls1_set_server_sigalgs
+#define tls1_set_sigalgs v1_tls1_set_sigalgs
+#define tls1_set_sigalgs_list v1_tls1_set_sigalgs_list
+#define tls1_setup_key_block v1_tls1_setup_key_block
+#define tls1_shared_group v1_tls1_shared_group
+#define tls_check_sigalg_curve v1_tls_check_sigalg_curve
+#define tls_choose_sigalg v1_tls_choose_sigalg
+#define tls_client_key_exchange_post_work v1_tls_client_key_exchange_post_work
+#define TLS_client_method v1_TLS_client_method
+#define tls_close_construct_packet v1_tls_close_construct_packet
+#define tls_collect_extensions v1_tls_collect_extensions
+#define tls_construct_certificate_request v1_tls_construct_certificate_request
+#define tls_construct_cert_status v1_tls_construct_cert_status
+#define tls_construct_cert_status_body v1_tls_construct_cert_status_body
+#define tls_construct_cert_verify v1_tls_construct_cert_verify
+#define tls_construct_change_cipher_spec v1_tls_construct_change_cipher_spec
+#define tls_construct_client_certificate v1_tls_construct_client_certificate
+#define tls_construct_client_hello v1_tls_construct_client_hello
+#define tls_construct_client_key_exchange v1_tls_construct_client_key_exchange
+#define tls_construct_ctos_alpn v1_tls_construct_ctos_alpn
+#define tls_construct_ctos_cookie v1_tls_construct_ctos_cookie
+#define tls_construct_ctos_early_data v1_tls_construct_ctos_early_data
+#define tls_construct_ctos_ec_pt_formats v1_tls_construct_ctos_ec_pt_formats
+#define tls_construct_ctos_ems v1_tls_construct_ctos_ems
+#define tls_construct_ctos_etm v1_tls_construct_ctos_etm
+#define tls_construct_ctos_key_share v1_tls_construct_ctos_key_share
+#define tls_construct_ctos_maxfragmentlen v1_tls_construct_ctos_maxfragmentlen
+#define tls_construct_ctos_npn v1_tls_construct_ctos_npn
+#define tls_construct_ctos_padding v1_tls_construct_ctos_padding
+#define tls_construct_ctos_post_handshake_auth v1_tls_construct_ctos_post_handshake_auth
+#define tls_construct_ctos_psk v1_tls_construct_ctos_psk
+#define tls_construct_ctos_psk_kex_modes v1_tls_construct_ctos_psk_kex_modes
+#define tls_construct_ctos_quic_transport_params v1_tls_construct_ctos_quic_transport_params
+#define tls_construct_ctos_quic_transport_params_draft v1_tls_construct_ctos_quic_transport_params_draft
+#define tls_construct_ctos_renegotiate v1_tls_construct_ctos_renegotiate
+#define tls_construct_ctos_sct v1_tls_construct_ctos_sct
+#define tls_construct_ctos_server_name v1_tls_construct_ctos_server_name
+#define tls_construct_ctos_session_ticket v1_tls_construct_ctos_session_ticket
+#define tls_construct_ctos_sig_algs v1_tls_construct_ctos_sig_algs
+#define tls_construct_ctos_srp v1_tls_construct_ctos_srp
+#define tls_construct_ctos_status_request v1_tls_construct_ctos_status_request
+#define tls_construct_ctos_supported_groups v1_tls_construct_ctos_supported_groups
+#define tls_construct_ctos_supported_versions v1_tls_construct_ctos_supported_versions
+#define tls_construct_ctos_use_srtp v1_tls_construct_ctos_use_srtp
+#define tls_construct_end_of_early_data v1_tls_construct_end_of_early_data
+#define tls_construct_extensions v1_tls_construct_extensions
+#define tls_construct_finished v1_tls_construct_finished
+#define tls_construct_key_update v1_tls_construct_key_update
+#define tls_construct_new_session_ticket v1_tls_construct_new_session_ticket
+#define tls_construct_next_proto v1_tls_construct_next_proto
+#define tls_construct_server_certificate v1_tls_construct_server_certificate
+#define tls_construct_server_done v1_tls_construct_server_done
+#define tls_construct_server_hello v1_tls_construct_server_hello
+#define tls_construct_server_key_exchange v1_tls_construct_server_key_exchange
+#define tls_construct_stoc_alpn v1_tls_construct_stoc_alpn
+#define tls_construct_stoc_cookie v1_tls_construct_stoc_cookie
+#define tls_construct_stoc_cryptopro_bug v1_tls_construct_stoc_cryptopro_bug
+#define tls_construct_stoc_early_data v1_tls_construct_stoc_early_data
+#define tls_construct_stoc_ec_pt_formats v1_tls_construct_stoc_ec_pt_formats
+#define tls_construct_stoc_ems v1_tls_construct_stoc_ems
+#define tls_construct_stoc_etm v1_tls_construct_stoc_etm
+#define tls_construct_stoc_key_share v1_tls_construct_stoc_key_share
+#define tls_construct_stoc_maxfragmentlen v1_tls_construct_stoc_maxfragmentlen
+#define tls_construct_stoc_next_proto_neg v1_tls_construct_stoc_next_proto_neg
+#define tls_construct_stoc_psk v1_tls_construct_stoc_psk
+#define tls_construct_stoc_quic_transport_params v1_tls_construct_stoc_quic_transport_params
+#define tls_construct_stoc_quic_transport_params_draft v1_tls_construct_stoc_quic_transport_params_draft
+#define tls_construct_stoc_renegotiate v1_tls_construct_stoc_renegotiate
+#define tls_construct_stoc_server_name v1_tls_construct_stoc_server_name
+#define tls_construct_stoc_session_ticket v1_tls_construct_stoc_session_ticket
+#define tls_construct_stoc_status_request v1_tls_construct_stoc_status_request
+#define tls_construct_stoc_supported_groups v1_tls_construct_stoc_supported_groups
+#define tls_construct_stoc_supported_versions v1_tls_construct_stoc_supported_versions
+#define tls_construct_stoc_use_srtp v1_tls_construct_stoc_use_srtp
+#define tls_curve_allowed v1_tls_curve_allowed
+#define tls_decrypt_ticket v1_tls_decrypt_ticket
+#define TLS_FEATURE_free v1_TLS_FEATURE_free
+#define TLS_FEATURE_new v1_TLS_FEATURE_new
+#define tls_finish_handshake v1_tls_finish_handshake
+#define tls_get_message_body v1_tls_get_message_body
+#define tls_get_message_header v1_tls_get_message_header
+#define tls_get_ticket_from_client v1_tls_get_ticket_from_client
+#define tls_handle_alpn v1_tls_handle_alpn
+#define TLS_method v1_TLS_method
+#define tls_parse_all_extensions v1_tls_parse_all_extensions
+#define tls_parse_ctos_alpn v1_tls_parse_ctos_alpn
+#define tls_parse_ctos_cookie v1_tls_parse_ctos_cookie
+#define tls_parse_ctos_early_data v1_tls_parse_ctos_early_data
+#define tls_parse_ctos_ec_pt_formats v1_tls_parse_ctos_ec_pt_formats
+#define tls_parse_ctos_ems v1_tls_parse_ctos_ems
+#define tls_parse_ctos_etm v1_tls_parse_ctos_etm
+#define tls_parse_ctos_key_share v1_tls_parse_ctos_key_share
+#define tls_parse_ctos_maxfragmentlen v1_tls_parse_ctos_maxfragmentlen
+#define tls_parse_ctos_npn v1_tls_parse_ctos_npn
+#define tls_parse_ctos_post_handshake_auth v1_tls_parse_ctos_post_handshake_auth
+#define tls_parse_ctos_psk v1_tls_parse_ctos_psk
+#define tls_parse_ctos_psk_kex_modes v1_tls_parse_ctos_psk_kex_modes
+#define tls_parse_ctos_quic_transport_params v1_tls_parse_ctos_quic_transport_params
+#define tls_parse_ctos_quic_transport_params_draft v1_tls_parse_ctos_quic_transport_params_draft
+#define tls_parse_ctos_renegotiate v1_tls_parse_ctos_renegotiate
+#define tls_parse_ctos_server_name v1_tls_parse_ctos_server_name
+#define tls_parse_ctos_session_ticket v1_tls_parse_ctos_session_ticket
+#define tls_parse_ctos_sig_algs v1_tls_parse_ctos_sig_algs
+#define tls_parse_ctos_sig_algs_cert v1_tls_parse_ctos_sig_algs_cert
+#define tls_parse_ctos_srp v1_tls_parse_ctos_srp
+#define tls_parse_ctos_status_request v1_tls_parse_ctos_status_request
+#define tls_parse_ctos_supported_groups v1_tls_parse_ctos_supported_groups
+#define tls_parse_ctos_use_srtp v1_tls_parse_ctos_use_srtp
+#define tls_parse_extension v1_tls_parse_extension
+#define tls_parse_stoc_alpn v1_tls_parse_stoc_alpn
+#define tls_parse_stoc_cookie v1_tls_parse_stoc_cookie
+#define tls_parse_stoc_early_data v1_tls_parse_stoc_early_data
+#define tls_parse_stoc_ec_pt_formats v1_tls_parse_stoc_ec_pt_formats
+#define tls_parse_stoc_ems v1_tls_parse_stoc_ems
+#define tls_parse_stoc_etm v1_tls_parse_stoc_etm
+#define tls_parse_stoc_key_share v1_tls_parse_stoc_key_share
+#define tls_parse_stoc_maxfragmentlen v1_tls_parse_stoc_maxfragmentlen
+#define tls_parse_stoc_npn v1_tls_parse_stoc_npn
+#define tls_parse_stoc_psk v1_tls_parse_stoc_psk
+#define tls_parse_stoc_quic_transport_params v1_tls_parse_stoc_quic_transport_params
+#define tls_parse_stoc_quic_transport_params_draft v1_tls_parse_stoc_quic_transport_params_draft
+#define tls_parse_stoc_renegotiate v1_tls_parse_stoc_renegotiate
+#define tls_parse_stoc_sct v1_tls_parse_stoc_sct
+#define tls_parse_stoc_server_name v1_tls_parse_stoc_server_name
+#define tls_parse_stoc_session_ticket v1_tls_parse_stoc_session_ticket
+#define tls_parse_stoc_status_request v1_tls_parse_stoc_status_request
+#define tls_parse_stoc_supported_versions v1_tls_parse_stoc_supported_versions
+#define tls_parse_stoc_use_srtp v1_tls_parse_stoc_use_srtp
+#define tls_post_process_client_hello v1_tls_post_process_client_hello
+#define tls_post_process_client_key_exchange v1_tls_post_process_client_key_exchange
+#define tls_prepare_client_certificate v1_tls_prepare_client_certificate
+#define tls_process_certificate_request v1_tls_process_certificate_request
+#define tls_process_cert_status v1_tls_process_cert_status
+#define tls_process_cert_status_body v1_tls_process_cert_status_body
+#define tls_process_cert_verify v1_tls_process_cert_verify
+#define tls_process_change_cipher_spec v1_tls_process_change_cipher_spec
+#define tls_process_client_certificate v1_tls_process_client_certificate
+#define tls_process_client_hello v1_tls_process_client_hello
+#define tls_process_client_key_exchange v1_tls_process_client_key_exchange
+#define tls_process_end_of_early_data v1_tls_process_end_of_early_data
+#define tls_process_finished v1_tls_process_finished
+#define tls_process_hello_req v1_tls_process_hello_req
+#define tls_process_initial_server_flight v1_tls_process_initial_server_flight
+#define tls_process_key_exchange v1_tls_process_key_exchange
+#define tls_process_key_update v1_tls_process_key_update
+#define tls_process_new_session_ticket v1_tls_process_new_session_ticket
+#define tls_process_next_proto v1_tls_process_next_proto
+#define tls_process_server_certificate v1_tls_process_server_certificate
+#define tls_process_server_done v1_tls_process_server_done
+#define tls_process_server_hello v1_tls_process_server_hello
+#define tls_psk_do_binder v1_tls_psk_do_binder
+#define TLS_server_method v1_TLS_server_method
+#define tls_setup_handshake v1_tls_setup_handshake
+#define tls_use_ticket v1_tls_use_ticket
+#define tlsv1_1_client_method v1_tlsv1_1_client_method
+#define TLSv1_1_client_method v1_TLSv1_1_client_method
+#define TLSv1_1_enc_data v1_TLSv1_1_enc_data
+#define tlsv1_1_method v1_tlsv1_1_method
+#define TLSv1_1_method v1_TLSv1_1_method
+#define tlsv1_1_server_method v1_tlsv1_1_server_method
+#define TLSv1_1_server_method v1_TLSv1_1_server_method
+#define tlsv1_2_client_method v1_tlsv1_2_client_method
+#define TLSv1_2_client_method v1_TLSv1_2_client_method
+#define TLSv1_2_enc_data v1_TLSv1_2_enc_data
+#define tlsv1_2_method v1_tlsv1_2_method
+#define TLSv1_2_method v1_TLSv1_2_method
+#define tlsv1_2_server_method v1_tlsv1_2_server_method
+#define TLSv1_2_server_method v1_TLSv1_2_server_method
+#define tlsv1_3_client_method v1_tlsv1_3_client_method
+#define TLSv1_3_enc_data v1_TLSv1_3_enc_data
+#define tlsv1_3_method v1_tlsv1_3_method
+#define tlsv1_3_server_method v1_tlsv1_3_server_method
+#define tlsv1_client_method v1_tlsv1_client_method
+#define TLSv1_client_method v1_TLSv1_client_method
+#define TLSv1_enc_data v1_TLSv1_enc_data
+#if !defined(tlsv1_method)
+#define tlsv1_method v1_tlsv1_method
+#endif
+#define TLSv1_method v1_TLSv1_method
+#define tlsv1_server_method v1_tlsv1_server_method
+#define TLSv1_server_method v1_TLSv1_server_method
+#define tls_validate_all_contexts v1_tls_validate_all_contexts
+#define tree_find_sk v1_tree_find_sk
+#define TS_ACCURACY_dup v1_TS_ACCURACY_dup
+#define TS_ACCURACY_free v1_TS_ACCURACY_free
+#define TS_ACCURACY_get_micros v1_TS_ACCURACY_get_micros
+#define TS_ACCURACY_get_millis v1_TS_ACCURACY_get_millis
+#define TS_ACCURACY_get_seconds v1_TS_ACCURACY_get_seconds
+#define TS_ACCURACY_new v1_TS_ACCURACY_new
+#define TS_ACCURACY_set_micros v1_TS_ACCURACY_set_micros
+#define TS_ACCURACY_set_millis v1_TS_ACCURACY_set_millis
+#define TS_ACCURACY_set_seconds v1_TS_ACCURACY_set_seconds
+#define TS_ASN1_INTEGER_print_bio v1_TS_ASN1_INTEGER_print_bio
+#define TS_CONF_get_tsa_section v1_TS_CONF_get_tsa_section
+#define TS_CONF_load_cert v1_TS_CONF_load_cert
+#define TS_CONF_load_certs v1_TS_CONF_load_certs
+#define TS_CONF_load_key v1_TS_CONF_load_key
+#define TS_CONF_set_accuracy v1_TS_CONF_set_accuracy
+#define TS_CONF_set_certs v1_TS_CONF_set_certs
+#define TS_CONF_set_clock_precision_digits v1_TS_CONF_set_clock_precision_digits
+#define TS_CONF_set_crypto_device v1_TS_CONF_set_crypto_device
+#define TS_CONF_set_default_engine v1_TS_CONF_set_default_engine
+#define TS_CONF_set_def_policy v1_TS_CONF_set_def_policy
+#define TS_CONF_set_digests v1_TS_CONF_set_digests
+#define TS_CONF_set_ess_cert_id_chain v1_TS_CONF_set_ess_cert_id_chain
+#define TS_CONF_set_ess_cert_id_digest v1_TS_CONF_set_ess_cert_id_digest
+#define TS_CONF_set_ordering v1_TS_CONF_set_ordering
+#define TS_CONF_set_policies v1_TS_CONF_set_policies
+#define TS_CONF_set_serial v1_TS_CONF_set_serial
+#define TS_CONF_set_signer_cert v1_TS_CONF_set_signer_cert
+#define TS_CONF_set_signer_digest v1_TS_CONF_set_signer_digest
+#define TS_CONF_set_signer_key v1_TS_CONF_set_signer_key
+#define TS_CONF_set_tsa_name v1_TS_CONF_set_tsa_name
+#define TS_ext_print_bio v1_TS_ext_print_bio
+#define TS_MSG_IMPRINT_dup v1_TS_MSG_IMPRINT_dup
+#define TS_MSG_IMPRINT_free v1_TS_MSG_IMPRINT_free
+#define TS_MSG_IMPRINT_get_algo v1_TS_MSG_IMPRINT_get_algo
+#define TS_MSG_IMPRINT_get_msg v1_TS_MSG_IMPRINT_get_msg
+#define TS_MSG_IMPRINT_new v1_TS_MSG_IMPRINT_new
+#define TS_MSG_IMPRINT_print_bio v1_TS_MSG_IMPRINT_print_bio
+#define TS_MSG_IMPRINT_set_algo v1_TS_MSG_IMPRINT_set_algo
+#define TS_MSG_IMPRINT_set_msg v1_TS_MSG_IMPRINT_set_msg
+#define TS_OBJ_print_bio v1_TS_OBJ_print_bio
+#define TS_REQ_add_ext v1_TS_REQ_add_ext
+#define TS_REQ_delete_ext v1_TS_REQ_delete_ext
+#define TS_REQ_dup v1_TS_REQ_dup
+#define TS_REQ_ext_free v1_TS_REQ_ext_free
+#define TS_REQ_free v1_TS_REQ_free
+#define TS_REQ_get_cert_req v1_TS_REQ_get_cert_req
+#define TS_REQ_get_ext v1_TS_REQ_get_ext
+#define TS_REQ_get_ext_by_critical v1_TS_REQ_get_ext_by_critical
+#define TS_REQ_get_ext_by_NID v1_TS_REQ_get_ext_by_NID
+#define TS_REQ_get_ext_by_OBJ v1_TS_REQ_get_ext_by_OBJ
+#define TS_REQ_get_ext_count v1_TS_REQ_get_ext_count
+#define TS_REQ_get_ext_d2i v1_TS_REQ_get_ext_d2i
+#define TS_REQ_get_exts v1_TS_REQ_get_exts
+#define TS_REQ_get_msg_imprint v1_TS_REQ_get_msg_imprint
+#define TS_REQ_get_nonce v1_TS_REQ_get_nonce
+#define TS_REQ_get_policy_id v1_TS_REQ_get_policy_id
+#define TS_REQ_get_version v1_TS_REQ_get_version
+#define TS_REQ_new v1_TS_REQ_new
+#define TS_REQ_print_bio v1_TS_REQ_print_bio
+#define TS_REQ_set_cert_req v1_TS_REQ_set_cert_req
+#define TS_REQ_set_msg_imprint v1_TS_REQ_set_msg_imprint
+#define TS_REQ_set_nonce v1_TS_REQ_set_nonce
+#define TS_REQ_set_policy_id v1_TS_REQ_set_policy_id
+#define TS_REQ_set_version v1_TS_REQ_set_version
+#define TS_REQ_to_TS_VERIFY_CTX v1_TS_REQ_to_TS_VERIFY_CTX
+#define TS_RESP_create_response v1_TS_RESP_create_response
+#define TS_RESP_CTX_add_failure_info v1_TS_RESP_CTX_add_failure_info
+#define TS_RESP_CTX_add_flags v1_TS_RESP_CTX_add_flags
+#define TS_RESP_CTX_add_md v1_TS_RESP_CTX_add_md
+#define TS_RESP_CTX_add_policy v1_TS_RESP_CTX_add_policy
+#define TS_RESP_CTX_free v1_TS_RESP_CTX_free
+#define TS_RESP_CTX_get_request v1_TS_RESP_CTX_get_request
+#define TS_RESP_CTX_get_tst_info v1_TS_RESP_CTX_get_tst_info
+#define TS_RESP_CTX_new v1_TS_RESP_CTX_new
+#define TS_RESP_CTX_set_accuracy v1_TS_RESP_CTX_set_accuracy
+#define TS_RESP_CTX_set_certs v1_TS_RESP_CTX_set_certs
+#define TS_RESP_CTX_set_clock_precision_digits v1_TS_RESP_CTX_set_clock_precision_digits
+#define TS_RESP_CTX_set_def_policy v1_TS_RESP_CTX_set_def_policy
+#define TS_RESP_CTX_set_ess_cert_id_digest v1_TS_RESP_CTX_set_ess_cert_id_digest
+#define TS_RESP_CTX_set_extension_cb v1_TS_RESP_CTX_set_extension_cb
+#define TS_RESP_CTX_set_serial_cb v1_TS_RESP_CTX_set_serial_cb
+#define TS_RESP_CTX_set_signer_cert v1_TS_RESP_CTX_set_signer_cert
+#define TS_RESP_CTX_set_signer_digest v1_TS_RESP_CTX_set_signer_digest
+#define TS_RESP_CTX_set_signer_key v1_TS_RESP_CTX_set_signer_key
+#define TS_RESP_CTX_set_status_info v1_TS_RESP_CTX_set_status_info
+#define TS_RESP_CTX_set_status_info_cond v1_TS_RESP_CTX_set_status_info_cond
+#define TS_RESP_CTX_set_time_cb v1_TS_RESP_CTX_set_time_cb
+#define TS_RESP_dup v1_TS_RESP_dup
+#define TS_RESP_free v1_TS_RESP_free
+#define TS_RESP_get_status_info v1_TS_RESP_get_status_info
+#define TS_RESP_get_token v1_TS_RESP_get_token
+#define TS_RESP_get_tst_info v1_TS_RESP_get_tst_info
+#define TS_RESP_new v1_TS_RESP_new
+#define TS_RESP_print_bio v1_TS_RESP_print_bio
+#define TS_RESP_set_status_info v1_TS_RESP_set_status_info
+#define TS_RESP_set_tst_info v1_TS_RESP_set_tst_info
+#define TS_RESP_verify_response v1_TS_RESP_verify_response
+#define TS_RESP_verify_signature v1_TS_RESP_verify_signature
+#define TS_RESP_verify_token v1_TS_RESP_verify_token
+#define TS_STATUS_INFO_dup v1_TS_STATUS_INFO_dup
+#define TS_STATUS_INFO_free v1_TS_STATUS_INFO_free
+#define TS_STATUS_INFO_get0_failure_info v1_TS_STATUS_INFO_get0_failure_info
+#define TS_STATUS_INFO_get0_status v1_TS_STATUS_INFO_get0_status
+#define TS_STATUS_INFO_get0_text v1_TS_STATUS_INFO_get0_text
+#define TS_STATUS_INFO_new v1_TS_STATUS_INFO_new
+#define TS_STATUS_INFO_print_bio v1_TS_STATUS_INFO_print_bio
+#define TS_STATUS_INFO_set_status v1_TS_STATUS_INFO_set_status
+#define TS_TST_INFO_add_ext v1_TS_TST_INFO_add_ext
+#define TS_TST_INFO_delete_ext v1_TS_TST_INFO_delete_ext
+#define TS_TST_INFO_dup v1_TS_TST_INFO_dup
+#define TS_TST_INFO_ext_free v1_TS_TST_INFO_ext_free
+#define TS_TST_INFO_free v1_TS_TST_INFO_free
+#define TS_TST_INFO_get_accuracy v1_TS_TST_INFO_get_accuracy
+#define TS_TST_INFO_get_ext v1_TS_TST_INFO_get_ext
+#define TS_TST_INFO_get_ext_by_critical v1_TS_TST_INFO_get_ext_by_critical
+#define TS_TST_INFO_get_ext_by_NID v1_TS_TST_INFO_get_ext_by_NID
+#define TS_TST_INFO_get_ext_by_OBJ v1_TS_TST_INFO_get_ext_by_OBJ
+#define TS_TST_INFO_get_ext_count v1_TS_TST_INFO_get_ext_count
+#define TS_TST_INFO_get_ext_d2i v1_TS_TST_INFO_get_ext_d2i
+#define TS_TST_INFO_get_exts v1_TS_TST_INFO_get_exts
+#define TS_TST_INFO_get_msg_imprint v1_TS_TST_INFO_get_msg_imprint
+#define TS_TST_INFO_get_nonce v1_TS_TST_INFO_get_nonce
+#define TS_TST_INFO_get_ordering v1_TS_TST_INFO_get_ordering
+#define TS_TST_INFO_get_policy_id v1_TS_TST_INFO_get_policy_id
+#define TS_TST_INFO_get_serial v1_TS_TST_INFO_get_serial
+#define TS_TST_INFO_get_time v1_TS_TST_INFO_get_time
+#define TS_TST_INFO_get_tsa v1_TS_TST_INFO_get_tsa
+#define TS_TST_INFO_get_version v1_TS_TST_INFO_get_version
+#define TS_TST_INFO_new v1_TS_TST_INFO_new
+#define TS_TST_INFO_print_bio v1_TS_TST_INFO_print_bio
+#define TS_TST_INFO_set_accuracy v1_TS_TST_INFO_set_accuracy
+#define TS_TST_INFO_set_msg_imprint v1_TS_TST_INFO_set_msg_imprint
+#define TS_TST_INFO_set_nonce v1_TS_TST_INFO_set_nonce
+#define TS_TST_INFO_set_ordering v1_TS_TST_INFO_set_ordering
+#define TS_TST_INFO_set_policy_id v1_TS_TST_INFO_set_policy_id
+#define TS_TST_INFO_set_serial v1_TS_TST_INFO_set_serial
+#define TS_TST_INFO_set_time v1_TS_TST_INFO_set_time
+#define TS_TST_INFO_set_tsa v1_TS_TST_INFO_set_tsa
+#define TS_TST_INFO_set_version v1_TS_TST_INFO_set_version
+#define TS_VERIFY_CTS_set_certs v1_TS_VERIFY_CTS_set_certs
+#define TS_VERIFY_CTX_add_flags v1_TS_VERIFY_CTX_add_flags
+#define TS_VERIFY_CTX_cleanup v1_TS_VERIFY_CTX_cleanup
+#define TS_VERIFY_CTX_free v1_TS_VERIFY_CTX_free
+#define TS_VERIFY_CTX_init v1_TS_VERIFY_CTX_init
+#define TS_VERIFY_CTX_new v1_TS_VERIFY_CTX_new
+#define TS_VERIFY_CTX_set_data v1_TS_VERIFY_CTX_set_data
+#define TS_VERIFY_CTX_set_flags v1_TS_VERIFY_CTX_set_flags
+#define TS_VERIFY_CTX_set_imprint v1_TS_VERIFY_CTX_set_imprint
+#define TS_VERIFY_CTX_set_store v1_TS_VERIFY_CTX_set_store
+#define TS_X509_ALGOR_print_bio v1_TS_X509_ALGOR_print_bio
+#define TXT_DB_create_index v1_TXT_DB_create_index
+#define TXT_DB_free v1_TXT_DB_free
+#define TXT_DB_get_by_index v1_TXT_DB_get_by_index
+#define TXT_DB_insert v1_TXT_DB_insert
+#define TXT_DB_read v1_TXT_DB_read
+#define TXT_DB_write v1_TXT_DB_write
+#define UI_add_error_string v1_UI_add_error_string
+#define UI_add_info_string v1_UI_add_info_string
+#define UI_add_input_boolean v1_UI_add_input_boolean
+#define UI_add_input_string v1_UI_add_input_string
+#define UI_add_user_data v1_UI_add_user_data
+#define UI_add_verify_string v1_UI_add_verify_string
+#define UI_construct_prompt v1_UI_construct_prompt
+#define UI_create_method v1_UI_create_method
+#define UI_ctrl v1_UI_ctrl
+#define UI_destroy_method v1_UI_destroy_method
+#define UI_dup_error_string v1_UI_dup_error_string
+#define UI_dup_info_string v1_UI_dup_info_string
+#define UI_dup_input_boolean v1_UI_dup_input_boolean
+#define UI_dup_input_string v1_UI_dup_input_string
+#define UI_dup_user_data v1_UI_dup_user_data
+#define UI_dup_verify_string v1_UI_dup_verify_string
+#define UI_free v1_UI_free
+#define UI_get0_action_string v1_UI_get0_action_string
+#define UI_get0_output_string v1_UI_get0_output_string
+#define UI_get0_result v1_UI_get0_result
+#define UI_get0_result_string v1_UI_get0_result_string
+#define UI_get0_test_string v1_UI_get0_test_string
+#define UI_get0_user_data v1_UI_get0_user_data
+#define UI_get_default_method v1_UI_get_default_method
+#define UI_get_ex_data v1_UI_get_ex_data
+#define UI_get_input_flags v1_UI_get_input_flags
+#define UI_get_method v1_UI_get_method
+#define UI_get_result_length v1_UI_get_result_length
+#define UI_get_result_maxsize v1_UI_get_result_maxsize
+#define UI_get_result_minsize v1_UI_get_result_minsize
+#define UI_get_result_string_length v1_UI_get_result_string_length
+#define UI_get_string_type v1_UI_get_string_type
+#define UI_method_get_closer v1_UI_method_get_closer
+#define UI_method_get_data_destructor v1_UI_method_get_data_destructor
+#define UI_method_get_data_duplicator v1_UI_method_get_data_duplicator
+#define UI_method_get_ex_data v1_UI_method_get_ex_data
+#define UI_method_get_flusher v1_UI_method_get_flusher
+#define UI_method_get_opener v1_UI_method_get_opener
+#define UI_method_get_prompt_constructor v1_UI_method_get_prompt_constructor
+#define UI_method_get_reader v1_UI_method_get_reader
+#define UI_method_get_writer v1_UI_method_get_writer
+#define UI_method_set_closer v1_UI_method_set_closer
+#define UI_method_set_data_duplicator v1_UI_method_set_data_duplicator
+#define UI_method_set_ex_data v1_UI_method_set_ex_data
+#define UI_method_set_flusher v1_UI_method_set_flusher
+#define UI_method_set_opener v1_UI_method_set_opener
+#define UI_method_set_prompt_constructor v1_UI_method_set_prompt_constructor
+#define UI_method_set_reader v1_UI_method_set_reader
+#define UI_method_set_writer v1_UI_method_set_writer
+#define UI_new v1_UI_new
+#define UI_new_method v1_UI_new_method
+#define UINT32_it v1_UINT32_it
+#define UINT64_it v1_UINT64_it
+#define UI_null v1_UI_null
+#define UI_OpenSSL v1_UI_OpenSSL
+#define UI_process v1_UI_process
+#define UI_set_default_method v1_UI_set_default_method
+#define UI_set_ex_data v1_UI_set_ex_data
+#define UI_set_method v1_UI_set_method
+#define UI_set_result v1_UI_set_result
+#define UI_set_result_ex v1_UI_set_result_ex
+#define UI_UTIL_read_pw v1_UI_UTIL_read_pw
+#define UI_UTIL_read_pw_string v1_UI_UTIL_read_pw_string
+#define UI_UTIL_wrap_read_pem_callback v1_UI_UTIL_wrap_read_pem_callback
+#define USERNOTICE_free v1_USERNOTICE_free
+#define USERNOTICE_it v1_USERNOTICE_it
+#define USERNOTICE_new v1_USERNOTICE_new
+#define UTF8_getc v1_UTF8_getc
+#define UTF8_putc v1_UTF8_putc
+#define v2i_ASN1_BIT_STRING v1_v2i_ASN1_BIT_STRING
+#define v2i_GENERAL_NAME v1_v2i_GENERAL_NAME
+#define v2i_GENERAL_NAME_ex v1_v2i_GENERAL_NAME_ex
+#define v2i_GENERAL_NAMES v1_v2i_GENERAL_NAMES
+#define v3_addr v1_v3_addr
+#define v3_akey_id v1_v3_akey_id
+#define v3_alt v1_v3_alt
+#define v3_asid v1_v3_asid
+#define v3_bcons v1_v3_bcons
+#define v3_cpols v1_v3_cpols
+#define v3_crld v1_v3_crld
+#define v3_crl_hold v1_v3_crl_hold
+#define v3_crl_invdate v1_v3_crl_invdate
+#define v3_crl_num v1_v3_crl_num
+#define v3_crl_reason v1_v3_crl_reason
+#define v3_ct_scts v1_v3_ct_scts
+#define v3_delta_crl v1_v3_delta_crl
+#define v3_ext_admission v1_v3_ext_admission
+#define v3_ext_ku v1_v3_ext_ku
+#define v3_freshest_crl v1_v3_freshest_crl
+#define v3_idp v1_v3_idp
+#define v3_info v1_v3_info
+#define v3_inhibit_anyp v1_v3_inhibit_anyp
+#define v3_key_usage v1_v3_key_usage
+#define v3_name_constraints v1_v3_name_constraints
+#define v3_nscert v1_v3_nscert
+#define v3_ns_ia5_list v1_v3_ns_ia5_list
+#define v3_ocsp_accresp v1_v3_ocsp_accresp
+#define v3_ocsp_acutoff v1_v3_ocsp_acutoff
+#define v3_ocsp_crlid v1_v3_ocsp_crlid
+#define v3_ocsp_nocheck v1_v3_ocsp_nocheck
+#define v3_ocsp_nonce v1_v3_ocsp_nonce
+#define v3_ocsp_serviceloc v1_v3_ocsp_serviceloc
+#define v3_pci v1_v3_pci
+#define v3_pkey_usage_period v1_v3_pkey_usage_period
+#define v3_policy_constraints v1_v3_policy_constraints
+#define v3_policy_mappings v1_v3_policy_mappings
+#define v3_sinfo v1_v3_sinfo
+#define v3_skey_id v1_v3_skey_id
+#define v3_sxnet v1_v3_sxnet
+#define v3_tls_feature v1_v3_tls_feature
+#define vpaes_cbc_encrypt v1_vpaes_cbc_encrypt
+#define vpaes_decrypt v1_vpaes_decrypt
+#define vpaes_encrypt v1_vpaes_encrypt
+#define vpaes_set_decrypt_key v1_vpaes_set_decrypt_key
+#define vpaes_set_encrypt_key v1_vpaes_set_encrypt_key
+#define WHIRLPOOL v1_WHIRLPOOL
+#define WHIRLPOOL_BitUpdate v1_WHIRLPOOL_BitUpdate
+#define whirlpool_block v1_whirlpool_block
+#define WHIRLPOOL_Final v1_WHIRLPOOL_Final
+#define WHIRLPOOL_Init v1_WHIRLPOOL_Init
+#define WHIRLPOOL_Update v1_WHIRLPOOL_Update
+#define WPACKET_allocate_bytes v1_WPACKET_allocate_bytes
+#define WPACKET_cleanup v1_WPACKET_cleanup
+#define WPACKET_close v1_WPACKET_close
+#define WPACKET_fill_lengths v1_WPACKET_fill_lengths
+#define WPACKET_finish v1_WPACKET_finish
+#define WPACKET_get_curr v1_WPACKET_get_curr
+#define WPACKET_get_length v1_WPACKET_get_length
+#define WPACKET_get_total_written v1_WPACKET_get_total_written
+#define WPACKET_init v1_WPACKET_init
+#define WPACKET_init_len v1_WPACKET_init_len
+#define WPACKET_init_static_len v1_WPACKET_init_static_len
+#define WPACKET_memcpy v1_WPACKET_memcpy
+#define WPACKET_memset v1_WPACKET_memset
+#define WPACKET_put_bytes__ v1_WPACKET_put_bytes__
+#define WPACKET_reserve_bytes v1_WPACKET_reserve_bytes
+#define WPACKET_set_flags v1_WPACKET_set_flags
+#define WPACKET_set_max_size v1_WPACKET_set_max_size
+#define WPACKET_start_sub_packet v1_WPACKET_start_sub_packet
+#define WPACKET_start_sub_packet_len__ v1_WPACKET_start_sub_packet_len__
+#define WPACKET_sub_allocate_bytes__ v1_WPACKET_sub_allocate_bytes__
+#define WPACKET_sub_memcpy__ v1_WPACKET_sub_memcpy__
+#define WPACKET_sub_reserve_bytes__ v1_WPACKET_sub_reserve_bytes__
+#define X25519 v1_X25519
+#define x25519_fe51_mul v1_x25519_fe51_mul
+#define x25519_fe51_mul121666 v1_x25519_fe51_mul121666
+#define x25519_fe51_sqr v1_x25519_fe51_sqr
+#define x25519_fe64_add v1_x25519_fe64_add
+#define x25519_fe64_eligible v1_x25519_fe64_eligible
+#define x25519_fe64_mul v1_x25519_fe64_mul
+#define x25519_fe64_mul121666 v1_x25519_fe64_mul121666
+#define x25519_fe64_sqr v1_x25519_fe64_sqr
+#define x25519_fe64_sub v1_x25519_fe64_sub
+#define x25519_fe64_tobytes v1_x25519_fe64_tobytes
+#define X25519_public_from_private v1_X25519_public_from_private
+#define X448 v1_X448
+#define x448_derive_public_key v1_x448_derive_public_key
+#define x448_int v1_x448_int
+#define X448_public_from_private v1_X448_public_from_private
+#define X509_add1_ext_i2d v1_X509_add1_ext_i2d
+#define X509_add1_reject_object v1_X509_add1_reject_object
+#define X509_add1_trust_object v1_X509_add1_trust_object
+#define X509_add_ext v1_X509_add_ext
+#define X509_ALGOR_cmp v1_X509_ALGOR_cmp
+#define X509_ALGOR_copy v1_X509_ALGOR_copy
+#define X509_ALGOR_dup v1_X509_ALGOR_dup
+#define X509_ALGOR_free v1_X509_ALGOR_free
+#define X509_ALGOR_get0 v1_X509_ALGOR_get0
+#define X509_ALGOR_it v1_X509_ALGOR_it
+#define X509_ALGOR_new v1_X509_ALGOR_new
+#define X509_ALGOR_set0 v1_X509_ALGOR_set0
+#define X509_ALGOR_set_md v1_X509_ALGOR_set_md
+#define X509_ALGORS_it v1_X509_ALGORS_it
+#define X509_alias_get0 v1_X509_alias_get0
+#define X509_alias_set1 v1_X509_alias_set1
+#define X509at_add1_attr v1_X509at_add1_attr
+#define X509at_add1_attr_by_NID v1_X509at_add1_attr_by_NID
+#define X509at_add1_attr_by_OBJ v1_X509at_add1_attr_by_OBJ
+#define X509at_add1_attr_by_txt v1_X509at_add1_attr_by_txt
+#define X509at_delete_attr v1_X509at_delete_attr
+#define X509at_get0_data_by_OBJ v1_X509at_get0_data_by_OBJ
+#define X509at_get_attr v1_X509at_get_attr
+#define X509at_get_attr_by_NID v1_X509at_get_attr_by_NID
+#define X509at_get_attr_by_OBJ v1_X509at_get_attr_by_OBJ
+#define X509at_get_attr_count v1_X509at_get_attr_count
+#define X509_ATTRIBUTE_count v1_X509_ATTRIBUTE_count
+#define X509_ATTRIBUTE_create v1_X509_ATTRIBUTE_create
+#define X509_ATTRIBUTE_create_by_NID v1_X509_ATTRIBUTE_create_by_NID
+#define X509_ATTRIBUTE_create_by_OBJ v1_X509_ATTRIBUTE_create_by_OBJ
+#define X509_ATTRIBUTE_create_by_txt v1_X509_ATTRIBUTE_create_by_txt
+#define X509_ATTRIBUTE_dup v1_X509_ATTRIBUTE_dup
+#define X509_ATTRIBUTE_free v1_X509_ATTRIBUTE_free
+#define X509_ATTRIBUTE_get0_data v1_X509_ATTRIBUTE_get0_data
+#define X509_ATTRIBUTE_get0_object v1_X509_ATTRIBUTE_get0_object
+#define X509_ATTRIBUTE_get0_type v1_X509_ATTRIBUTE_get0_type
+#define X509_ATTRIBUTE_it v1_X509_ATTRIBUTE_it
+#define X509_ATTRIBUTE_new v1_X509_ATTRIBUTE_new
+#define X509_ATTRIBUTE_set1_data v1_X509_ATTRIBUTE_set1_data
+#define X509_ATTRIBUTE_set1_object v1_X509_ATTRIBUTE_set1_object
+#define X509_aux_print v1_X509_aux_print
+#define X509_CERT_AUX_free v1_X509_CERT_AUX_free
+#define X509_CERT_AUX_it v1_X509_CERT_AUX_it
+#define X509_CERT_AUX_new v1_X509_CERT_AUX_new
+#define X509_certificate_type v1_X509_certificate_type
+#define X509_chain_check_suiteb v1_X509_chain_check_suiteb
+#define X509_chain_up_ref v1_X509_chain_up_ref
+#define X509_check_akid v1_X509_check_akid
+#define X509_check_ca v1_X509_check_ca
+#define x509_check_cert_time v1_x509_check_cert_time
+#define X509_check_email v1_X509_check_email
+#define X509_check_host v1_X509_check_host
+#define X509_check_ip v1_X509_check_ip
+#define X509_check_ip_asc v1_X509_check_ip_asc
+#define X509_check_issued v1_X509_check_issued
+#define X509_check_private_key v1_X509_check_private_key
+#define X509_check_purpose v1_X509_check_purpose
+#define X509_check_trust v1_X509_check_trust
+#define X509_CINF_free v1_X509_CINF_free
+#define X509_CINF_it v1_X509_CINF_it
+#define X509_CINF_new v1_X509_CINF_new
+#define X509_cmp v1_X509_cmp
+#define X509_cmp_current_time v1_X509_cmp_current_time
+#define X509_cmp_time v1_X509_cmp_time
+#define X509_CRL_add0_revoked v1_X509_CRL_add0_revoked
+#define X509_CRL_add1_ext_i2d v1_X509_CRL_add1_ext_i2d
+#define X509_CRL_add_ext v1_X509_CRL_add_ext
+#define X509_CRL_check_suiteb v1_X509_CRL_check_suiteb
+#define X509_CRL_cmp v1_X509_CRL_cmp
+#define X509_CRL_delete_ext v1_X509_CRL_delete_ext
+#define X509_CRL_diff v1_X509_CRL_diff
+#define X509_CRL_digest v1_X509_CRL_digest
+#define X509_CRL_dup v1_X509_CRL_dup
+#define X509_CRL_free v1_X509_CRL_free
+#define X509_CRL_get0_by_cert v1_X509_CRL_get0_by_cert
+#define X509_CRL_get0_by_serial v1_X509_CRL_get0_by_serial
+#define X509_CRL_get0_extensions v1_X509_CRL_get0_extensions
+#define X509_CRL_get0_lastUpdate v1_X509_CRL_get0_lastUpdate
+#define X509_CRL_get0_nextUpdate v1_X509_CRL_get0_nextUpdate
+#define X509_CRL_get0_signature v1_X509_CRL_get0_signature
+#define X509_CRL_get_ext v1_X509_CRL_get_ext
+#define X509_CRL_get_ext_by_critical v1_X509_CRL_get_ext_by_critical
+#define X509_CRL_get_ext_by_NID v1_X509_CRL_get_ext_by_NID
+#define X509_CRL_get_ext_by_OBJ v1_X509_CRL_get_ext_by_OBJ
+#define X509_CRL_get_ext_count v1_X509_CRL_get_ext_count
+#define X509_CRL_get_ext_d2i v1_X509_CRL_get_ext_d2i
+#define X509_CRL_get_issuer v1_X509_CRL_get_issuer
+#define X509_CRL_get_lastUpdate v1_X509_CRL_get_lastUpdate
+#define X509_CRL_get_meth_data v1_X509_CRL_get_meth_data
+#define X509_CRL_get_nextUpdate v1_X509_CRL_get_nextUpdate
+#define X509_CRL_get_REVOKED v1_X509_CRL_get_REVOKED
+#define X509_CRL_get_signature_nid v1_X509_CRL_get_signature_nid
+#define X509_CRL_get_version v1_X509_CRL_get_version
+#define X509_CRL_http_nbio v1_X509_CRL_http_nbio
+#define X509_CRL_INFO_free v1_X509_CRL_INFO_free
+#define X509_CRL_INFO_it v1_X509_CRL_INFO_it
+#define X509_CRL_INFO_new v1_X509_CRL_INFO_new
+#define X509_CRL_it v1_X509_CRL_it
+#define X509_CRL_match v1_X509_CRL_match
+#define X509_CRL_METHOD_free v1_X509_CRL_METHOD_free
+#define X509_CRL_METHOD_new v1_X509_CRL_METHOD_new
+#define X509_CRL_new v1_X509_CRL_new
+#define X509_CRL_print v1_X509_CRL_print
+#define X509_CRL_print_ex v1_X509_CRL_print_ex
+#define X509_CRL_print_fp v1_X509_CRL_print_fp
+#define X509_CRL_set1_lastUpdate v1_X509_CRL_set1_lastUpdate
+#define X509_CRL_set1_nextUpdate v1_X509_CRL_set1_nextUpdate
+#define X509_CRL_set_default_method v1_X509_CRL_set_default_method
+#define X509_CRL_set_issuer_name v1_X509_CRL_set_issuer_name
+#define X509_CRL_set_meth_data v1_X509_CRL_set_meth_data
+#define X509_CRL_set_version v1_X509_CRL_set_version
+#define X509_CRL_sign v1_X509_CRL_sign
+#define X509_CRL_sign_ctx v1_X509_CRL_sign_ctx
+#define X509_CRL_sort v1_X509_CRL_sort
+#define X509_CRL_up_ref v1_X509_CRL_up_ref
+#define X509_CRL_verify v1_X509_CRL_verify
+#define X509_delete_ext v1_X509_delete_ext
+#define X509_digest v1_X509_digest
+#define X509_dup v1_X509_dup
+#define X509_email_free v1_X509_email_free
+#define X509_EXTENSION_create_by_NID v1_X509_EXTENSION_create_by_NID
+#define X509_EXTENSION_create_by_OBJ v1_X509_EXTENSION_create_by_OBJ
+#define X509_EXTENSION_dup v1_X509_EXTENSION_dup
+#define X509_EXTENSION_free v1_X509_EXTENSION_free
+#define X509_EXTENSION_get_critical v1_X509_EXTENSION_get_critical
+#define X509_EXTENSION_get_data v1_X509_EXTENSION_get_data
+#define X509_EXTENSION_get_object v1_X509_EXTENSION_get_object
+#define X509_EXTENSION_it v1_X509_EXTENSION_it
+#define X509_EXTENSION_new v1_X509_EXTENSION_new
+#define X509_EXTENSION_set_critical v1_X509_EXTENSION_set_critical
+#define X509_EXTENSION_set_data v1_X509_EXTENSION_set_data
+#define X509_EXTENSION_set_object v1_X509_EXTENSION_set_object
+#define X509_EXTENSIONS_it v1_X509_EXTENSIONS_it
+#define X509_find_by_issuer_and_serial v1_X509_find_by_issuer_and_serial
+#define X509_find_by_subject v1_X509_find_by_subject
+#define X509_free v1_X509_free
+#define X509_get0_authority_issuer v1_X509_get0_authority_issuer
+#define X509_get0_authority_key_id v1_X509_get0_authority_key_id
+#define X509_get0_authority_serial v1_X509_get0_authority_serial
+#define X509_get0_extensions v1_X509_get0_extensions
+#define X509_get0_notAfter v1_X509_get0_notAfter
+#define X509_get0_notBefore v1_X509_get0_notBefore
+#define X509_get0_pubkey v1_X509_get0_pubkey
+#define X509_get0_pubkey_bitstr v1_X509_get0_pubkey_bitstr
+#define X509_get0_reject_objects v1_X509_get0_reject_objects
+#define X509_get0_serialNumber v1_X509_get0_serialNumber
+#define X509_get0_signature v1_X509_get0_signature
+#define X509_get0_subject_key_id v1_X509_get0_subject_key_id
+#define X509_get0_tbs_sigalg v1_X509_get0_tbs_sigalg
+#define X509_get0_trust_objects v1_X509_get0_trust_objects
+#define X509_get0_uids v1_X509_get0_uids
+#define X509_get1_email v1_X509_get1_email
+#define X509_get1_ocsp v1_X509_get1_ocsp
+#define X509_get_default_cert_area v1_X509_get_default_cert_area
+#define X509_get_default_cert_dir v1_X509_get_default_cert_dir
+#define X509_get_default_cert_dir_env v1_X509_get_default_cert_dir_env
+#define X509_get_default_cert_file v1_X509_get_default_cert_file
+#define X509_get_default_cert_file_env v1_X509_get_default_cert_file_env
+#define X509_get_default_private_dir v1_X509_get_default_private_dir
+#define X509_get_ex_data v1_X509_get_ex_data
+#define X509_get_ext v1_X509_get_ext
+#define X509_get_ext_by_critical v1_X509_get_ext_by_critical
+#define X509_get_ext_by_NID v1_X509_get_ext_by_NID
+#define X509_get_ext_by_OBJ v1_X509_get_ext_by_OBJ
+#define X509_get_ext_count v1_X509_get_ext_count
+#define X509_get_ext_d2i v1_X509_get_ext_d2i
+#define X509_get_extended_key_usage v1_X509_get_extended_key_usage
+#define X509_get_extension_flags v1_X509_get_extension_flags
+#define X509_get_issuer_name v1_X509_get_issuer_name
+#define X509_get_key_usage v1_X509_get_key_usage
+#define X509_getm_notAfter v1_X509_getm_notAfter
+#define X509_getm_notBefore v1_X509_getm_notBefore
+#define X509_get_pathlen v1_X509_get_pathlen
+#define X509_get_proxy_pathlen v1_X509_get_proxy_pathlen
+#define X509_get_pubkey v1_X509_get_pubkey
+#define X509_get_pubkey_parameters v1_X509_get_pubkey_parameters
+#define X509_get_serialNumber v1_X509_get_serialNumber
+#define X509_get_signature_info v1_X509_get_signature_info
+#define X509_get_signature_nid v1_X509_get_signature_nid
+#define X509_get_signature_type v1_X509_get_signature_type
+#define X509_get_subject_name v1_X509_get_subject_name
+#define X509_get_version v1_X509_get_version
+#define X509_get_X509_PUBKEY v1_X509_get_X509_PUBKEY
+#define X509_gmtime_adj v1_X509_gmtime_adj
+#define X509_http_nbio v1_X509_http_nbio
+#define X509_INFO_free v1_X509_INFO_free
+#define X509_INFO_new v1_X509_INFO_new
+#define x509_init_sig_info v1_x509_init_sig_info
+#define X509_issuer_and_serial_cmp v1_X509_issuer_and_serial_cmp
+#define X509_issuer_and_serial_hash v1_X509_issuer_and_serial_hash
+#define X509_issuer_name_cmp v1_X509_issuer_name_cmp
+#define X509_issuer_name_hash v1_X509_issuer_name_hash
+#define X509_issuer_name_hash_old v1_X509_issuer_name_hash_old
+#define X509_it v1_X509_it
+#define X509_keyid_get0 v1_X509_keyid_get0
+#define X509_keyid_set1 v1_X509_keyid_set1
+#define x509_likely_issued v1_x509_likely_issued
+#define X509_load_cert_crl_file v1_X509_load_cert_crl_file
+#define X509_load_cert_file v1_X509_load_cert_file
+#define X509_load_crl_file v1_X509_load_crl_file
+#define X509_LOOKUP_by_alias v1_X509_LOOKUP_by_alias
+#define X509_LOOKUP_by_fingerprint v1_X509_LOOKUP_by_fingerprint
+#define X509_LOOKUP_by_issuer_serial v1_X509_LOOKUP_by_issuer_serial
+#define X509_LOOKUP_by_subject v1_X509_LOOKUP_by_subject
+#define X509_LOOKUP_ctrl v1_X509_LOOKUP_ctrl
+#define X509_LOOKUP_file v1_X509_LOOKUP_file
+#define X509_LOOKUP_free v1_X509_LOOKUP_free
+#define X509_LOOKUP_get_method_data v1_X509_LOOKUP_get_method_data
+#define X509_LOOKUP_get_store v1_X509_LOOKUP_get_store
+#define X509_LOOKUP_hash_dir v1_X509_LOOKUP_hash_dir
+#define X509_LOOKUP_init v1_X509_LOOKUP_init
+#define X509_LOOKUP_meth_free v1_X509_LOOKUP_meth_free
+#define X509_LOOKUP_meth_get_ctrl v1_X509_LOOKUP_meth_get_ctrl
+#define X509_LOOKUP_meth_get_free v1_X509_LOOKUP_meth_get_free
+#define X509_LOOKUP_meth_get_get_by_alias v1_X509_LOOKUP_meth_get_get_by_alias
+#define X509_LOOKUP_meth_get_get_by_fingerprint v1_X509_LOOKUP_meth_get_get_by_fingerprint
+#define X509_LOOKUP_meth_get_get_by_issuer_serial v1_X509_LOOKUP_meth_get_get_by_issuer_serial
+#define X509_LOOKUP_meth_get_get_by_subject v1_X509_LOOKUP_meth_get_get_by_subject
+#define X509_LOOKUP_meth_get_init v1_X509_LOOKUP_meth_get_init
+#define X509_LOOKUP_meth_get_new_item v1_X509_LOOKUP_meth_get_new_item
+#define X509_LOOKUP_meth_get_shutdown v1_X509_LOOKUP_meth_get_shutdown
+#define X509_LOOKUP_meth_new v1_X509_LOOKUP_meth_new
+#define X509_LOOKUP_meth_set_ctrl v1_X509_LOOKUP_meth_set_ctrl
+#define X509_LOOKUP_meth_set_free v1_X509_LOOKUP_meth_set_free
+#define X509_LOOKUP_meth_set_get_by_alias v1_X509_LOOKUP_meth_set_get_by_alias
+#define X509_LOOKUP_meth_set_get_by_fingerprint v1_X509_LOOKUP_meth_set_get_by_fingerprint
+#define X509_LOOKUP_meth_set_get_by_issuer_serial v1_X509_LOOKUP_meth_set_get_by_issuer_serial
+#define X509_LOOKUP_meth_set_get_by_subject v1_X509_LOOKUP_meth_set_get_by_subject
+#define X509_LOOKUP_meth_set_init v1_X509_LOOKUP_meth_set_init
+#define X509_LOOKUP_meth_set_new_item v1_X509_LOOKUP_meth_set_new_item
+#define X509_LOOKUP_meth_set_shutdown v1_X509_LOOKUP_meth_set_shutdown
+#define X509_LOOKUP_new v1_X509_LOOKUP_new
+#define X509_LOOKUP_set_method_data v1_X509_LOOKUP_set_method_data
+#define X509_LOOKUP_shutdown v1_X509_LOOKUP_shutdown
+#define X509_NAME_add_entry v1_X509_NAME_add_entry
+#define X509_NAME_add_entry_by_NID v1_X509_NAME_add_entry_by_NID
+#define X509_NAME_add_entry_by_OBJ v1_X509_NAME_add_entry_by_OBJ
+#define X509_NAME_add_entry_by_txt v1_X509_NAME_add_entry_by_txt
+#define X509_NAME_cmp v1_X509_NAME_cmp
+#define X509_NAME_delete_entry v1_X509_NAME_delete_entry
+#define X509_NAME_digest v1_X509_NAME_digest
+#define X509_NAME_dup v1_X509_NAME_dup
+#define X509_NAME_entry_count v1_X509_NAME_entry_count
+#define X509_NAME_ENTRY_create_by_NID v1_X509_NAME_ENTRY_create_by_NID
+#define X509_NAME_ENTRY_create_by_OBJ v1_X509_NAME_ENTRY_create_by_OBJ
+#define X509_NAME_ENTRY_create_by_txt v1_X509_NAME_ENTRY_create_by_txt
+#define X509_NAME_ENTRY_dup v1_X509_NAME_ENTRY_dup
+#define X509_NAME_ENTRY_free v1_X509_NAME_ENTRY_free
+#define X509_NAME_ENTRY_get_data v1_X509_NAME_ENTRY_get_data
+#define X509_NAME_ENTRY_get_object v1_X509_NAME_ENTRY_get_object
+#define X509_NAME_ENTRY_it v1_X509_NAME_ENTRY_it
+#define X509_NAME_ENTRY_new v1_X509_NAME_ENTRY_new
+#define X509_NAME_ENTRY_set v1_X509_NAME_ENTRY_set
+#define X509_NAME_ENTRY_set_data v1_X509_NAME_ENTRY_set_data
+#define X509_NAME_ENTRY_set_object v1_X509_NAME_ENTRY_set_object
+#define X509_NAME_free v1_X509_NAME_free
+#define X509_NAME_get0_der v1_X509_NAME_get0_der
+#define X509_NAME_get_entry v1_X509_NAME_get_entry
+#define X509_NAME_get_index_by_NID v1_X509_NAME_get_index_by_NID
+#define X509_NAME_get_index_by_OBJ v1_X509_NAME_get_index_by_OBJ
+#define X509_NAME_get_text_by_NID v1_X509_NAME_get_text_by_NID
+#define X509_NAME_get_text_by_OBJ v1_X509_NAME_get_text_by_OBJ
+#define X509_NAME_hash v1_X509_NAME_hash
+#define X509_NAME_hash_old v1_X509_NAME_hash_old
+#define X509_NAME_it v1_X509_NAME_it
+#define X509_NAME_new v1_X509_NAME_new
+#define X509_NAME_oneline v1_X509_NAME_oneline
+#define X509_NAME_print v1_X509_NAME_print
+#define X509_NAME_print_ex v1_X509_NAME_print_ex
+#define X509_NAME_print_ex_fp v1_X509_NAME_print_ex_fp
+#define X509_NAME_set v1_X509_NAME_set
+#define X509_new v1_X509_new
+#define X509_OBJECT_free v1_X509_OBJECT_free
+#define X509_OBJECT_get0_X509 v1_X509_OBJECT_get0_X509
+#define X509_OBJECT_get0_X509_CRL v1_X509_OBJECT_get0_X509_CRL
+#define X509_OBJECT_get_type v1_X509_OBJECT_get_type
+#define X509_OBJECT_idx_by_subject v1_X509_OBJECT_idx_by_subject
+#define X509_OBJECT_new v1_X509_OBJECT_new
+#define X509_OBJECT_retrieve_by_subject v1_X509_OBJECT_retrieve_by_subject
+#define X509_OBJECT_retrieve_match v1_X509_OBJECT_retrieve_match
+#define X509_OBJECT_set1_X509 v1_X509_OBJECT_set1_X509
+#define X509_OBJECT_set1_X509_CRL v1_X509_OBJECT_set1_X509_CRL
+#define X509_OBJECT_up_ref_count v1_X509_OBJECT_up_ref_count
+#define X509_ocspid_print v1_X509_ocspid_print
+#define X509_PKEY_free v1_X509_PKEY_free
+#define X509_PKEY_new v1_X509_PKEY_new
+#define X509_policy_check v1_X509_policy_check
+#define X509_policy_level_get0_node v1_X509_policy_level_get0_node
+#define X509_policy_level_node_count v1_X509_policy_level_node_count
+#define X509_policy_node_get0_parent v1_X509_policy_node_get0_parent
+#define X509_policy_node_get0_policy v1_X509_policy_node_get0_policy
+#define X509_policy_node_get0_qualifiers v1_X509_policy_node_get0_qualifiers
+#define X509_POLICY_NODE_print v1_X509_POLICY_NODE_print
+#define X509_policy_tree_free v1_X509_policy_tree_free
+#define X509_policy_tree_get0_level v1_X509_policy_tree_get0_level
+#define X509_policy_tree_get0_policies v1_X509_policy_tree_get0_policies
+#define X509_policy_tree_get0_user_policies v1_X509_policy_tree_get0_user_policies
+#define X509_policy_tree_level_count v1_X509_policy_tree_level_count
+#define X509_print v1_X509_print
+#define X509_print_ex v1_X509_print_ex
+#define X509_print_ex_fp v1_X509_print_ex_fp
+#define X509_print_fp v1_X509_print_fp
+#define X509_pubkey_digest v1_X509_pubkey_digest
+#define X509_PUBKEY_free v1_X509_PUBKEY_free
+#define X509_PUBKEY_get v1_X509_PUBKEY_get
+#define X509_PUBKEY_get0 v1_X509_PUBKEY_get0
+#define X509_PUBKEY_get0_param v1_X509_PUBKEY_get0_param
+#define X509_PUBKEY_it v1_X509_PUBKEY_it
+#define X509_PUBKEY_new v1_X509_PUBKEY_new
+#define X509_PUBKEY_set v1_X509_PUBKEY_set
+#define X509_PUBKEY_set0_param v1_X509_PUBKEY_set0_param
+#define X509_PURPOSE_add v1_X509_PURPOSE_add
+#define X509_PURPOSE_cleanup v1_X509_PURPOSE_cleanup
+#define X509_PURPOSE_get0 v1_X509_PURPOSE_get0
+#define X509_PURPOSE_get0_name v1_X509_PURPOSE_get0_name
+#define X509_PURPOSE_get0_sname v1_X509_PURPOSE_get0_sname
+#define X509_PURPOSE_get_by_id v1_X509_PURPOSE_get_by_id
+#define X509_PURPOSE_get_by_sname v1_X509_PURPOSE_get_by_sname
+#define X509_PURPOSE_get_count v1_X509_PURPOSE_get_count
+#define X509_PURPOSE_get_id v1_X509_PURPOSE_get_id
+#define X509_PURPOSE_get_trust v1_X509_PURPOSE_get_trust
+#define X509_PURPOSE_set v1_X509_PURPOSE_set
+#define X509_reject_clear v1_X509_reject_clear
+#define X509_REQ_add1_attr v1_X509_REQ_add1_attr
+#define X509_REQ_add1_attr_by_NID v1_X509_REQ_add1_attr_by_NID
+#define X509_REQ_add1_attr_by_OBJ v1_X509_REQ_add1_attr_by_OBJ
+#define X509_REQ_add1_attr_by_txt v1_X509_REQ_add1_attr_by_txt
+#define X509_REQ_add_extensions v1_X509_REQ_add_extensions
+#define X509_REQ_add_extensions_nid v1_X509_REQ_add_extensions_nid
+#define X509_REQ_check_private_key v1_X509_REQ_check_private_key
+#define X509_REQ_delete_attr v1_X509_REQ_delete_attr
+#define X509_REQ_digest v1_X509_REQ_digest
+#define X509_REQ_dup v1_X509_REQ_dup
+#define X509_REQ_extension_nid v1_X509_REQ_extension_nid
+#define X509_REQ_free v1_X509_REQ_free
+#define X509_REQ_get0_pubkey v1_X509_REQ_get0_pubkey
+#define X509_REQ_get0_signature v1_X509_REQ_get0_signature
+#define X509_REQ_get1_email v1_X509_REQ_get1_email
+#define X509_REQ_get_attr v1_X509_REQ_get_attr
+#define X509_REQ_get_attr_by_NID v1_X509_REQ_get_attr_by_NID
+#define X509_REQ_get_attr_by_OBJ v1_X509_REQ_get_attr_by_OBJ
+#define X509_REQ_get_attr_count v1_X509_REQ_get_attr_count
+#define X509_REQ_get_extension_nids v1_X509_REQ_get_extension_nids
+#define X509_REQ_get_extensions v1_X509_REQ_get_extensions
+#define X509_REQ_get_pubkey v1_X509_REQ_get_pubkey
+#define X509_REQ_get_signature_nid v1_X509_REQ_get_signature_nid
+#define X509_REQ_get_subject_name v1_X509_REQ_get_subject_name
+#define X509_REQ_get_version v1_X509_REQ_get_version
+#define X509_REQ_get_X509_PUBKEY v1_X509_REQ_get_X509_PUBKEY
+#define X509_REQ_INFO_free v1_X509_REQ_INFO_free
+#define X509_REQ_INFO_it v1_X509_REQ_INFO_it
+#define X509_REQ_INFO_new v1_X509_REQ_INFO_new
+#define X509_REQ_it v1_X509_REQ_it
+#define X509_REQ_new v1_X509_REQ_new
+#define X509_REQ_print v1_X509_REQ_print
+#define X509_REQ_print_ex v1_X509_REQ_print_ex
+#define X509_REQ_print_fp v1_X509_REQ_print_fp
+#define X509_REQ_set0_signature v1_X509_REQ_set0_signature
+#define X509_REQ_set1_signature_algo v1_X509_REQ_set1_signature_algo
+#define X509_REQ_set_extension_nids v1_X509_REQ_set_extension_nids
+#define X509_REQ_set_pubkey v1_X509_REQ_set_pubkey
+#define X509_REQ_set_subject_name v1_X509_REQ_set_subject_name
+#define X509_REQ_set_version v1_X509_REQ_set_version
+#define X509_REQ_sign v1_X509_REQ_sign
+#define X509_REQ_sign_ctx v1_X509_REQ_sign_ctx
+#define X509_REQ_to_X509 v1_X509_REQ_to_X509
+#define X509_REQ_verify v1_X509_REQ_verify
+#define X509_REVOKED_add1_ext_i2d v1_X509_REVOKED_add1_ext_i2d
+#define X509_REVOKED_add_ext v1_X509_REVOKED_add_ext
+#define X509_REVOKED_delete_ext v1_X509_REVOKED_delete_ext
+#define X509_REVOKED_dup v1_X509_REVOKED_dup
+#define X509_REVOKED_free v1_X509_REVOKED_free
+#define X509_REVOKED_get0_extensions v1_X509_REVOKED_get0_extensions
+#define X509_REVOKED_get0_revocationDate v1_X509_REVOKED_get0_revocationDate
+#define X509_REVOKED_get0_serialNumber v1_X509_REVOKED_get0_serialNumber
+#define X509_REVOKED_get_ext v1_X509_REVOKED_get_ext
+#define X509_REVOKED_get_ext_by_critical v1_X509_REVOKED_get_ext_by_critical
+#define X509_REVOKED_get_ext_by_NID v1_X509_REVOKED_get_ext_by_NID
+#define X509_REVOKED_get_ext_by_OBJ v1_X509_REVOKED_get_ext_by_OBJ
+#define X509_REVOKED_get_ext_count v1_X509_REVOKED_get_ext_count
+#define X509_REVOKED_get_ext_d2i v1_X509_REVOKED_get_ext_d2i
+#define X509_REVOKED_it v1_X509_REVOKED_it
+#define X509_REVOKED_new v1_X509_REVOKED_new
+#define X509_REVOKED_set_revocationDate v1_X509_REVOKED_set_revocationDate
+#define X509_REVOKED_set_serialNumber v1_X509_REVOKED_set_serialNumber
+#define X509_set1_notAfter v1_X509_set1_notAfter
+#define X509_set1_notBefore v1_X509_set1_notBefore
+#define x509_set1_time v1_x509_set1_time
+#define X509_set_ex_data v1_X509_set_ex_data
+#define X509_set_issuer_name v1_X509_set_issuer_name
+#define X509_set_proxy_flag v1_X509_set_proxy_flag
+#define X509_set_proxy_pathlen v1_X509_set_proxy_pathlen
+#define X509_set_pubkey v1_X509_set_pubkey
+#define X509_set_serialNumber v1_X509_set_serialNumber
+#define X509_set_subject_name v1_X509_set_subject_name
+#define X509_set_version v1_X509_set_version
+#define X509_SIG_free v1_X509_SIG_free
+#define X509_SIG_get0 v1_X509_SIG_get0
+#define X509_SIG_getm v1_X509_SIG_getm
+#define X509_SIG_INFO_get v1_X509_SIG_INFO_get
+#define X509_SIG_INFO_set v1_X509_SIG_INFO_set
+#define X509_SIG_it v1_X509_SIG_it
+#define X509_sign v1_X509_sign
+#define X509_signature_dump v1_X509_signature_dump
+#define X509_signature_print v1_X509_signature_print
+#define X509_sign_ctx v1_X509_sign_ctx
+#define X509_SIG_new v1_X509_SIG_new
+#define x509_signing_allowed v1_x509_signing_allowed
+#define X509_STORE_add_cert v1_X509_STORE_add_cert
+#define X509_STORE_add_crl v1_X509_STORE_add_crl
+#define X509_STORE_add_lookup v1_X509_STORE_add_lookup
+#define X509_STORE_CTX_cleanup v1_X509_STORE_CTX_cleanup
+#define X509_STORE_CTX_free v1_X509_STORE_CTX_free
+#define X509_STORE_CTX_get0_cert v1_X509_STORE_CTX_get0_cert
+#define X509_STORE_CTX_get0_chain v1_X509_STORE_CTX_get0_chain
+#define X509_STORE_CTX_get0_current_crl v1_X509_STORE_CTX_get0_current_crl
+#define X509_STORE_CTX_get0_current_issuer v1_X509_STORE_CTX_get0_current_issuer
+#define X509_STORE_CTX_get0_param v1_X509_STORE_CTX_get0_param
+#define X509_STORE_CTX_get0_parent_ctx v1_X509_STORE_CTX_get0_parent_ctx
+#define X509_STORE_CTX_get0_policy_tree v1_X509_STORE_CTX_get0_policy_tree
+#define X509_STORE_CTX_get0_store v1_X509_STORE_CTX_get0_store
+#define X509_STORE_CTX_get0_untrusted v1_X509_STORE_CTX_get0_untrusted
+#define X509_STORE_CTX_get1_certs v1_X509_STORE_CTX_get1_certs
+#define X509_STORE_CTX_get1_chain v1_X509_STORE_CTX_get1_chain
+#define X509_STORE_CTX_get1_crls v1_X509_STORE_CTX_get1_crls
+#define X509_STORE_CTX_get1_issuer v1_X509_STORE_CTX_get1_issuer
+#define X509_STORE_CTX_get_by_subject v1_X509_STORE_CTX_get_by_subject
+#define X509_STORE_CTX_get_cert_crl v1_X509_STORE_CTX_get_cert_crl
+#define X509_STORE_CTX_get_check_crl v1_X509_STORE_CTX_get_check_crl
+#define X509_STORE_CTX_get_check_issued v1_X509_STORE_CTX_get_check_issued
+#define X509_STORE_CTX_get_check_policy v1_X509_STORE_CTX_get_check_policy
+#define X509_STORE_CTX_get_check_revocation v1_X509_STORE_CTX_get_check_revocation
+#define X509_STORE_CTX_get_cleanup v1_X509_STORE_CTX_get_cleanup
+#define X509_STORE_CTX_get_current_cert v1_X509_STORE_CTX_get_current_cert
+#define X509_STORE_CTX_get_error v1_X509_STORE_CTX_get_error
+#define X509_STORE_CTX_get_error_depth v1_X509_STORE_CTX_get_error_depth
+#define X509_STORE_CTX_get_ex_data v1_X509_STORE_CTX_get_ex_data
+#define X509_STORE_CTX_get_explicit_policy v1_X509_STORE_CTX_get_explicit_policy
+#define X509_STORE_CTX_get_get_crl v1_X509_STORE_CTX_get_get_crl
+#define X509_STORE_CTX_get_get_issuer v1_X509_STORE_CTX_get_get_issuer
+#define X509_STORE_CTX_get_lookup_certs v1_X509_STORE_CTX_get_lookup_certs
+#define X509_STORE_CTX_get_lookup_crls v1_X509_STORE_CTX_get_lookup_crls
+#define X509_STORE_CTX_get_num_untrusted v1_X509_STORE_CTX_get_num_untrusted
+#define X509_STORE_CTX_get_obj_by_subject v1_X509_STORE_CTX_get_obj_by_subject
+#define X509_STORE_CTX_get_verify v1_X509_STORE_CTX_get_verify
+#define X509_STORE_CTX_get_verify_cb v1_X509_STORE_CTX_get_verify_cb
+#define X509_STORE_CTX_init v1_X509_STORE_CTX_init
+#define X509_STORE_CTX_new v1_X509_STORE_CTX_new
+#define X509_STORE_CTX_purpose_inherit v1_X509_STORE_CTX_purpose_inherit
+#define X509_STORE_CTX_set0_crls v1_X509_STORE_CTX_set0_crls
+#define X509_STORE_CTX_set0_dane v1_X509_STORE_CTX_set0_dane
+#define X509_STORE_CTX_set0_param v1_X509_STORE_CTX_set0_param
+#define X509_STORE_CTX_set0_trusted_stack v1_X509_STORE_CTX_set0_trusted_stack
+#define X509_STORE_CTX_set0_untrusted v1_X509_STORE_CTX_set0_untrusted
+#define X509_STORE_CTX_set0_verified_chain v1_X509_STORE_CTX_set0_verified_chain
+#define X509_STORE_CTX_set_cert v1_X509_STORE_CTX_set_cert
+#define X509_STORE_CTX_set_current_cert v1_X509_STORE_CTX_set_current_cert
+#define X509_STORE_CTX_set_default v1_X509_STORE_CTX_set_default
+#define X509_STORE_CTX_set_depth v1_X509_STORE_CTX_set_depth
+#define X509_STORE_CTX_set_error v1_X509_STORE_CTX_set_error
+#define X509_STORE_CTX_set_error_depth v1_X509_STORE_CTX_set_error_depth
+#define X509_STORE_CTX_set_ex_data v1_X509_STORE_CTX_set_ex_data
+#define X509_STORE_CTX_set_flags v1_X509_STORE_CTX_set_flags
+#define X509_STORE_CTX_set_purpose v1_X509_STORE_CTX_set_purpose
+#define X509_STORE_CTX_set_time v1_X509_STORE_CTX_set_time
+#define X509_STORE_CTX_set_trust v1_X509_STORE_CTX_set_trust
+#define X509_STORE_CTX_set_verify v1_X509_STORE_CTX_set_verify
+#define X509_STORE_CTX_set_verify_cb v1_X509_STORE_CTX_set_verify_cb
+#define X509_STORE_free v1_X509_STORE_free
+#define X509_STORE_get0_objects v1_X509_STORE_get0_objects
+#define X509_STORE_get0_param v1_X509_STORE_get0_param
+#define X509_STORE_get_cert_crl v1_X509_STORE_get_cert_crl
+#define X509_STORE_get_check_crl v1_X509_STORE_get_check_crl
+#define X509_STORE_get_check_issued v1_X509_STORE_get_check_issued
+#define X509_STORE_get_check_policy v1_X509_STORE_get_check_policy
+#define X509_STORE_get_check_revocation v1_X509_STORE_get_check_revocation
+#define X509_STORE_get_cleanup v1_X509_STORE_get_cleanup
+#define X509_STORE_get_ex_data v1_X509_STORE_get_ex_data
+#define X509_STORE_get_get_crl v1_X509_STORE_get_get_crl
+#define X509_STORE_get_get_issuer v1_X509_STORE_get_get_issuer
+#define X509_STORE_get_lookup_certs v1_X509_STORE_get_lookup_certs
+#define X509_STORE_get_lookup_crls v1_X509_STORE_get_lookup_crls
+#define X509_STORE_get_verify v1_X509_STORE_get_verify
+#define X509_STORE_get_verify_cb v1_X509_STORE_get_verify_cb
+#define X509_STORE_load_locations v1_X509_STORE_load_locations
+#define X509_STORE_lock v1_X509_STORE_lock
+#define X509_STORE_new v1_X509_STORE_new
+#define X509_STORE_set1_param v1_X509_STORE_set1_param
+#define X509_STORE_set_cert_crl v1_X509_STORE_set_cert_crl
+#define X509_STORE_set_check_crl v1_X509_STORE_set_check_crl
+#define X509_STORE_set_check_issued v1_X509_STORE_set_check_issued
+#define X509_STORE_set_check_policy v1_X509_STORE_set_check_policy
+#define X509_STORE_set_check_revocation v1_X509_STORE_set_check_revocation
+#define X509_STORE_set_cleanup v1_X509_STORE_set_cleanup
+#define X509_STORE_set_default_paths v1_X509_STORE_set_default_paths
+#define X509_STORE_set_depth v1_X509_STORE_set_depth
+#define X509_STORE_set_ex_data v1_X509_STORE_set_ex_data
+#define X509_STORE_set_flags v1_X509_STORE_set_flags
+#define X509_STORE_set_get_crl v1_X509_STORE_set_get_crl
+#define X509_STORE_set_get_issuer v1_X509_STORE_set_get_issuer
+#define X509_STORE_set_lookup_certs v1_X509_STORE_set_lookup_certs
+#define X509_STORE_set_lookup_crls v1_X509_STORE_set_lookup_crls
+#define X509_STORE_set_purpose v1_X509_STORE_set_purpose
+#define X509_STORE_set_trust v1_X509_STORE_set_trust
+#define X509_STORE_set_verify v1_X509_STORE_set_verify
+#define X509_STORE_set_verify_cb v1_X509_STORE_set_verify_cb
+#define X509_STORE_unlock v1_X509_STORE_unlock
+#define X509_STORE_up_ref v1_X509_STORE_up_ref
+#define X509_subject_name_cmp v1_X509_subject_name_cmp
+#define X509_subject_name_hash v1_X509_subject_name_hash
+#define X509_subject_name_hash_old v1_X509_subject_name_hash_old
+#define X509_supported_extension v1_X509_supported_extension
+#define X509_time_adj v1_X509_time_adj
+#define X509_time_adj_ex v1_X509_time_adj_ex
+#define X509_to_X509_REQ v1_X509_to_X509_REQ
+#define X509_TRUST_add v1_X509_TRUST_add
+#define X509_TRUST_cleanup v1_X509_TRUST_cleanup
+#define X509_trust_clear v1_X509_trust_clear
+#define X509_trusted v1_X509_trusted
+#define X509_TRUST_get0 v1_X509_TRUST_get0
+#define X509_TRUST_get0_name v1_X509_TRUST_get0_name
+#define X509_TRUST_get_by_id v1_X509_TRUST_get_by_id
+#define X509_TRUST_get_count v1_X509_TRUST_get_count
+#define X509_TRUST_get_flags v1_X509_TRUST_get_flags
+#define X509_TRUST_get_trust v1_X509_TRUST_get_trust
+#define X509_TRUST_set v1_X509_TRUST_set
+#define X509_TRUST_set_default v1_X509_TRUST_set_default
+#define X509_up_ref v1_X509_up_ref
+#define X509V3_add1_i2d v1_X509V3_add1_i2d
+#define X509v3_add_ext v1_X509v3_add_ext
+#define x509v3_add_len_value_uchar v1_x509v3_add_len_value_uchar
+#define X509v3_addr_add_inherit v1_X509v3_addr_add_inherit
+#define X509v3_addr_add_prefix v1_X509v3_addr_add_prefix
+#define X509v3_addr_add_range v1_X509v3_addr_add_range
+#define X509v3_addr_canonize v1_X509v3_addr_canonize
+#define X509v3_addr_get_afi v1_X509v3_addr_get_afi
+#define X509v3_addr_get_range v1_X509v3_addr_get_range
+#define X509v3_addr_inherits v1_X509v3_addr_inherits
+#define X509v3_addr_is_canonical v1_X509v3_addr_is_canonical
+#define X509v3_addr_subset v1_X509v3_addr_subset
+#define X509v3_addr_validate_path v1_X509v3_addr_validate_path
+#define X509v3_addr_validate_resource_set v1_X509v3_addr_validate_resource_set
+#define X509V3_add_standard_extensions v1_X509V3_add_standard_extensions
+#define X509V3_add_value v1_X509V3_add_value
+#define X509V3_add_value_bool v1_X509V3_add_value_bool
+#define X509V3_add_value_bool_nf v1_X509V3_add_value_bool_nf
+#define X509V3_add_value_int v1_X509V3_add_value_int
+#define X509V3_add_value_uchar v1_X509V3_add_value_uchar
+#define X509v3_asid_add_id_or_range v1_X509v3_asid_add_id_or_range
+#define X509v3_asid_add_inherit v1_X509v3_asid_add_inherit
+#define X509v3_asid_canonize v1_X509v3_asid_canonize
+#define X509v3_asid_inherits v1_X509v3_asid_inherits
+#define X509v3_asid_is_canonical v1_X509v3_asid_is_canonical
+#define X509v3_asid_subset v1_X509v3_asid_subset
+#define X509v3_asid_validate_path v1_X509v3_asid_validate_path
+#define X509v3_asid_validate_resource_set v1_X509v3_asid_validate_resource_set
+#define X509V3_conf_free v1_X509V3_conf_free
+#define X509v3_delete_ext v1_X509v3_delete_ext
+#define X509V3_EXT_add v1_X509V3_EXT_add
+#define X509V3_EXT_add_alias v1_X509V3_EXT_add_alias
+#define X509V3_EXT_add_conf v1_X509V3_EXT_add_conf
+#define X509V3_EXT_add_list v1_X509V3_EXT_add_list
+#define X509V3_EXT_add_nconf v1_X509V3_EXT_add_nconf
+#define X509V3_EXT_add_nconf_sk v1_X509V3_EXT_add_nconf_sk
+#define X509V3_EXT_cleanup v1_X509V3_EXT_cleanup
+#define X509V3_EXT_conf v1_X509V3_EXT_conf
+#define X509V3_EXT_conf_nid v1_X509V3_EXT_conf_nid
+#define X509V3_EXT_CRL_add_conf v1_X509V3_EXT_CRL_add_conf
+#define X509V3_EXT_CRL_add_nconf v1_X509V3_EXT_CRL_add_nconf
+#define X509V3_EXT_d2i v1_X509V3_EXT_d2i
+#define X509V3_extensions_print v1_X509V3_extensions_print
+#define X509V3_EXT_get v1_X509V3_EXT_get
+#define X509V3_EXT_get_nid v1_X509V3_EXT_get_nid
+#define X509V3_EXT_i2d v1_X509V3_EXT_i2d
+#define X509V3_EXT_nconf v1_X509V3_EXT_nconf
+#define X509V3_EXT_nconf_nid v1_X509V3_EXT_nconf_nid
+#define X509V3_EXT_print v1_X509V3_EXT_print
+#define X509V3_EXT_print_fp v1_X509V3_EXT_print_fp
+#define X509V3_EXT_REQ_add_conf v1_X509V3_EXT_REQ_add_conf
+#define X509V3_EXT_REQ_add_nconf v1_X509V3_EXT_REQ_add_nconf
+#define X509V3_EXT_val_prn v1_X509V3_EXT_val_prn
+#define X509V3_get_d2i v1_X509V3_get_d2i
+#define X509v3_get_ext v1_X509v3_get_ext
+#define X509v3_get_ext_by_critical v1_X509v3_get_ext_by_critical
+#define X509v3_get_ext_by_NID v1_X509v3_get_ext_by_NID
+#define X509v3_get_ext_by_OBJ v1_X509v3_get_ext_by_OBJ
+#define X509v3_get_ext_count v1_X509v3_get_ext_count
+#define X509V3_get_section v1_X509V3_get_section
+#define X509V3_get_string v1_X509V3_get_string
+#define X509V3_get_value_bool v1_X509V3_get_value_bool
+#define X509V3_get_value_int v1_X509V3_get_value_int
+#define X509V3_NAME_from_section v1_X509V3_NAME_from_section
+#define X509V3_parse_list v1_X509V3_parse_list
+#define X509V3_section_free v1_X509V3_section_free
+#define X509V3_set_conf_lhash v1_X509V3_set_conf_lhash
+#define X509V3_set_ctx v1_X509V3_set_ctx
+#define X509V3_set_nconf v1_X509V3_set_nconf
+#define X509V3_string_free v1_X509V3_string_free
+#define X509_VAL_free v1_X509_VAL_free
+#define X509_VAL_it v1_X509_VAL_it
+#define X509_VAL_new v1_X509_VAL_new
+#define X509_verify v1_X509_verify
+#define X509_verify_cert v1_X509_verify_cert
+#define X509_verify_cert_error_string v1_X509_verify_cert_error_string
+#define X509_VERIFY_PARAM_add0_policy v1_X509_VERIFY_PARAM_add0_policy
+#define X509_VERIFY_PARAM_add0_table v1_X509_VERIFY_PARAM_add0_table
+#define X509_VERIFY_PARAM_add1_host v1_X509_VERIFY_PARAM_add1_host
+#define X509_VERIFY_PARAM_clear_flags v1_X509_VERIFY_PARAM_clear_flags
+#define X509_VERIFY_PARAM_free v1_X509_VERIFY_PARAM_free
+#define X509_VERIFY_PARAM_get0 v1_X509_VERIFY_PARAM_get0
+#define X509_VERIFY_PARAM_get0_name v1_X509_VERIFY_PARAM_get0_name
+#define X509_VERIFY_PARAM_get0_peername v1_X509_VERIFY_PARAM_get0_peername
+#define X509_VERIFY_PARAM_get_auth_level v1_X509_VERIFY_PARAM_get_auth_level
+#define X509_VERIFY_PARAM_get_count v1_X509_VERIFY_PARAM_get_count
+#define X509_VERIFY_PARAM_get_depth v1_X509_VERIFY_PARAM_get_depth
+#define X509_VERIFY_PARAM_get_flags v1_X509_VERIFY_PARAM_get_flags
+#define X509_VERIFY_PARAM_get_hostflags v1_X509_VERIFY_PARAM_get_hostflags
+#define X509_VERIFY_PARAM_get_inh_flags v1_X509_VERIFY_PARAM_get_inh_flags
+#define X509_VERIFY_PARAM_get_time v1_X509_VERIFY_PARAM_get_time
+#define X509_VERIFY_PARAM_inherit v1_X509_VERIFY_PARAM_inherit
+#define X509_VERIFY_PARAM_lookup v1_X509_VERIFY_PARAM_lookup
+#define X509_VERIFY_PARAM_move_peername v1_X509_VERIFY_PARAM_move_peername
+#define X509_VERIFY_PARAM_new v1_X509_VERIFY_PARAM_new
+#define X509_VERIFY_PARAM_set1 v1_X509_VERIFY_PARAM_set1
+#define X509_VERIFY_PARAM_set1_email v1_X509_VERIFY_PARAM_set1_email
+#define X509_VERIFY_PARAM_set1_host v1_X509_VERIFY_PARAM_set1_host
+#define X509_VERIFY_PARAM_set1_ip v1_X509_VERIFY_PARAM_set1_ip
+#define X509_VERIFY_PARAM_set1_ip_asc v1_X509_VERIFY_PARAM_set1_ip_asc
+#define X509_VERIFY_PARAM_set1_name v1_X509_VERIFY_PARAM_set1_name
+#define X509_VERIFY_PARAM_set1_policies v1_X509_VERIFY_PARAM_set1_policies
+#define X509_VERIFY_PARAM_set_auth_level v1_X509_VERIFY_PARAM_set_auth_level
+#define X509_VERIFY_PARAM_set_depth v1_X509_VERIFY_PARAM_set_depth
+#define X509_VERIFY_PARAM_set_flags v1_X509_VERIFY_PARAM_set_flags
+#define X509_VERIFY_PARAM_set_hostflags v1_X509_VERIFY_PARAM_set_hostflags
+#define X509_VERIFY_PARAM_set_inh_flags v1_X509_VERIFY_PARAM_set_inh_flags
+#define X509_VERIFY_PARAM_set_purpose v1_X509_VERIFY_PARAM_set_purpose
+#define X509_VERIFY_PARAM_set_time v1_X509_VERIFY_PARAM_set_time
+#define X509_VERIFY_PARAM_set_trust v1_X509_VERIFY_PARAM_set_trust
+#define X509_VERIFY_PARAM_table_cleanup v1_X509_VERIFY_PARAM_table_cleanup
+#define X9_62_CHARACTERISTIC_TWO_free v1_X9_62_CHARACTERISTIC_TWO_free
+#define X9_62_CHARACTERISTIC_TWO_new v1_X9_62_CHARACTERISTIC_TWO_new
+#define X9_62_PENTANOMIAL_free v1_X9_62_PENTANOMIAL_free
+#define X9_62_PENTANOMIAL_new v1_X9_62_PENTANOMIAL_new
+#define xor128_decrypt_n_pad v1_xor128_decrypt_n_pad
+#define xor128_encrypt_n_pad v1_xor128_encrypt_n_pad
+#define ZINT32_it v1_ZINT32_it
+#define ZINT64_it v1_ZINT64_it
+#define ZLONG_it v1_ZLONG_it
+#define ZUINT32_it v1_ZUINT32_it
+#define ZUINT64_it v1_ZUINT64_it
+#endif
diff --git a/contrib/libs/openssl/ya.make b/contrib/libs/openssl/ya.make
index 67c4f080f9d..efa215f3baa 100644
--- a/contrib/libs/openssl/ya.make
+++ b/contrib/libs/openssl/ya.make
@@ -37,14 +37,17 @@ LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
PROVIDES(openssl)
-PEERDIR(
- contrib/libs/openssl/crypto
-)
+NO_LTO()
+
+SRCDIR(contrib/libs/openssl/crypto)
+INCLUDE(crypto/ya.make.inc)
ADDINCL(
contrib/libs/openssl
)
+CFLAGS(-DOPENSSL_BUILD=1)
+
IF (NOT EXPORT_CMAKE OR NOT OPENSOURCE_REPLACE_OPENSSL)
IF (OS_LINUX)
@@ -236,7 +239,7 @@ SRCS(
ssl/tls_srp.c
)
-IF (NOT IOS_ARMV7 AND NOT LINUX_ARMV7)
+IF (NOT IOS_ARMV7 AND NOT LINUX_ARMV7 AND NOT ANDROID_ARMV7)
CFLAGS(
-DVPAES_ASM
)
diff --git a/contrib/python/executing/.dist-info/METADATA b/contrib/python/executing/.dist-info/METADATA
index 45ff9aa8813..6e4ac6516d3 100644
--- a/contrib/python/executing/.dist-info/METADATA
+++ b/contrib/python/executing/.dist-info/METADATA
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: executing
-Version: 2.1.0
+Version: 2.2.0
Summary: Get the currently executing AST node of a frame, and other information
Home-page: https://github.com/alexmojaki/executing
Author: Alex Hall
@@ -42,7 +42,7 @@ This mini-package lets you get information about what a frame is currently doing
* [How does it work?](#how-does-it-work)
* [Is it reliable?](#is-it-reliable)
* [Which nodes can it identify?](#which-nodes-can-it-identify)
-* [Libraries that use this](#libraries-that-use-this)
+* [Projects that use this](#projects-that-use-this)
## Usage
diff --git a/contrib/python/executing/README.md b/contrib/python/executing/README.md
index 1b4dbd8f074..61943dd7f54 100644
--- a/contrib/python/executing/README.md
+++ b/contrib/python/executing/README.md
@@ -13,7 +13,7 @@ This mini-package lets you get information about what a frame is currently doing
* [How does it work?](#how-does-it-work)
* [Is it reliable?](#is-it-reliable)
* [Which nodes can it identify?](#which-nodes-can-it-identify)
-* [Libraries that use this](#libraries-that-use-this)
+* [Projects that use this](#projects-that-use-this)
## Usage
diff --git a/contrib/python/executing/executing/__init__.py b/contrib/python/executing/executing/__init__.py
index b6451973917..e5181a5c326 100644
--- a/contrib/python/executing/executing/__init__.py
+++ b/contrib/python/executing/executing/__init__.py
@@ -10,6 +10,9 @@ Get information about what a frame is currently doing. Typical usage:
from collections import namedtuple
_VersionInfo = namedtuple('_VersionInfo', ('major', 'minor', 'micro'))
from .executing import Source, Executing, only, NotOneValueFound, cache, future_flags
+
+from ._pytest_utils import is_pytest_compatible
+
try:
from .version import __version__ # type: ignore[import]
if "dev" in __version__:
@@ -22,4 +25,4 @@ else:
__version_info__ = _VersionInfo(*map(int, __version__.split('.')))
-__all__ = ["Source"]
+__all__ = ["Source","is_pytest_compatible"]
diff --git a/contrib/python/executing/executing/_position_node_finder.py b/contrib/python/executing/executing/_position_node_finder.py
index 7a814150da6..0f8344106f2 100644
--- a/contrib/python/executing/executing/_position_node_finder.py
+++ b/contrib/python/executing/executing/_position_node_finder.py
@@ -242,6 +242,66 @@ class PositionNodeFinder(object):
# keeping the old behaviour makes it possible to distinguish both cases.
return node.parent
+
+ if (
+ sys.version_info >= (3, 12, 6)
+ and instruction.opname in ("GET_ITER", "FOR_ITER")
+ and isinstance(
+ node.parent.parent,
+ (ast.ListComp, ast.SetComp, ast.DictComp, ast.GeneratorExp),
+ )
+ and isinstance(node.parent,ast.comprehension)
+ and node is node.parent.iter
+ ):
+ # same as above but only for comprehensions, see:
+ # https://github.com/python/cpython/issues/123142
+
+ return node.parent.parent
+
+ if sys.version_info >= (3, 12,6) and instruction.opname == "CALL":
+ before = self.instruction_before(instruction)
+ if (
+ before is not None
+ and before.opname == "LOAD_CONST"
+ and before.positions == instruction.positions
+ and isinstance(node.parent, ast.withitem)
+ and node is node.parent.context_expr
+ ):
+ # node positions for with-statements have change
+ # and is now equal to the expression which created the context-manager
+ # https://github.com/python/cpython/pull/120763
+
+ # with context_manager:
+ # ...
+
+ # but there is one problem to distinguish call-expressions from __exit__()
+
+ # with context_manager():
+ # ...
+
+ # the call for __exit__
+
+ # 20 1:5 1:22 LOAD_CONST(None)
+ # 22 1:5 1:22 LOAD_CONST(None)
+ # 24 1:5 1:22 LOAD_CONST(None)
+ # 26 1:5 1:22 CALL() # <-- same source range as context_manager()
+
+ # but we can use the fact that the previous load for None
+ # has the same source range as the call, wich can not happen for normal calls
+
+ # we return the same ast.With statement at the and to preserve backward compatibility
+
+ return node.parent.parent
+
+ if (
+ sys.version_info >= (3, 12,6)
+ and instruction.opname == "BEFORE_WITH"
+ and isinstance(node.parent, ast.withitem)
+ and node is node.parent.context_expr
+ ):
+ # handle positions changes for __enter__
+ return node.parent.parent
+
return node
def known_issues(self, node: EnhancedAST, instruction: dis.Instruction) -> None:
@@ -880,6 +940,11 @@ class PositionNodeFinder(object):
def instruction(self, index: int) -> Optional[dis.Instruction]:
return self.bc_dict.get(index,None)
+ def instruction_before(
+ self, instruction: dis.Instruction
+ ) -> Optional[dis.Instruction]:
+ return self.bc_dict.get(instruction.offset - 2, None)
+
def opname(self, index: int) -> str:
i=self.instruction(index)
if i is None:
diff --git a/contrib/python/executing/executing/_pytest_utils.py b/contrib/python/executing/executing/_pytest_utils.py
new file mode 100644
index 00000000000..fab8693baf2
--- /dev/null
+++ b/contrib/python/executing/executing/_pytest_utils.py
@@ -0,0 +1,16 @@
+import sys
+
+
+
+def is_pytest_compatible() -> bool:
+ """ returns true if executing can be used for expressions inside assert statements which are rewritten by pytest
+ """
+ if sys.version_info < (3, 11):
+ return False
+
+ try:
+ import pytest
+ except ImportError:
+ return False
+
+ return pytest.version_tuple >= (8, 3, 4)
diff --git a/contrib/python/executing/executing/version.py b/contrib/python/executing/executing/version.py
index b15121b0fec..e212710ff7b 100644
--- a/contrib/python/executing/executing/version.py
+++ b/contrib/python/executing/executing/version.py
@@ -1 +1 @@
-__version__ = '2.1.0' \ No newline at end of file
+__version__ = '2.2.0' \ No newline at end of file
diff --git a/contrib/python/executing/ya.make b/contrib/python/executing/ya.make
index b437b26981c..32d111cc478 100644
--- a/contrib/python/executing/ya.make
+++ b/contrib/python/executing/ya.make
@@ -2,7 +2,7 @@
PY3_LIBRARY()
-VERSION(2.1.0)
+VERSION(2.2.0)
LICENSE(MIT)
@@ -13,6 +13,7 @@ PY_SRCS(
executing/__init__.py
executing/_exceptions.py
executing/_position_node_finder.py
+ executing/_pytest_utils.py
executing/executing.py
executing/version.py
)
diff --git a/contrib/python/packaging/py3/.dist-info/METADATA b/contrib/python/packaging/py3/.dist-info/METADATA
index 358ace53624..1479c8694bf 100644
--- a/contrib/python/packaging/py3/.dist-info/METADATA
+++ b/contrib/python/packaging/py3/.dist-info/METADATA
@@ -1,12 +1,10 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.3
Name: packaging
-Version: 21.3
+Version: 24.2
Summary: Core utilities for Python packages
-Home-page: https://github.com/pypa/packaging
-Author: Donald Stufft and individual contributors
-Author-email: donald@stufft.io
-License: BSD-2-Clause or Apache-2.0
-Platform: UNKNOWN
+Author-email: Donald Stufft <donald@stufft.io>
+Requires-Python: >=3.8
+Description-Content-Type: text/x-rst
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
@@ -14,19 +12,17 @@ Classifier: License :: OSI Approved :: BSD License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
-Classifier: Programming Language :: Python :: 3.6
-Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
+Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
-Requires-Python: >=3.6
-Description-Content-Type: text/x-rst
-License-File: LICENSE
-License-File: LICENSE.APACHE
-License-File: LICENSE.BSD
-Requires-Dist: pyparsing (!=3.0.5,>=2.0.2)
+Classifier: Typing :: Typed
+Project-URL: Documentation, https://packaging.pypa.io/
+Project-URL: Source, https://github.com/pypa/packaging
packaging
=========
@@ -64,6 +60,8 @@ Use ``pip`` to install these utilities::
pip install packaging
+The ``packaging`` library uses calendar-based versioning (``YY.N``).
+
Discussion
----------
@@ -102,352 +100,3 @@ recent changes and project history.
.. _`Changelog documentation`: https://packaging.pypa.io/en/latest/changelog/
-Changelog
----------
-
-21.3 - 2021-11-17
-~~~~~~~~~~~~~~~~~
-
-* Add a ``pp3-none-any`` tag (`#311 <https://github.com/pypa/packaging/issues/311>`__)
-* Replace the blank pyparsing 3 exclusion with a 3.0.5 exclusion (`#481 <https://github.com/pypa/packaging/issues/481>`__, `#486 <https://github.com/pypa/packaging/issues/486>`__)
-* Fix a spelling mistake (`#479 <https://github.com/pypa/packaging/issues/479>`__)
-
-21.2 - 2021-10-29
-~~~~~~~~~~~~~~~~~
-
-* Update documentation entry for 21.1.
-
-21.1 - 2021-10-29
-~~~~~~~~~~~~~~~~~
-
-* Update pin to pyparsing to exclude 3.0.0.
-
-21.0 - 2021-07-03
-~~~~~~~~~~~~~~~~~
-
-* PEP 656: musllinux support (`#411 <https://github.com/pypa/packaging/issues/411>`__)
-* Drop support for Python 2.7, Python 3.4 and Python 3.5.
-* Replace distutils usage with sysconfig (`#396 <https://github.com/pypa/packaging/issues/396>`__)
-* Add support for zip files in ``parse_sdist_filename`` (`#429 <https://github.com/pypa/packaging/issues/429>`__)
-* Use cached ``_hash`` attribute to short-circuit tag equality comparisons (`#417 <https://github.com/pypa/packaging/issues/417>`__)
-* Specify the default value for the ``specifier`` argument to ``SpecifierSet`` (`#437 <https://github.com/pypa/packaging/issues/437>`__)
-* Proper keyword-only "warn" argument in packaging.tags (`#403 <https://github.com/pypa/packaging/issues/403>`__)
-* Correctly remove prerelease suffixes from ~= check (`#366 <https://github.com/pypa/packaging/issues/366>`__)
-* Fix type hints for ``Version.post`` and ``Version.dev`` (`#393 <https://github.com/pypa/packaging/issues/393>`__)
-* Use typing alias ``UnparsedVersion`` (`#398 <https://github.com/pypa/packaging/issues/398>`__)
-* Improve type inference for ``packaging.specifiers.filter()`` (`#430 <https://github.com/pypa/packaging/issues/430>`__)
-* Tighten the return type of ``canonicalize_version()`` (`#402 <https://github.com/pypa/packaging/issues/402>`__)
-
-20.9 - 2021-01-29
-~~~~~~~~~~~~~~~~~
-
-* Run `isort <https://pypi.org/project/isort/>`_ over the code base (`#377 <https://github.com/pypa/packaging/issues/377>`__)
-* Add support for the ``macosx_10_*_universal2`` platform tags (`#379 <https://github.com/pypa/packaging/issues/379>`__)
-* Introduce ``packaging.utils.parse_wheel_filename()`` and ``parse_sdist_filename()``
- (`#387 <https://github.com/pypa/packaging/issues/387>`__ and `#389 <https://github.com/pypa/packaging/issues/389>`__)
-
-20.8 - 2020-12-11
-~~~~~~~~~~~~~~~~~
-
-* Revert back to setuptools for compatibility purposes for some Linux distros (`#363 <https://github.com/pypa/packaging/issues/363>`__)
-* Do not insert an underscore in wheel tags when the interpreter version number
- is more than 2 digits (`#372 <https://github.com/pypa/packaging/issues/372>`__)
-
-20.7 - 2020-11-28
-~~~~~~~~~~~~~~~~~
-
-No unreleased changes.
-
-20.6 - 2020-11-28
-~~~~~~~~~~~~~~~~~
-
-.. note:: This release was subsequently yanked, and these changes were included in 20.7.
-
-* Fix flit configuration, to include LICENSE files (`#357 <https://github.com/pypa/packaging/issues/357>`__)
-* Make `intel` a recognized CPU architecture for the `universal` macOS platform tag (`#361 <https://github.com/pypa/packaging/issues/361>`__)
-* Add some missing type hints to `packaging.requirements` (issue:`350`)
-
-20.5 - 2020-11-27
-~~~~~~~~~~~~~~~~~
-
-* Officially support Python 3.9 (`#343 <https://github.com/pypa/packaging/issues/343>`__)
-* Deprecate the ``LegacyVersion`` and ``LegacySpecifier`` classes (`#321 <https://github.com/pypa/packaging/issues/321>`__)
-* Handle ``OSError`` on non-dynamic executables when attempting to resolve
- the glibc version string.
-
-20.4 - 2020-05-19
-~~~~~~~~~~~~~~~~~
-
-* Canonicalize version before comparing specifiers. (`#282 <https://github.com/pypa/packaging/issues/282>`__)
-* Change type hint for ``canonicalize_name`` to return
- ``packaging.utils.NormalizedName``.
- This enables the use of static typing tools (like mypy) to detect mixing of
- normalized and un-normalized names.
-
-20.3 - 2020-03-05
-~~~~~~~~~~~~~~~~~
-
-* Fix changelog for 20.2.
-
-20.2 - 2020-03-05
-~~~~~~~~~~~~~~~~~
-
-* Fix a bug that caused a 32-bit OS that runs on a 64-bit ARM CPU (e.g. ARM-v8,
- aarch64), to report the wrong bitness.
-
-20.1 - 2020-01-24
-~~~~~~~~~~~~~~~~~~~
-
-* Fix a bug caused by reuse of an exhausted iterator. (`#257 <https://github.com/pypa/packaging/issues/257>`__)
-
-20.0 - 2020-01-06
-~~~~~~~~~~~~~~~~~
-
-* Add type hints (`#191 <https://github.com/pypa/packaging/issues/191>`__)
-
-* Add proper trove classifiers for PyPy support (`#198 <https://github.com/pypa/packaging/issues/198>`__)
-
-* Scale back depending on ``ctypes`` for manylinux support detection (`#171 <https://github.com/pypa/packaging/issues/171>`__)
-
-* Use ``sys.implementation.name`` where appropriate for ``packaging.tags`` (`#193 <https://github.com/pypa/packaging/issues/193>`__)
-
-* Expand upon the API provided by ``packaging.tags``: ``interpreter_name()``, ``mac_platforms()``, ``compatible_tags()``, ``cpython_tags()``, ``generic_tags()`` (`#187 <https://github.com/pypa/packaging/issues/187>`__)
-
-* Officially support Python 3.8 (`#232 <https://github.com/pypa/packaging/issues/232>`__)
-
-* Add ``major``, ``minor``, and ``micro`` aliases to ``packaging.version.Version`` (`#226 <https://github.com/pypa/packaging/issues/226>`__)
-
-* Properly mark ``packaging`` has being fully typed by adding a `py.typed` file (`#226 <https://github.com/pypa/packaging/issues/226>`__)
-
-19.2 - 2019-09-18
-~~~~~~~~~~~~~~~~~
-
-* Remove dependency on ``attrs`` (`#178 <https://github.com/pypa/packaging/issues/178>`__, `#179 <https://github.com/pypa/packaging/issues/179>`__)
-
-* Use appropriate fallbacks for CPython ABI tag (`#181 <https://github.com/pypa/packaging/issues/181>`__, `#185 <https://github.com/pypa/packaging/issues/185>`__)
-
-* Add manylinux2014 support (`#186 <https://github.com/pypa/packaging/issues/186>`__)
-
-* Improve ABI detection (`#181 <https://github.com/pypa/packaging/issues/181>`__)
-
-* Properly handle debug wheels for Python 3.8 (`#172 <https://github.com/pypa/packaging/issues/172>`__)
-
-* Improve detection of debug builds on Windows (`#194 <https://github.com/pypa/packaging/issues/194>`__)
-
-19.1 - 2019-07-30
-~~~~~~~~~~~~~~~~~
-
-* Add the ``packaging.tags`` module. (`#156 <https://github.com/pypa/packaging/issues/156>`__)
-
-* Correctly handle two-digit versions in ``python_version`` (`#119 <https://github.com/pypa/packaging/issues/119>`__)
-
-
-19.0 - 2019-01-20
-~~~~~~~~~~~~~~~~~
-
-* Fix string representation of PEP 508 direct URL requirements with markers.
-
-* Better handling of file URLs
-
- This allows for using ``file:///absolute/path``, which was previously
- prevented due to the missing ``netloc``.
-
- This allows for all file URLs that ``urlunparse`` turns back into the
- original URL to be valid.
-
-
-18.0 - 2018-09-26
-~~~~~~~~~~~~~~~~~
-
-* Improve error messages when invalid requirements are given. (`#129 <https://github.com/pypa/packaging/issues/129>`__)
-
-
-17.1 - 2017-02-28
-~~~~~~~~~~~~~~~~~
-
-* Fix ``utils.canonicalize_version`` when supplying non PEP 440 versions.
-
-
-17.0 - 2017-02-28
-~~~~~~~~~~~~~~~~~
-
-* Drop support for python 2.6, 3.2, and 3.3.
-
-* Define minimal pyparsing version to 2.0.2 (`#91 <https://github.com/pypa/packaging/issues/91>`__).
-
-* Add ``epoch``, ``release``, ``pre``, ``dev``, and ``post`` attributes to
- ``Version`` and ``LegacyVersion`` (`#34 <https://github.com/pypa/packaging/issues/34>`__).
-
-* Add ``Version().is_devrelease`` and ``LegacyVersion().is_devrelease`` to
- make it easy to determine if a release is a development release.
-
-* Add ``utils.canonicalize_version`` to canonicalize version strings or
- ``Version`` instances (`#121 <https://github.com/pypa/packaging/issues/121>`__).
-
-
-16.8 - 2016-10-29
-~~~~~~~~~~~~~~~~~
-
-* Fix markers that utilize ``in`` so that they render correctly.
-
-* Fix an erroneous test on Python RC releases.
-
-
-16.7 - 2016-04-23
-~~~~~~~~~~~~~~~~~
-
-* Add support for the deprecated ``python_implementation`` marker which was
- an undocumented setuptools marker in addition to the newer markers.
-
-
-16.6 - 2016-03-29
-~~~~~~~~~~~~~~~~~
-
-* Add support for the deprecated, PEP 345 environment markers in addition to
- the newer markers.
-
-
-16.5 - 2016-02-26
-~~~~~~~~~~~~~~~~~
-
-* Fix a regression in parsing requirements with whitespaces between the comma
- separators.
-
-
-16.4 - 2016-02-22
-~~~~~~~~~~~~~~~~~
-
-* Fix a regression in parsing requirements like ``foo (==4)``.
-
-
-16.3 - 2016-02-21
-~~~~~~~~~~~~~~~~~
-
-* Fix a bug where ``packaging.requirements:Requirement`` was overly strict when
- matching legacy requirements.
-
-
-16.2 - 2016-02-09
-~~~~~~~~~~~~~~~~~
-
-* Add a function that implements the name canonicalization from PEP 503.
-
-
-16.1 - 2016-02-07
-~~~~~~~~~~~~~~~~~
-
-* Implement requirement specifiers from PEP 508.
-
-
-16.0 - 2016-01-19
-~~~~~~~~~~~~~~~~~
-
-* Relicense so that packaging is available under *either* the Apache License,
- Version 2.0 or a 2 Clause BSD license.
-
-* Support installation of packaging when only distutils is available.
-
-* Fix ``==`` comparison when there is a prefix and a local version in play.
- (`#41 <https://github.com/pypa/packaging/issues/41>`__).
-
-* Implement environment markers from PEP 508.
-
-
-15.3 - 2015-08-01
-~~~~~~~~~~~~~~~~~
-
-* Normalize post-release spellings for rev/r prefixes. `#35 <https://github.com/pypa/packaging/issues/35>`__
-
-
-15.2 - 2015-05-13
-~~~~~~~~~~~~~~~~~
-
-* Fix an error where the arbitrary specifier (``===``) was not correctly
- allowing pre-releases when it was being used.
-
-* Expose the specifier and version parts through properties on the
- ``Specifier`` classes.
-
-* Allow iterating over the ``SpecifierSet`` to get access to all of the
- ``Specifier`` instances.
-
-* Allow testing if a version is contained within a specifier via the ``in``
- operator.
-
-
-15.1 - 2015-04-13
-~~~~~~~~~~~~~~~~~
-
-* Fix a logic error that was causing inconsistent answers about whether or not
- a pre-release was contained within a ``SpecifierSet`` or not.
-
-
-15.0 - 2015-01-02
-~~~~~~~~~~~~~~~~~
-
-* Add ``Version().is_postrelease`` and ``LegacyVersion().is_postrelease`` to
- make it easy to determine if a release is a post release.
-
-* Add ``Version().base_version`` and ``LegacyVersion().base_version`` to make
- it easy to get the public version without any pre or post release markers.
-
-* Support the update to PEP 440 which removed the implied ``!=V.*`` when using
- either ``>V`` or ``<V`` and which instead special cased the handling of
- pre-releases, post-releases, and local versions when using ``>V`` or ``<V``.
-
-
-14.5 - 2014-12-17
-~~~~~~~~~~~~~~~~~
-
-* Normalize release candidates as ``rc`` instead of ``c``.
-
-* Expose the ``VERSION_PATTERN`` constant, a regular expression matching
- a valid version.
-
-
-14.4 - 2014-12-15
-~~~~~~~~~~~~~~~~~
-
-* Ensure that versions are normalized before comparison when used in a
- specifier with a less than (``<``) or greater than (``>``) operator.
-
-
-14.3 - 2014-11-19
-~~~~~~~~~~~~~~~~~
-
-* **BACKWARDS INCOMPATIBLE** Refactor specifier support so that it can sanely
- handle legacy specifiers as well as PEP 440 specifiers.
-
-* **BACKWARDS INCOMPATIBLE** Move the specifier support out of
- ``packaging.version`` into ``packaging.specifiers``.
-
-
-14.2 - 2014-09-10
-~~~~~~~~~~~~~~~~~
-
-* Add prerelease support to ``Specifier``.
-* Remove the ability to do ``item in Specifier()`` and replace it with
- ``Specifier().contains(item)`` in order to allow flags that signal if a
- prerelease should be accepted or not.
-* Add a method ``Specifier().filter()`` which will take an iterable and returns
- an iterable with items that do not match the specifier filtered out.
-
-
-14.1 - 2014-09-08
-~~~~~~~~~~~~~~~~~
-
-* Allow ``LegacyVersion`` and ``Version`` to be sorted together.
-* Add ``packaging.version.parse()`` to enable easily parsing a version string
- as either a ``Version`` or a ``LegacyVersion`` depending on it's PEP 440
- validity.
-
-
-14.0 - 2014-09-05
-~~~~~~~~~~~~~~~~~
-
-* Initial release.
-
-
-.. _`master`: https://github.com/pypa/packaging/
-
-
diff --git a/contrib/python/packaging/py3/README.rst b/contrib/python/packaging/py3/README.rst
index e8bebe74dc1..4e01206a144 100644
--- a/contrib/python/packaging/py3/README.rst
+++ b/contrib/python/packaging/py3/README.rst
@@ -34,6 +34,8 @@ Use ``pip`` to install these utilities::
pip install packaging
+The ``packaging`` library uses calendar-based versioning (``YY.N``).
+
Discussion
----------
diff --git a/contrib/python/packaging/py3/packaging/__about__.py b/contrib/python/packaging/py3/packaging/__about__.py
deleted file mode 100644
index 3551bc2d298..00000000000
--- a/contrib/python/packaging/py3/packaging/__about__.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# This file is dual licensed under the terms of the Apache License, Version
-# 2.0, and the BSD License. See the LICENSE file in the root of this repository
-# for complete details.
-
-__all__ = [
- "__title__",
- "__summary__",
- "__uri__",
- "__version__",
- "__author__",
- "__email__",
- "__license__",
- "__copyright__",
-]
-
-__title__ = "packaging"
-__summary__ = "Core utilities for Python packages"
-__uri__ = "https://github.com/pypa/packaging"
-
-__version__ = "21.3"
-
-__author__ = "Donald Stufft and individual contributors"
-__email__ = "donald@stufft.io"
-
-__license__ = "BSD-2-Clause or Apache-2.0"
-__copyright__ = "2014-2019 %s" % __author__
diff --git a/contrib/python/packaging/py3/packaging/__init__.py b/contrib/python/packaging/py3/packaging/__init__.py
index 3c50c5dcfee..d79f73c574f 100644
--- a/contrib/python/packaging/py3/packaging/__init__.py
+++ b/contrib/python/packaging/py3/packaging/__init__.py
@@ -2,24 +2,14 @@
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
# for complete details.
-from .__about__ import (
- __author__,
- __copyright__,
- __email__,
- __license__,
- __summary__,
- __title__,
- __uri__,
- __version__,
-)
+__title__ = "packaging"
+__summary__ = "Core utilities for Python packages"
+__uri__ = "https://github.com/pypa/packaging"
-__all__ = [
- "__title__",
- "__summary__",
- "__uri__",
- "__version__",
- "__author__",
- "__email__",
- "__license__",
- "__copyright__",
-]
+__version__ = "24.2"
+
+__author__ = "Donald Stufft and individual contributors"
+__email__ = "donald@stufft.io"
+
+__license__ = "BSD-2-Clause or Apache-2.0"
+__copyright__ = f"2014 {__author__}"
diff --git a/contrib/python/packaging/py3/packaging/_elffile.py b/contrib/python/packaging/py3/packaging/_elffile.py
new file mode 100644
index 00000000000..25f4282cc29
--- /dev/null
+++ b/contrib/python/packaging/py3/packaging/_elffile.py
@@ -0,0 +1,110 @@
+"""
+ELF file parser.
+
+This provides a class ``ELFFile`` that parses an ELF executable in a similar
+interface to ``ZipFile``. Only the read interface is implemented.
+
+Based on: https://gist.github.com/lyssdod/f51579ae8d93c8657a5564aefc2ffbca
+ELF header: https://refspecs.linuxfoundation.org/elf/gabi4+/ch4.eheader.html
+"""
+
+from __future__ import annotations
+
+import enum
+import os
+import struct
+from typing import IO
+
+
+class ELFInvalid(ValueError):
+ pass
+
+
+class EIClass(enum.IntEnum):
+ C32 = 1
+ C64 = 2
+
+
+class EIData(enum.IntEnum):
+ Lsb = 1
+ Msb = 2
+
+
+class EMachine(enum.IntEnum):
+ I386 = 3
+ S390 = 22
+ Arm = 40
+ X8664 = 62
+ AArc64 = 183
+
+
+class ELFFile:
+ """
+ Representation of an ELF executable.
+ """
+
+ def __init__(self, f: IO[bytes]) -> None:
+ self._f = f
+
+ try:
+ ident = self._read("16B")
+ except struct.error as e:
+ raise ELFInvalid("unable to parse identification") from e
+ magic = bytes(ident[:4])
+ if magic != b"\x7fELF":
+ raise ELFInvalid(f"invalid magic: {magic!r}")
+
+ self.capacity = ident[4] # Format for program header (bitness).
+ self.encoding = ident[5] # Data structure encoding (endianness).
+
+ try:
+ # e_fmt: Format for program header.
+ # p_fmt: Format for section header.
+ # p_idx: Indexes to find p_type, p_offset, and p_filesz.
+ e_fmt, self._p_fmt, self._p_idx = {
+ (1, 1): ("<HHIIIIIHHH", "<IIIIIIII", (0, 1, 4)), # 32-bit LSB.
+ (1, 2): (">HHIIIIIHHH", ">IIIIIIII", (0, 1, 4)), # 32-bit MSB.
+ (2, 1): ("<HHIQQQIHHH", "<IIQQQQQQ", (0, 2, 5)), # 64-bit LSB.
+ (2, 2): (">HHIQQQIHHH", ">IIQQQQQQ", (0, 2, 5)), # 64-bit MSB.
+ }[(self.capacity, self.encoding)]
+ except KeyError as e:
+ raise ELFInvalid(
+ f"unrecognized capacity ({self.capacity}) or "
+ f"encoding ({self.encoding})"
+ ) from e
+
+ try:
+ (
+ _,
+ self.machine, # Architecture type.
+ _,
+ _,
+ self._e_phoff, # Offset of program header.
+ _,
+ self.flags, # Processor-specific flags.
+ _,
+ self._e_phentsize, # Size of section.
+ self._e_phnum, # Number of sections.
+ ) = self._read(e_fmt)
+ except struct.error as e:
+ raise ELFInvalid("unable to parse machine and section information") from e
+
+ def _read(self, fmt: str) -> tuple[int, ...]:
+ return struct.unpack(fmt, self._f.read(struct.calcsize(fmt)))
+
+ @property
+ def interpreter(self) -> str | None:
+ """
+ The path recorded in the ``PT_INTERP`` section header.
+ """
+ for index in range(self._e_phnum):
+ self._f.seek(self._e_phoff + self._e_phentsize * index)
+ try:
+ data = self._read(self._p_fmt)
+ except struct.error:
+ continue
+ if data[self._p_idx[0]] != 3: # Not PT_INTERP.
+ continue
+ self._f.seek(data[self._p_idx[1]])
+ return os.fsdecode(self._f.read(data[self._p_idx[2]])).strip("\0")
+ return None
diff --git a/contrib/python/packaging/py3/packaging/_manylinux.py b/contrib/python/packaging/py3/packaging/_manylinux.py
index 4c379aa6f69..61339a6fcc1 100644
--- a/contrib/python/packaging/py3/packaging/_manylinux.py
+++ b/contrib/python/packaging/py3/packaging/_manylinux.py
@@ -1,122 +1,72 @@
+from __future__ import annotations
+
import collections
+import contextlib
import functools
import os
import re
-import struct
import sys
import warnings
-from typing import IO, Dict, Iterator, NamedTuple, Optional, Tuple
-
-
-# Python does not provide platform information at sufficient granularity to
-# identify the architecture of the running executable in some cases, so we
-# determine it dynamically by reading the information from the running
-# process. This only applies on Linux, which uses the ELF format.
-class _ELFFileHeader:
- # https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header
- class _InvalidELFFileHeader(ValueError):
- """
- An invalid ELF file header was found.
- """
-
- ELF_MAGIC_NUMBER = 0x7F454C46
- ELFCLASS32 = 1
- ELFCLASS64 = 2
- ELFDATA2LSB = 1
- ELFDATA2MSB = 2
- EM_386 = 3
- EM_S390 = 22
- EM_ARM = 40
- EM_X86_64 = 62
- EF_ARM_ABIMASK = 0xFF000000
- EF_ARM_ABI_VER5 = 0x05000000
- EF_ARM_ABI_FLOAT_HARD = 0x00000400
-
- def __init__(self, file: IO[bytes]) -> None:
- def unpack(fmt: str) -> int:
- try:
- data = file.read(struct.calcsize(fmt))
- result: Tuple[int, ...] = struct.unpack(fmt, data)
- except struct.error:
- raise _ELFFileHeader._InvalidELFFileHeader()
- return result[0]
-
- self.e_ident_magic = unpack(">I")
- if self.e_ident_magic != self.ELF_MAGIC_NUMBER:
- raise _ELFFileHeader._InvalidELFFileHeader()
- self.e_ident_class = unpack("B")
- if self.e_ident_class not in {self.ELFCLASS32, self.ELFCLASS64}:
- raise _ELFFileHeader._InvalidELFFileHeader()
- self.e_ident_data = unpack("B")
- if self.e_ident_data not in {self.ELFDATA2LSB, self.ELFDATA2MSB}:
- raise _ELFFileHeader._InvalidELFFileHeader()
- self.e_ident_version = unpack("B")
- self.e_ident_osabi = unpack("B")
- self.e_ident_abiversion = unpack("B")
- self.e_ident_pad = file.read(7)
- format_h = "<H" if self.e_ident_data == self.ELFDATA2LSB else ">H"
- format_i = "<I" if self.e_ident_data == self.ELFDATA2LSB else ">I"
- format_q = "<Q" if self.e_ident_data == self.ELFDATA2LSB else ">Q"
- format_p = format_i if self.e_ident_class == self.ELFCLASS32 else format_q
- self.e_type = unpack(format_h)
- self.e_machine = unpack(format_h)
- self.e_version = unpack(format_i)
- self.e_entry = unpack(format_p)
- self.e_phoff = unpack(format_p)
- self.e_shoff = unpack(format_p)
- self.e_flags = unpack(format_i)
- self.e_ehsize = unpack(format_h)
- self.e_phentsize = unpack(format_h)
- self.e_phnum = unpack(format_h)
- self.e_shentsize = unpack(format_h)
- self.e_shnum = unpack(format_h)
- self.e_shstrndx = unpack(format_h)
-
-
-def _get_elf_header() -> Optional[_ELFFileHeader]:
+from typing import Generator, Iterator, NamedTuple, Sequence
+
+from ._elffile import EIClass, EIData, ELFFile, EMachine
+
+EF_ARM_ABIMASK = 0xFF000000
+EF_ARM_ABI_VER5 = 0x05000000
+EF_ARM_ABI_FLOAT_HARD = 0x00000400
+
+
+# `os.PathLike` not a generic type until Python 3.9, so sticking with `str`
+# as the type for `path` until then.
+@contextlib.contextmanager
+def _parse_elf(path: str) -> Generator[ELFFile | None, None, None]:
try:
- with open(sys.executable, "rb") as f:
- elf_header = _ELFFileHeader(f)
- except (OSError, TypeError, _ELFFileHeader._InvalidELFFileHeader):
- return None
- return elf_header
+ with open(path, "rb") as f:
+ yield ELFFile(f)
+ except (OSError, TypeError, ValueError):
+ yield None
-def _is_linux_armhf() -> bool:
+def _is_linux_armhf(executable: str) -> bool:
# hard-float ABI can be detected from the ELF header of the running
# process
# https://static.docs.arm.com/ihi0044/g/aaelf32.pdf
- elf_header = _get_elf_header()
- if elf_header is None:
- return False
- result = elf_header.e_ident_class == elf_header.ELFCLASS32
- result &= elf_header.e_ident_data == elf_header.ELFDATA2LSB
- result &= elf_header.e_machine == elf_header.EM_ARM
- result &= (
- elf_header.e_flags & elf_header.EF_ARM_ABIMASK
- ) == elf_header.EF_ARM_ABI_VER5
- result &= (
- elf_header.e_flags & elf_header.EF_ARM_ABI_FLOAT_HARD
- ) == elf_header.EF_ARM_ABI_FLOAT_HARD
- return result
-
-
-def _is_linux_i686() -> bool:
- elf_header = _get_elf_header()
- if elf_header is None:
- return False
- result = elf_header.e_ident_class == elf_header.ELFCLASS32
- result &= elf_header.e_ident_data == elf_header.ELFDATA2LSB
- result &= elf_header.e_machine == elf_header.EM_386
- return result
+ with _parse_elf(executable) as f:
+ return (
+ f is not None
+ and f.capacity == EIClass.C32
+ and f.encoding == EIData.Lsb
+ and f.machine == EMachine.Arm
+ and f.flags & EF_ARM_ABIMASK == EF_ARM_ABI_VER5
+ and f.flags & EF_ARM_ABI_FLOAT_HARD == EF_ARM_ABI_FLOAT_HARD
+ )
+
+
+def _is_linux_i686(executable: str) -> bool:
+ with _parse_elf(executable) as f:
+ return (
+ f is not None
+ and f.capacity == EIClass.C32
+ and f.encoding == EIData.Lsb
+ and f.machine == EMachine.I386
+ )
-def _have_compatible_abi(arch: str) -> bool:
- if arch == "armv7l":
- return _is_linux_armhf()
- if arch == "i686":
- return _is_linux_i686()
- return arch in {"x86_64", "aarch64", "ppc64", "ppc64le", "s390x"}
+def _have_compatible_abi(executable: str, archs: Sequence[str]) -> bool:
+ if "armv7l" in archs:
+ return _is_linux_armhf(executable)
+ if "i686" in archs:
+ return _is_linux_i686(executable)
+ allowed_archs = {
+ "x86_64",
+ "aarch64",
+ "ppc64",
+ "ppc64le",
+ "s390x",
+ "loongarch64",
+ "riscv64",
+ }
+ return any(arch in allowed_archs for arch in archs)
# If glibc ever changes its major version, we need to know what the last
@@ -124,7 +74,7 @@ def _have_compatible_abi(arch: str) -> bool:
# For now, guess what the highest minor version might be, assume it will
# be 50 for testing. Once this actually happens, update the dictionary
# with the actual value.
-_LAST_GLIBC_MINOR: Dict[int, int] = collections.defaultdict(lambda: 50)
+_LAST_GLIBC_MINOR: dict[int, int] = collections.defaultdict(lambda: 50)
class _GLibCVersion(NamedTuple):
@@ -132,7 +82,7 @@ class _GLibCVersion(NamedTuple):
minor: int
-def _glibc_version_string_confstr() -> Optional[str]:
+def _glibc_version_string_confstr() -> str | None:
"""
Primary implementation of glibc_version_string using os.confstr.
"""
@@ -141,17 +91,17 @@ def _glibc_version_string_confstr() -> Optional[str]:
# platform module.
# https://github.com/python/cpython/blob/fcf1d003bf4f0100c/Lib/platform.py#L175-L183
try:
- # os.confstr("CS_GNU_LIBC_VERSION") returns a string like "glibc 2.17".
- version_string = os.confstr("CS_GNU_LIBC_VERSION")
+ # Should be a string like "glibc 2.17".
+ version_string: str | None = os.confstr("CS_GNU_LIBC_VERSION")
assert version_string is not None
- _, version = version_string.split()
+ _, version = version_string.rsplit()
except (AssertionError, AttributeError, OSError, ValueError):
# os.confstr() or CS_GNU_LIBC_VERSION not available (or a bad value)...
return None
return version
-def _glibc_version_string_ctypes() -> Optional[str]:
+def _glibc_version_string_ctypes() -> str | None:
"""
Fallback implementation of glibc_version_string using ctypes.
"""
@@ -195,12 +145,12 @@ def _glibc_version_string_ctypes() -> Optional[str]:
return version_str
-def _glibc_version_string() -> Optional[str]:
+def _glibc_version_string() -> str | None:
"""Returns glibc version string, or None if not using glibc."""
return _glibc_version_string_confstr() or _glibc_version_string_ctypes()
-def _parse_glibc_version(version_str: str) -> Tuple[int, int]:
+def _parse_glibc_version(version_str: str) -> tuple[int, int]:
"""Parse glibc version.
We use a regexp instead of str.split because we want to discard any
@@ -211,16 +161,17 @@ def _parse_glibc_version(version_str: str) -> Tuple[int, int]:
m = re.match(r"(?P<major>[0-9]+)\.(?P<minor>[0-9]+)", version_str)
if not m:
warnings.warn(
- "Expected glibc version with 2 components major.minor,"
- " got: %s" % version_str,
+ f"Expected glibc version with 2 components major.minor,"
+ f" got: {version_str}",
RuntimeWarning,
+ stacklevel=2,
)
return -1, -1
return int(m.group("major")), int(m.group("minor"))
-@functools.lru_cache()
-def _get_glibc_version() -> Tuple[int, int]:
+@functools.lru_cache
+def _get_glibc_version() -> tuple[int, int]:
version_str = _glibc_version_string()
if version_str is None:
return (-1, -1)
@@ -228,13 +179,13 @@ def _get_glibc_version() -> Tuple[int, int]:
# From PEP 513, PEP 600
-def _is_compatible(name: str, arch: str, version: _GLibCVersion) -> bool:
+def _is_compatible(arch: str, version: _GLibCVersion) -> bool:
sys_glibc = _get_glibc_version()
if sys_glibc < version:
return False
# Check for presence of _manylinux module.
try:
- import _manylinux # noqa
+ import _manylinux
except ImportError:
return True
if hasattr(_manylinux, "manylinux_compatible"):
@@ -264,12 +215,22 @@ _LEGACY_MANYLINUX_MAP = {
}
-def platform_tags(linux: str, arch: str) -> Iterator[str]:
- if not _have_compatible_abi(arch):
+def platform_tags(archs: Sequence[str]) -> Iterator[str]:
+ """Generate manylinux tags compatible to the current platform.
+
+ :param archs: Sequence of compatible architectures.
+ The first one shall be the closest to the actual architecture and be the part of
+ platform tag after the ``linux_`` prefix, e.g. ``x86_64``.
+ The ``linux_`` prefix is assumed as a prerequisite for the current platform to
+ be manylinux-compatible.
+
+ :returns: An iterator of compatible manylinux tags.
+ """
+ if not _have_compatible_abi(sys.executable, archs):
return
# Oldest glibc to be supported regardless of architecture is (2, 17).
too_old_glibc2 = _GLibCVersion(2, 16)
- if arch in {"x86_64", "i686"}:
+ if set(archs) & {"x86_64", "i686"}:
# On x86/i686 also oldest glibc to be supported is (2, 5).
too_old_glibc2 = _GLibCVersion(2, 4)
current_glibc = _GLibCVersion(*_get_glibc_version())
@@ -283,19 +244,20 @@ def platform_tags(linux: str, arch: str) -> Iterator[str]:
for glibc_major in range(current_glibc.major - 1, 1, -1):
glibc_minor = _LAST_GLIBC_MINOR[glibc_major]
glibc_max_list.append(_GLibCVersion(glibc_major, glibc_minor))
- for glibc_max in glibc_max_list:
- if glibc_max.major == too_old_glibc2.major:
- min_minor = too_old_glibc2.minor
- else:
- # For other glibc major versions oldest supported is (x, 0).
- min_minor = -1
- for glibc_minor in range(glibc_max.minor, min_minor, -1):
- glibc_version = _GLibCVersion(glibc_max.major, glibc_minor)
- tag = "manylinux_{}_{}".format(*glibc_version)
- if _is_compatible(tag, arch, glibc_version):
- yield linux.replace("linux", tag)
- # Handle the legacy manylinux1, manylinux2010, manylinux2014 tags.
- if glibc_version in _LEGACY_MANYLINUX_MAP:
- legacy_tag = _LEGACY_MANYLINUX_MAP[glibc_version]
- if _is_compatible(legacy_tag, arch, glibc_version):
- yield linux.replace("linux", legacy_tag)
+ for arch in archs:
+ for glibc_max in glibc_max_list:
+ if glibc_max.major == too_old_glibc2.major:
+ min_minor = too_old_glibc2.minor
+ else:
+ # For other glibc major versions oldest supported is (x, 0).
+ min_minor = -1
+ for glibc_minor in range(glibc_max.minor, min_minor, -1):
+ glibc_version = _GLibCVersion(glibc_max.major, glibc_minor)
+ tag = "manylinux_{}_{}".format(*glibc_version)
+ if _is_compatible(arch, glibc_version):
+ yield f"{tag}_{arch}"
+ # Handle the legacy manylinux1, manylinux2010, manylinux2014 tags.
+ if glibc_version in _LEGACY_MANYLINUX_MAP:
+ legacy_tag = _LEGACY_MANYLINUX_MAP[glibc_version]
+ if _is_compatible(arch, glibc_version):
+ yield f"{legacy_tag}_{arch}"
diff --git a/contrib/python/packaging/py3/packaging/_musllinux.py b/contrib/python/packaging/py3/packaging/_musllinux.py
index 8ac3059ba3c..d2bf30b5631 100644
--- a/contrib/python/packaging/py3/packaging/_musllinux.py
+++ b/contrib/python/packaging/py3/packaging/_musllinux.py
@@ -4,68 +4,15 @@ This module implements logic to detect if the currently running Python is
linked against musl, and what musl version is used.
"""
-import contextlib
+from __future__ import annotations
+
import functools
-import operator
-import os
import re
-import struct
import subprocess
import sys
-from typing import IO, Iterator, NamedTuple, Optional, Tuple
-
-
-def _read_unpacked(f: IO[bytes], fmt: str) -> Tuple[int, ...]:
- return struct.unpack(fmt, f.read(struct.calcsize(fmt)))
+from typing import Iterator, NamedTuple, Sequence
-
-def _parse_ld_musl_from_elf(f: IO[bytes]) -> Optional[str]:
- """Detect musl libc location by parsing the Python executable.
-
- Based on: https://gist.github.com/lyssdod/f51579ae8d93c8657a5564aefc2ffbca
- ELF header: https://refspecs.linuxfoundation.org/elf/gabi4+/ch4.eheader.html
- """
- f.seek(0)
- try:
- ident = _read_unpacked(f, "16B")
- except struct.error:
- return None
- if ident[:4] != tuple(b"\x7fELF"): # Invalid magic, not ELF.
- return None
- f.seek(struct.calcsize("HHI"), 1) # Skip file type, machine, and version.
-
- try:
- # e_fmt: Format for program header.
- # p_fmt: Format for section header.
- # p_idx: Indexes to find p_type, p_offset, and p_filesz.
- e_fmt, p_fmt, p_idx = {
- 1: ("IIIIHHH", "IIIIIIII", (0, 1, 4)), # 32-bit.
- 2: ("QQQIHHH", "IIQQQQQQ", (0, 2, 5)), # 64-bit.
- }[ident[4]]
- except KeyError:
- return None
- else:
- p_get = operator.itemgetter(*p_idx)
-
- # Find the interpreter section and return its content.
- try:
- _, e_phoff, _, _, _, e_phentsize, e_phnum = _read_unpacked(f, e_fmt)
- except struct.error:
- return None
- for i in range(e_phnum + 1):
- f.seek(e_phoff + e_phentsize * i)
- try:
- p_type, p_offset, p_filesz = p_get(_read_unpacked(f, p_fmt))
- except struct.error:
- return None
- if p_type != 3: # Not PT_INTERP.
- continue
- f.seek(p_offset)
- interpreter = os.fsdecode(f.read(p_filesz)).strip("\0")
- if "musl" not in interpreter:
- return None
- return interpreter
- return None
+from ._elffile import ELFFile
class _MuslVersion(NamedTuple):
@@ -73,7 +20,7 @@ class _MuslVersion(NamedTuple):
minor: int
-def _parse_musl_version(output: str) -> Optional[_MuslVersion]:
+def _parse_musl_version(output: str) -> _MuslVersion | None:
lines = [n for n in (n.strip() for n in output.splitlines()) if n]
if len(lines) < 2 or lines[0][:4] != "musl":
return None
@@ -83,8 +30,8 @@ def _parse_musl_version(output: str) -> Optional[_MuslVersion]:
return _MuslVersion(major=int(m.group(1)), minor=int(m.group(2)))
-@functools.lru_cache()
-def _get_musl_version(executable: str) -> Optional[_MuslVersion]:
+@functools.lru_cache
+def _get_musl_version(executable: str) -> _MuslVersion | None:
"""Detect currently-running musl runtime version.
This is done by checking the specified executable's dynamic linking
@@ -95,32 +42,34 @@ def _get_musl_version(executable: str) -> Optional[_MuslVersion]:
Version 1.2.2
Dynamic Program Loader
"""
- with contextlib.ExitStack() as stack:
- try:
- f = stack.enter_context(open(executable, "rb"))
- except OSError:
- return None
- ld = _parse_ld_musl_from_elf(f)
- if not ld:
+ try:
+ with open(executable, "rb") as f:
+ ld = ELFFile(f).interpreter
+ except (OSError, TypeError, ValueError):
+ return None
+ if ld is None or "musl" not in ld:
return None
- proc = subprocess.run([ld], stderr=subprocess.PIPE, universal_newlines=True)
+ proc = subprocess.run([ld], stderr=subprocess.PIPE, text=True)
return _parse_musl_version(proc.stderr)
-def platform_tags(arch: str) -> Iterator[str]:
+def platform_tags(archs: Sequence[str]) -> Iterator[str]:
"""Generate musllinux tags compatible to the current platform.
- :param arch: Should be the part of platform tag after the ``linux_``
- prefix, e.g. ``x86_64``. The ``linux_`` prefix is assumed as a
- prerequisite for the current platform to be musllinux-compatible.
+ :param archs: Sequence of compatible architectures.
+ The first one shall be the closest to the actual architecture and be the part of
+ platform tag after the ``linux_`` prefix, e.g. ``x86_64``.
+ The ``linux_`` prefix is assumed as a prerequisite for the current platform to
+ be musllinux-compatible.
:returns: An iterator of compatible musllinux tags.
"""
sys_musl = _get_musl_version(sys.executable)
if sys_musl is None: # Python not dynamically linked against musl.
return
- for minor in range(sys_musl.minor, -1, -1):
- yield f"musllinux_{sys_musl.major}_{minor}_{arch}"
+ for arch in archs:
+ for minor in range(sys_musl.minor, -1, -1):
+ yield f"musllinux_{sys_musl.major}_{minor}_{arch}"
if __name__ == "__main__": # pragma: no cover
diff --git a/contrib/python/packaging/py3/packaging/_parser.py b/contrib/python/packaging/py3/packaging/_parser.py
new file mode 100644
index 00000000000..c1238c06eab
--- /dev/null
+++ b/contrib/python/packaging/py3/packaging/_parser.py
@@ -0,0 +1,354 @@
+"""Handwritten parser of dependency specifiers.
+
+The docstring for each __parse_* function contains EBNF-inspired grammar representing
+the implementation.
+"""
+
+from __future__ import annotations
+
+import ast
+from typing import NamedTuple, Sequence, Tuple, Union
+
+from ._tokenizer import DEFAULT_RULES, Tokenizer
+
+
+class Node:
+ def __init__(self, value: str) -> None:
+ self.value = value
+
+ def __str__(self) -> str:
+ return self.value
+
+ def __repr__(self) -> str:
+ return f"<{self.__class__.__name__}('{self}')>"
+
+ def serialize(self) -> str:
+ raise NotImplementedError
+
+
+class Variable(Node):
+ def serialize(self) -> str:
+ return str(self)
+
+
+class Value(Node):
+ def serialize(self) -> str:
+ return f'"{self}"'
+
+
+class Op(Node):
+ def serialize(self) -> str:
+ return str(self)
+
+
+MarkerVar = Union[Variable, Value]
+MarkerItem = Tuple[MarkerVar, Op, MarkerVar]
+MarkerAtom = Union[MarkerItem, Sequence["MarkerAtom"]]
+MarkerList = Sequence[Union["MarkerList", MarkerAtom, str]]
+
+
+class ParsedRequirement(NamedTuple):
+ name: str
+ url: str
+ extras: list[str]
+ specifier: str
+ marker: MarkerList | None
+
+
+# --------------------------------------------------------------------------------------
+# Recursive descent parser for dependency specifier
+# --------------------------------------------------------------------------------------
+def parse_requirement(source: str) -> ParsedRequirement:
+ return _parse_requirement(Tokenizer(source, rules=DEFAULT_RULES))
+
+
+def _parse_requirement(tokenizer: Tokenizer) -> ParsedRequirement:
+ """
+ requirement = WS? IDENTIFIER WS? extras WS? requirement_details
+ """
+ tokenizer.consume("WS")
+
+ name_token = tokenizer.expect(
+ "IDENTIFIER", expected="package name at the start of dependency specifier"
+ )
+ name = name_token.text
+ tokenizer.consume("WS")
+
+ extras = _parse_extras(tokenizer)
+ tokenizer.consume("WS")
+
+ url, specifier, marker = _parse_requirement_details(tokenizer)
+ tokenizer.expect("END", expected="end of dependency specifier")
+
+ return ParsedRequirement(name, url, extras, specifier, marker)
+
+
+def _parse_requirement_details(
+ tokenizer: Tokenizer,
+) -> tuple[str, str, MarkerList | None]:
+ """
+ requirement_details = AT URL (WS requirement_marker?)?
+ | specifier WS? (requirement_marker)?
+ """
+
+ specifier = ""
+ url = ""
+ marker = None
+
+ if tokenizer.check("AT"):
+ tokenizer.read()
+ tokenizer.consume("WS")
+
+ url_start = tokenizer.position
+ url = tokenizer.expect("URL", expected="URL after @").text
+ if tokenizer.check("END", peek=True):
+ return (url, specifier, marker)
+
+ tokenizer.expect("WS", expected="whitespace after URL")
+
+ # The input might end after whitespace.
+ if tokenizer.check("END", peek=True):
+ return (url, specifier, marker)
+
+ marker = _parse_requirement_marker(
+ tokenizer, span_start=url_start, after="URL and whitespace"
+ )
+ else:
+ specifier_start = tokenizer.position
+ specifier = _parse_specifier(tokenizer)
+ tokenizer.consume("WS")
+
+ if tokenizer.check("END", peek=True):
+ return (url, specifier, marker)
+
+ marker = _parse_requirement_marker(
+ tokenizer,
+ span_start=specifier_start,
+ after=(
+ "version specifier"
+ if specifier
+ else "name and no valid version specifier"
+ ),
+ )
+
+ return (url, specifier, marker)
+
+
+def _parse_requirement_marker(
+ tokenizer: Tokenizer, *, span_start: int, after: str
+) -> MarkerList:
+ """
+ requirement_marker = SEMICOLON marker WS?
+ """
+
+ if not tokenizer.check("SEMICOLON"):
+ tokenizer.raise_syntax_error(
+ f"Expected end or semicolon (after {after})",
+ span_start=span_start,
+ )
+ tokenizer.read()
+
+ marker = _parse_marker(tokenizer)
+ tokenizer.consume("WS")
+
+ return marker
+
+
+def _parse_extras(tokenizer: Tokenizer) -> list[str]:
+ """
+ extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)?
+ """
+ if not tokenizer.check("LEFT_BRACKET", peek=True):
+ return []
+
+ with tokenizer.enclosing_tokens(
+ "LEFT_BRACKET",
+ "RIGHT_BRACKET",
+ around="extras",
+ ):
+ tokenizer.consume("WS")
+ extras = _parse_extras_list(tokenizer)
+ tokenizer.consume("WS")
+
+ return extras
+
+
+def _parse_extras_list(tokenizer: Tokenizer) -> list[str]:
+ """
+ extras_list = identifier (wsp* ',' wsp* identifier)*
+ """
+ extras: list[str] = []
+
+ if not tokenizer.check("IDENTIFIER"):
+ return extras
+
+ extras.append(tokenizer.read().text)
+
+ while True:
+ tokenizer.consume("WS")
+ if tokenizer.check("IDENTIFIER", peek=True):
+ tokenizer.raise_syntax_error("Expected comma between extra names")
+ elif not tokenizer.check("COMMA"):
+ break
+
+ tokenizer.read()
+ tokenizer.consume("WS")
+
+ extra_token = tokenizer.expect("IDENTIFIER", expected="extra name after comma")
+ extras.append(extra_token.text)
+
+ return extras
+
+
+def _parse_specifier(tokenizer: Tokenizer) -> str:
+ """
+ specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS
+ | WS? version_many WS?
+ """
+ with tokenizer.enclosing_tokens(
+ "LEFT_PARENTHESIS",
+ "RIGHT_PARENTHESIS",
+ around="version specifier",
+ ):
+ tokenizer.consume("WS")
+ parsed_specifiers = _parse_version_many(tokenizer)
+ tokenizer.consume("WS")
+
+ return parsed_specifiers
+
+
+def _parse_version_many(tokenizer: Tokenizer) -> str:
+ """
+ version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)?
+ """
+ parsed_specifiers = ""
+ while tokenizer.check("SPECIFIER"):
+ span_start = tokenizer.position
+ parsed_specifiers += tokenizer.read().text
+ if tokenizer.check("VERSION_PREFIX_TRAIL", peek=True):
+ tokenizer.raise_syntax_error(
+ ".* suffix can only be used with `==` or `!=` operators",
+ span_start=span_start,
+ span_end=tokenizer.position + 1,
+ )
+ if tokenizer.check("VERSION_LOCAL_LABEL_TRAIL", peek=True):
+ tokenizer.raise_syntax_error(
+ "Local version label can only be used with `==` or `!=` operators",
+ span_start=span_start,
+ span_end=tokenizer.position,
+ )
+ tokenizer.consume("WS")
+ if not tokenizer.check("COMMA"):
+ break
+ parsed_specifiers += tokenizer.read().text
+ tokenizer.consume("WS")
+
+ return parsed_specifiers
+
+
+# --------------------------------------------------------------------------------------
+# Recursive descent parser for marker expression
+# --------------------------------------------------------------------------------------
+def parse_marker(source: str) -> MarkerList:
+ return _parse_full_marker(Tokenizer(source, rules=DEFAULT_RULES))
+
+
+def _parse_full_marker(tokenizer: Tokenizer) -> MarkerList:
+ retval = _parse_marker(tokenizer)
+ tokenizer.expect("END", expected="end of marker expression")
+ return retval
+
+
+def _parse_marker(tokenizer: Tokenizer) -> MarkerList:
+ """
+ marker = marker_atom (BOOLOP marker_atom)+
+ """
+ expression = [_parse_marker_atom(tokenizer)]
+ while tokenizer.check("BOOLOP"):
+ token = tokenizer.read()
+ expr_right = _parse_marker_atom(tokenizer)
+ expression.extend((token.text, expr_right))
+ return expression
+
+
+def _parse_marker_atom(tokenizer: Tokenizer) -> MarkerAtom:
+ """
+ marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS?
+ | WS? marker_item WS?
+ """
+
+ tokenizer.consume("WS")
+ if tokenizer.check("LEFT_PARENTHESIS", peek=True):
+ with tokenizer.enclosing_tokens(
+ "LEFT_PARENTHESIS",
+ "RIGHT_PARENTHESIS",
+ around="marker expression",
+ ):
+ tokenizer.consume("WS")
+ marker: MarkerAtom = _parse_marker(tokenizer)
+ tokenizer.consume("WS")
+ else:
+ marker = _parse_marker_item(tokenizer)
+ tokenizer.consume("WS")
+ return marker
+
+
+def _parse_marker_item(tokenizer: Tokenizer) -> MarkerItem:
+ """
+ marker_item = WS? marker_var WS? marker_op WS? marker_var WS?
+ """
+ tokenizer.consume("WS")
+ marker_var_left = _parse_marker_var(tokenizer)
+ tokenizer.consume("WS")
+ marker_op = _parse_marker_op(tokenizer)
+ tokenizer.consume("WS")
+ marker_var_right = _parse_marker_var(tokenizer)
+ tokenizer.consume("WS")
+ return (marker_var_left, marker_op, marker_var_right)
+
+
+def _parse_marker_var(tokenizer: Tokenizer) -> MarkerVar:
+ """
+ marker_var = VARIABLE | QUOTED_STRING
+ """
+ if tokenizer.check("VARIABLE"):
+ return process_env_var(tokenizer.read().text.replace(".", "_"))
+ elif tokenizer.check("QUOTED_STRING"):
+ return process_python_str(tokenizer.read().text)
+ else:
+ tokenizer.raise_syntax_error(
+ message="Expected a marker variable or quoted string"
+ )
+
+
+def process_env_var(env_var: str) -> Variable:
+ if env_var in ("platform_python_implementation", "python_implementation"):
+ return Variable("platform_python_implementation")
+ else:
+ return Variable(env_var)
+
+
+def process_python_str(python_str: str) -> Value:
+ value = ast.literal_eval(python_str)
+ return Value(str(value))
+
+
+def _parse_marker_op(tokenizer: Tokenizer) -> Op:
+ """
+ marker_op = IN | NOT IN | OP
+ """
+ if tokenizer.check("IN"):
+ tokenizer.read()
+ return Op("in")
+ elif tokenizer.check("NOT"):
+ tokenizer.read()
+ tokenizer.expect("WS", expected="whitespace after 'not'")
+ tokenizer.expect("IN", expected="'in' after 'not'")
+ return Op("not in")
+ elif tokenizer.check("OP"):
+ return Op(tokenizer.read().text)
+ else:
+ return tokenizer.raise_syntax_error(
+ "Expected marker operator, one of "
+ "<=, <, !=, ==, >=, >, ~=, ===, in, not in"
+ )
diff --git a/contrib/python/packaging/py3/packaging/_tokenizer.py b/contrib/python/packaging/py3/packaging/_tokenizer.py
new file mode 100644
index 00000000000..89d041605c0
--- /dev/null
+++ b/contrib/python/packaging/py3/packaging/_tokenizer.py
@@ -0,0 +1,194 @@
+from __future__ import annotations
+
+import contextlib
+import re
+from dataclasses import dataclass
+from typing import Iterator, NoReturn
+
+from .specifiers import Specifier
+
+
+@dataclass
+class Token:
+ name: str
+ text: str
+ position: int
+
+
+class ParserSyntaxError(Exception):
+ """The provided source text could not be parsed correctly."""
+
+ def __init__(
+ self,
+ message: str,
+ *,
+ source: str,
+ span: tuple[int, int],
+ ) -> None:
+ self.span = span
+ self.message = message
+ self.source = source
+
+ super().__init__()
+
+ def __str__(self) -> str:
+ marker = " " * self.span[0] + "~" * (self.span[1] - self.span[0]) + "^"
+ return "\n ".join([self.message, self.source, marker])
+
+
+DEFAULT_RULES: dict[str, str | re.Pattern[str]] = {
+ "LEFT_PARENTHESIS": r"\(",
+ "RIGHT_PARENTHESIS": r"\)",
+ "LEFT_BRACKET": r"\[",
+ "RIGHT_BRACKET": r"\]",
+ "SEMICOLON": r";",
+ "COMMA": r",",
+ "QUOTED_STRING": re.compile(
+ r"""
+ (
+ ('[^']*')
+ |
+ ("[^"]*")
+ )
+ """,
+ re.VERBOSE,
+ ),
+ "OP": r"(===|==|~=|!=|<=|>=|<|>)",
+ "BOOLOP": r"\b(or|and)\b",
+ "IN": r"\bin\b",
+ "NOT": r"\bnot\b",
+ "VARIABLE": re.compile(
+ r"""
+ \b(
+ python_version
+ |python_full_version
+ |os[._]name
+ |sys[._]platform
+ |platform_(release|system)
+ |platform[._](version|machine|python_implementation)
+ |python_implementation
+ |implementation_(name|version)
+ |extra
+ )\b
+ """,
+ re.VERBOSE,
+ ),
+ "SPECIFIER": re.compile(
+ Specifier._operator_regex_str + Specifier._version_regex_str,
+ re.VERBOSE | re.IGNORECASE,
+ ),
+ "AT": r"\@",
+ "URL": r"[^ \t]+",
+ "IDENTIFIER": r"\b[a-zA-Z0-9][a-zA-Z0-9._-]*\b",
+ "VERSION_PREFIX_TRAIL": r"\.\*",
+ "VERSION_LOCAL_LABEL_TRAIL": r"\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*",
+ "WS": r"[ \t]+",
+ "END": r"$",
+}
+
+
+class Tokenizer:
+ """Context-sensitive token parsing.
+
+ Provides methods to examine the input stream to check whether the next token
+ matches.
+ """
+
+ def __init__(
+ self,
+ source: str,
+ *,
+ rules: dict[str, str | re.Pattern[str]],
+ ) -> None:
+ self.source = source
+ self.rules: dict[str, re.Pattern[str]] = {
+ name: re.compile(pattern) for name, pattern in rules.items()
+ }
+ self.next_token: Token | None = None
+ self.position = 0
+
+ def consume(self, name: str) -> None:
+ """Move beyond provided token name, if at current position."""
+ if self.check(name):
+ self.read()
+
+ def check(self, name: str, *, peek: bool = False) -> bool:
+ """Check whether the next token has the provided name.
+
+ By default, if the check succeeds, the token *must* be read before
+ another check. If `peek` is set to `True`, the token is not loaded and
+ would need to be checked again.
+ """
+ assert (
+ self.next_token is None
+ ), f"Cannot check for {name!r}, already have {self.next_token!r}"
+ assert name in self.rules, f"Unknown token name: {name!r}"
+
+ expression = self.rules[name]
+
+ match = expression.match(self.source, self.position)
+ if match is None:
+ return False
+ if not peek:
+ self.next_token = Token(name, match[0], self.position)
+ return True
+
+ def expect(self, name: str, *, expected: str) -> Token:
+ """Expect a certain token name next, failing with a syntax error otherwise.
+
+ The token is *not* read.
+ """
+ if not self.check(name):
+ raise self.raise_syntax_error(f"Expected {expected}")
+ return self.read()
+
+ def read(self) -> Token:
+ """Consume the next token and return it."""
+ token = self.next_token
+ assert token is not None
+
+ self.position += len(token.text)
+ self.next_token = None
+
+ return token
+
+ def raise_syntax_error(
+ self,
+ message: str,
+ *,
+ span_start: int | None = None,
+ span_end: int | None = None,
+ ) -> NoReturn:
+ """Raise ParserSyntaxError at the given position."""
+ span = (
+ self.position if span_start is None else span_start,
+ self.position if span_end is None else span_end,
+ )
+ raise ParserSyntaxError(
+ message,
+ source=self.source,
+ span=span,
+ )
+
+ @contextlib.contextmanager
+ def enclosing_tokens(
+ self, open_token: str, close_token: str, *, around: str
+ ) -> Iterator[None]:
+ if self.check(open_token):
+ open_position = self.position
+ self.read()
+ else:
+ open_position = None
+
+ yield
+
+ if open_position is None:
+ return
+
+ if not self.check(close_token):
+ self.raise_syntax_error(
+ f"Expected matching {close_token} for {open_token}, after {around}",
+ span_start=open_position,
+ )
+
+ self.read()
diff --git a/contrib/python/packaging/py3/packaging/licenses/__init__.py b/contrib/python/packaging/py3/packaging/licenses/__init__.py
new file mode 100644
index 00000000000..569156d6ca4
--- /dev/null
+++ b/contrib/python/packaging/py3/packaging/licenses/__init__.py
@@ -0,0 +1,145 @@
+#######################################################################################
+#
+# Adapted from:
+# https://github.com/pypa/hatch/blob/5352e44/backend/src/hatchling/licenses/parse.py
+#
+# MIT License
+#
+# Copyright (c) 2017-present Ofek Lev <oss@ofek.dev>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy of this
+# software and associated documentation files (the "Software"), to deal in the Software
+# without restriction, including without limitation the rights to use, copy, modify,
+# merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to the following
+# conditions:
+#
+# The above copyright notice and this permission notice shall be included in all copies
+# or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+# CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+#
+# With additional allowance of arbitrary `LicenseRef-` identifiers, not just
+# `LicenseRef-Public-Domain` and `LicenseRef-Proprietary`.
+#
+#######################################################################################
+from __future__ import annotations
+
+import re
+from typing import NewType, cast
+
+from packaging.licenses._spdx import EXCEPTIONS, LICENSES
+
+__all__ = [
+ "NormalizedLicenseExpression",
+ "InvalidLicenseExpression",
+ "canonicalize_license_expression",
+]
+
+license_ref_allowed = re.compile("^[A-Za-z0-9.-]*$")
+
+NormalizedLicenseExpression = NewType("NormalizedLicenseExpression", str)
+
+
+class InvalidLicenseExpression(ValueError):
+ """Raised when a license-expression string is invalid
+
+ >>> canonicalize_license_expression("invalid")
+ Traceback (most recent call last):
+ ...
+ packaging.licenses.InvalidLicenseExpression: Invalid license expression: 'invalid'
+ """
+
+
+def canonicalize_license_expression(
+ raw_license_expression: str,
+) -> NormalizedLicenseExpression:
+ if not raw_license_expression:
+ message = f"Invalid license expression: {raw_license_expression!r}"
+ raise InvalidLicenseExpression(message)
+
+ # Pad any parentheses so tokenization can be achieved by merely splitting on
+ # whitespace.
+ license_expression = raw_license_expression.replace("(", " ( ").replace(")", " ) ")
+ licenseref_prefix = "LicenseRef-"
+ license_refs = {
+ ref.lower(): "LicenseRef-" + ref[len(licenseref_prefix) :]
+ for ref in license_expression.split()
+ if ref.lower().startswith(licenseref_prefix.lower())
+ }
+
+ # Normalize to lower case so we can look up licenses/exceptions
+ # and so boolean operators are Python-compatible.
+ license_expression = license_expression.lower()
+
+ tokens = license_expression.split()
+
+ # Rather than implementing boolean logic, we create an expression that Python can
+ # parse. Everything that is not involved with the grammar itself is treated as
+ # `False` and the expression should evaluate as such.
+ python_tokens = []
+ for token in tokens:
+ if token not in {"or", "and", "with", "(", ")"}:
+ python_tokens.append("False")
+ elif token == "with":
+ python_tokens.append("or")
+ elif token == "(" and python_tokens and python_tokens[-1] not in {"or", "and"}:
+ message = f"Invalid license expression: {raw_license_expression!r}"
+ raise InvalidLicenseExpression(message)
+ else:
+ python_tokens.append(token)
+
+ python_expression = " ".join(python_tokens)
+ try:
+ invalid = eval(python_expression, globals(), locals())
+ except Exception:
+ invalid = True
+
+ if invalid is not False:
+ message = f"Invalid license expression: {raw_license_expression!r}"
+ raise InvalidLicenseExpression(message) from None
+
+ # Take a final pass to check for unknown licenses/exceptions.
+ normalized_tokens = []
+ for token in tokens:
+ if token in {"or", "and", "with", "(", ")"}:
+ normalized_tokens.append(token.upper())
+ continue
+
+ if normalized_tokens and normalized_tokens[-1] == "WITH":
+ if token not in EXCEPTIONS:
+ message = f"Unknown license exception: {token!r}"
+ raise InvalidLicenseExpression(message)
+
+ normalized_tokens.append(EXCEPTIONS[token]["id"])
+ else:
+ if token.endswith("+"):
+ final_token = token[:-1]
+ suffix = "+"
+ else:
+ final_token = token
+ suffix = ""
+
+ if final_token.startswith("licenseref-"):
+ if not license_ref_allowed.match(final_token):
+ message = f"Invalid licenseref: {final_token!r}"
+ raise InvalidLicenseExpression(message)
+ normalized_tokens.append(license_refs[final_token] + suffix)
+ else:
+ if final_token not in LICENSES:
+ message = f"Unknown license: {final_token!r}"
+ raise InvalidLicenseExpression(message)
+ normalized_tokens.append(LICENSES[final_token]["id"] + suffix)
+
+ normalized_expression = " ".join(normalized_tokens)
+
+ return cast(
+ NormalizedLicenseExpression,
+ normalized_expression.replace("( ", "(").replace(" )", ")"),
+ )
diff --git a/contrib/python/packaging/py3/packaging/licenses/_spdx.py b/contrib/python/packaging/py3/packaging/licenses/_spdx.py
new file mode 100644
index 00000000000..eac22276a34
--- /dev/null
+++ b/contrib/python/packaging/py3/packaging/licenses/_spdx.py
@@ -0,0 +1,759 @@
+
+from __future__ import annotations
+
+from typing import TypedDict
+
+class SPDXLicense(TypedDict):
+ id: str
+ deprecated: bool
+
+class SPDXException(TypedDict):
+ id: str
+ deprecated: bool
+
+
+VERSION = '3.25.0'
+
+LICENSES: dict[str, SPDXLicense] = {
+ '0bsd': {'id': '0BSD', 'deprecated': False},
+ '3d-slicer-1.0': {'id': '3D-Slicer-1.0', 'deprecated': False},
+ 'aal': {'id': 'AAL', 'deprecated': False},
+ 'abstyles': {'id': 'Abstyles', 'deprecated': False},
+ 'adacore-doc': {'id': 'AdaCore-doc', 'deprecated': False},
+ 'adobe-2006': {'id': 'Adobe-2006', 'deprecated': False},
+ 'adobe-display-postscript': {'id': 'Adobe-Display-PostScript', 'deprecated': False},
+ 'adobe-glyph': {'id': 'Adobe-Glyph', 'deprecated': False},
+ 'adobe-utopia': {'id': 'Adobe-Utopia', 'deprecated': False},
+ 'adsl': {'id': 'ADSL', 'deprecated': False},
+ 'afl-1.1': {'id': 'AFL-1.1', 'deprecated': False},
+ 'afl-1.2': {'id': 'AFL-1.2', 'deprecated': False},
+ 'afl-2.0': {'id': 'AFL-2.0', 'deprecated': False},
+ 'afl-2.1': {'id': 'AFL-2.1', 'deprecated': False},
+ 'afl-3.0': {'id': 'AFL-3.0', 'deprecated': False},
+ 'afmparse': {'id': 'Afmparse', 'deprecated': False},
+ 'agpl-1.0': {'id': 'AGPL-1.0', 'deprecated': True},
+ 'agpl-1.0-only': {'id': 'AGPL-1.0-only', 'deprecated': False},
+ 'agpl-1.0-or-later': {'id': 'AGPL-1.0-or-later', 'deprecated': False},
+ 'agpl-3.0': {'id': 'AGPL-3.0', 'deprecated': True},
+ 'agpl-3.0-only': {'id': 'AGPL-3.0-only', 'deprecated': False},
+ 'agpl-3.0-or-later': {'id': 'AGPL-3.0-or-later', 'deprecated': False},
+ 'aladdin': {'id': 'Aladdin', 'deprecated': False},
+ 'amd-newlib': {'id': 'AMD-newlib', 'deprecated': False},
+ 'amdplpa': {'id': 'AMDPLPA', 'deprecated': False},
+ 'aml': {'id': 'AML', 'deprecated': False},
+ 'aml-glslang': {'id': 'AML-glslang', 'deprecated': False},
+ 'ampas': {'id': 'AMPAS', 'deprecated': False},
+ 'antlr-pd': {'id': 'ANTLR-PD', 'deprecated': False},
+ 'antlr-pd-fallback': {'id': 'ANTLR-PD-fallback', 'deprecated': False},
+ 'any-osi': {'id': 'any-OSI', 'deprecated': False},
+ 'apache-1.0': {'id': 'Apache-1.0', 'deprecated': False},
+ 'apache-1.1': {'id': 'Apache-1.1', 'deprecated': False},
+ 'apache-2.0': {'id': 'Apache-2.0', 'deprecated': False},
+ 'apafml': {'id': 'APAFML', 'deprecated': False},
+ 'apl-1.0': {'id': 'APL-1.0', 'deprecated': False},
+ 'app-s2p': {'id': 'App-s2p', 'deprecated': False},
+ 'apsl-1.0': {'id': 'APSL-1.0', 'deprecated': False},
+ 'apsl-1.1': {'id': 'APSL-1.1', 'deprecated': False},
+ 'apsl-1.2': {'id': 'APSL-1.2', 'deprecated': False},
+ 'apsl-2.0': {'id': 'APSL-2.0', 'deprecated': False},
+ 'arphic-1999': {'id': 'Arphic-1999', 'deprecated': False},
+ 'artistic-1.0': {'id': 'Artistic-1.0', 'deprecated': False},
+ 'artistic-1.0-cl8': {'id': 'Artistic-1.0-cl8', 'deprecated': False},
+ 'artistic-1.0-perl': {'id': 'Artistic-1.0-Perl', 'deprecated': False},
+ 'artistic-2.0': {'id': 'Artistic-2.0', 'deprecated': False},
+ 'aswf-digital-assets-1.0': {'id': 'ASWF-Digital-Assets-1.0', 'deprecated': False},
+ 'aswf-digital-assets-1.1': {'id': 'ASWF-Digital-Assets-1.1', 'deprecated': False},
+ 'baekmuk': {'id': 'Baekmuk', 'deprecated': False},
+ 'bahyph': {'id': 'Bahyph', 'deprecated': False},
+ 'barr': {'id': 'Barr', 'deprecated': False},
+ 'bcrypt-solar-designer': {'id': 'bcrypt-Solar-Designer', 'deprecated': False},
+ 'beerware': {'id': 'Beerware', 'deprecated': False},
+ 'bitstream-charter': {'id': 'Bitstream-Charter', 'deprecated': False},
+ 'bitstream-vera': {'id': 'Bitstream-Vera', 'deprecated': False},
+ 'bittorrent-1.0': {'id': 'BitTorrent-1.0', 'deprecated': False},
+ 'bittorrent-1.1': {'id': 'BitTorrent-1.1', 'deprecated': False},
+ 'blessing': {'id': 'blessing', 'deprecated': False},
+ 'blueoak-1.0.0': {'id': 'BlueOak-1.0.0', 'deprecated': False},
+ 'boehm-gc': {'id': 'Boehm-GC', 'deprecated': False},
+ 'borceux': {'id': 'Borceux', 'deprecated': False},
+ 'brian-gladman-2-clause': {'id': 'Brian-Gladman-2-Clause', 'deprecated': False},
+ 'brian-gladman-3-clause': {'id': 'Brian-Gladman-3-Clause', 'deprecated': False},
+ 'bsd-1-clause': {'id': 'BSD-1-Clause', 'deprecated': False},
+ 'bsd-2-clause': {'id': 'BSD-2-Clause', 'deprecated': False},
+ 'bsd-2-clause-darwin': {'id': 'BSD-2-Clause-Darwin', 'deprecated': False},
+ 'bsd-2-clause-first-lines': {'id': 'BSD-2-Clause-first-lines', 'deprecated': False},
+ 'bsd-2-clause-freebsd': {'id': 'BSD-2-Clause-FreeBSD', 'deprecated': True},
+ 'bsd-2-clause-netbsd': {'id': 'BSD-2-Clause-NetBSD', 'deprecated': True},
+ 'bsd-2-clause-patent': {'id': 'BSD-2-Clause-Patent', 'deprecated': False},
+ 'bsd-2-clause-views': {'id': 'BSD-2-Clause-Views', 'deprecated': False},
+ 'bsd-3-clause': {'id': 'BSD-3-Clause', 'deprecated': False},
+ 'bsd-3-clause-acpica': {'id': 'BSD-3-Clause-acpica', 'deprecated': False},
+ 'bsd-3-clause-attribution': {'id': 'BSD-3-Clause-Attribution', 'deprecated': False},
+ 'bsd-3-clause-clear': {'id': 'BSD-3-Clause-Clear', 'deprecated': False},
+ 'bsd-3-clause-flex': {'id': 'BSD-3-Clause-flex', 'deprecated': False},
+ 'bsd-3-clause-hp': {'id': 'BSD-3-Clause-HP', 'deprecated': False},
+ 'bsd-3-clause-lbnl': {'id': 'BSD-3-Clause-LBNL', 'deprecated': False},
+ 'bsd-3-clause-modification': {'id': 'BSD-3-Clause-Modification', 'deprecated': False},
+ 'bsd-3-clause-no-military-license': {'id': 'BSD-3-Clause-No-Military-License', 'deprecated': False},
+ 'bsd-3-clause-no-nuclear-license': {'id': 'BSD-3-Clause-No-Nuclear-License', 'deprecated': False},
+ 'bsd-3-clause-no-nuclear-license-2014': {'id': 'BSD-3-Clause-No-Nuclear-License-2014', 'deprecated': False},
+ 'bsd-3-clause-no-nuclear-warranty': {'id': 'BSD-3-Clause-No-Nuclear-Warranty', 'deprecated': False},
+ 'bsd-3-clause-open-mpi': {'id': 'BSD-3-Clause-Open-MPI', 'deprecated': False},
+ 'bsd-3-clause-sun': {'id': 'BSD-3-Clause-Sun', 'deprecated': False},
+ 'bsd-4-clause': {'id': 'BSD-4-Clause', 'deprecated': False},
+ 'bsd-4-clause-shortened': {'id': 'BSD-4-Clause-Shortened', 'deprecated': False},
+ 'bsd-4-clause-uc': {'id': 'BSD-4-Clause-UC', 'deprecated': False},
+ 'bsd-4.3reno': {'id': 'BSD-4.3RENO', 'deprecated': False},
+ 'bsd-4.3tahoe': {'id': 'BSD-4.3TAHOE', 'deprecated': False},
+ 'bsd-advertising-acknowledgement': {'id': 'BSD-Advertising-Acknowledgement', 'deprecated': False},
+ 'bsd-attribution-hpnd-disclaimer': {'id': 'BSD-Attribution-HPND-disclaimer', 'deprecated': False},
+ 'bsd-inferno-nettverk': {'id': 'BSD-Inferno-Nettverk', 'deprecated': False},
+ 'bsd-protection': {'id': 'BSD-Protection', 'deprecated': False},
+ 'bsd-source-beginning-file': {'id': 'BSD-Source-beginning-file', 'deprecated': False},
+ 'bsd-source-code': {'id': 'BSD-Source-Code', 'deprecated': False},
+ 'bsd-systemics': {'id': 'BSD-Systemics', 'deprecated': False},
+ 'bsd-systemics-w3works': {'id': 'BSD-Systemics-W3Works', 'deprecated': False},
+ 'bsl-1.0': {'id': 'BSL-1.0', 'deprecated': False},
+ 'busl-1.1': {'id': 'BUSL-1.1', 'deprecated': False},
+ 'bzip2-1.0.5': {'id': 'bzip2-1.0.5', 'deprecated': True},
+ 'bzip2-1.0.6': {'id': 'bzip2-1.0.6', 'deprecated': False},
+ 'c-uda-1.0': {'id': 'C-UDA-1.0', 'deprecated': False},
+ 'cal-1.0': {'id': 'CAL-1.0', 'deprecated': False},
+ 'cal-1.0-combined-work-exception': {'id': 'CAL-1.0-Combined-Work-Exception', 'deprecated': False},
+ 'caldera': {'id': 'Caldera', 'deprecated': False},
+ 'caldera-no-preamble': {'id': 'Caldera-no-preamble', 'deprecated': False},
+ 'catharon': {'id': 'Catharon', 'deprecated': False},
+ 'catosl-1.1': {'id': 'CATOSL-1.1', 'deprecated': False},
+ 'cc-by-1.0': {'id': 'CC-BY-1.0', 'deprecated': False},
+ 'cc-by-2.0': {'id': 'CC-BY-2.0', 'deprecated': False},
+ 'cc-by-2.5': {'id': 'CC-BY-2.5', 'deprecated': False},
+ 'cc-by-2.5-au': {'id': 'CC-BY-2.5-AU', 'deprecated': False},
+ 'cc-by-3.0': {'id': 'CC-BY-3.0', 'deprecated': False},
+ 'cc-by-3.0-at': {'id': 'CC-BY-3.0-AT', 'deprecated': False},
+ 'cc-by-3.0-au': {'id': 'CC-BY-3.0-AU', 'deprecated': False},
+ 'cc-by-3.0-de': {'id': 'CC-BY-3.0-DE', 'deprecated': False},
+ 'cc-by-3.0-igo': {'id': 'CC-BY-3.0-IGO', 'deprecated': False},
+ 'cc-by-3.0-nl': {'id': 'CC-BY-3.0-NL', 'deprecated': False},
+ 'cc-by-3.0-us': {'id': 'CC-BY-3.0-US', 'deprecated': False},
+ 'cc-by-4.0': {'id': 'CC-BY-4.0', 'deprecated': False},
+ 'cc-by-nc-1.0': {'id': 'CC-BY-NC-1.0', 'deprecated': False},
+ 'cc-by-nc-2.0': {'id': 'CC-BY-NC-2.0', 'deprecated': False},
+ 'cc-by-nc-2.5': {'id': 'CC-BY-NC-2.5', 'deprecated': False},
+ 'cc-by-nc-3.0': {'id': 'CC-BY-NC-3.0', 'deprecated': False},
+ 'cc-by-nc-3.0-de': {'id': 'CC-BY-NC-3.0-DE', 'deprecated': False},
+ 'cc-by-nc-4.0': {'id': 'CC-BY-NC-4.0', 'deprecated': False},
+ 'cc-by-nc-nd-1.0': {'id': 'CC-BY-NC-ND-1.0', 'deprecated': False},
+ 'cc-by-nc-nd-2.0': {'id': 'CC-BY-NC-ND-2.0', 'deprecated': False},
+ 'cc-by-nc-nd-2.5': {'id': 'CC-BY-NC-ND-2.5', 'deprecated': False},
+ 'cc-by-nc-nd-3.0': {'id': 'CC-BY-NC-ND-3.0', 'deprecated': False},
+ 'cc-by-nc-nd-3.0-de': {'id': 'CC-BY-NC-ND-3.0-DE', 'deprecated': False},
+ 'cc-by-nc-nd-3.0-igo': {'id': 'CC-BY-NC-ND-3.0-IGO', 'deprecated': False},
+ 'cc-by-nc-nd-4.0': {'id': 'CC-BY-NC-ND-4.0', 'deprecated': False},
+ 'cc-by-nc-sa-1.0': {'id': 'CC-BY-NC-SA-1.0', 'deprecated': False},
+ 'cc-by-nc-sa-2.0': {'id': 'CC-BY-NC-SA-2.0', 'deprecated': False},
+ 'cc-by-nc-sa-2.0-de': {'id': 'CC-BY-NC-SA-2.0-DE', 'deprecated': False},
+ 'cc-by-nc-sa-2.0-fr': {'id': 'CC-BY-NC-SA-2.0-FR', 'deprecated': False},
+ 'cc-by-nc-sa-2.0-uk': {'id': 'CC-BY-NC-SA-2.0-UK', 'deprecated': False},
+ 'cc-by-nc-sa-2.5': {'id': 'CC-BY-NC-SA-2.5', 'deprecated': False},
+ 'cc-by-nc-sa-3.0': {'id': 'CC-BY-NC-SA-3.0', 'deprecated': False},
+ 'cc-by-nc-sa-3.0-de': {'id': 'CC-BY-NC-SA-3.0-DE', 'deprecated': False},
+ 'cc-by-nc-sa-3.0-igo': {'id': 'CC-BY-NC-SA-3.0-IGO', 'deprecated': False},
+ 'cc-by-nc-sa-4.0': {'id': 'CC-BY-NC-SA-4.0', 'deprecated': False},
+ 'cc-by-nd-1.0': {'id': 'CC-BY-ND-1.0', 'deprecated': False},
+ 'cc-by-nd-2.0': {'id': 'CC-BY-ND-2.0', 'deprecated': False},
+ 'cc-by-nd-2.5': {'id': 'CC-BY-ND-2.5', 'deprecated': False},
+ 'cc-by-nd-3.0': {'id': 'CC-BY-ND-3.0', 'deprecated': False},
+ 'cc-by-nd-3.0-de': {'id': 'CC-BY-ND-3.0-DE', 'deprecated': False},
+ 'cc-by-nd-4.0': {'id': 'CC-BY-ND-4.0', 'deprecated': False},
+ 'cc-by-sa-1.0': {'id': 'CC-BY-SA-1.0', 'deprecated': False},
+ 'cc-by-sa-2.0': {'id': 'CC-BY-SA-2.0', 'deprecated': False},
+ 'cc-by-sa-2.0-uk': {'id': 'CC-BY-SA-2.0-UK', 'deprecated': False},
+ 'cc-by-sa-2.1-jp': {'id': 'CC-BY-SA-2.1-JP', 'deprecated': False},
+ 'cc-by-sa-2.5': {'id': 'CC-BY-SA-2.5', 'deprecated': False},
+ 'cc-by-sa-3.0': {'id': 'CC-BY-SA-3.0', 'deprecated': False},
+ 'cc-by-sa-3.0-at': {'id': 'CC-BY-SA-3.0-AT', 'deprecated': False},
+ 'cc-by-sa-3.0-de': {'id': 'CC-BY-SA-3.0-DE', 'deprecated': False},
+ 'cc-by-sa-3.0-igo': {'id': 'CC-BY-SA-3.0-IGO', 'deprecated': False},
+ 'cc-by-sa-4.0': {'id': 'CC-BY-SA-4.0', 'deprecated': False},
+ 'cc-pddc': {'id': 'CC-PDDC', 'deprecated': False},
+ 'cc0-1.0': {'id': 'CC0-1.0', 'deprecated': False},
+ 'cddl-1.0': {'id': 'CDDL-1.0', 'deprecated': False},
+ 'cddl-1.1': {'id': 'CDDL-1.1', 'deprecated': False},
+ 'cdl-1.0': {'id': 'CDL-1.0', 'deprecated': False},
+ 'cdla-permissive-1.0': {'id': 'CDLA-Permissive-1.0', 'deprecated': False},
+ 'cdla-permissive-2.0': {'id': 'CDLA-Permissive-2.0', 'deprecated': False},
+ 'cdla-sharing-1.0': {'id': 'CDLA-Sharing-1.0', 'deprecated': False},
+ 'cecill-1.0': {'id': 'CECILL-1.0', 'deprecated': False},
+ 'cecill-1.1': {'id': 'CECILL-1.1', 'deprecated': False},
+ 'cecill-2.0': {'id': 'CECILL-2.0', 'deprecated': False},
+ 'cecill-2.1': {'id': 'CECILL-2.1', 'deprecated': False},
+ 'cecill-b': {'id': 'CECILL-B', 'deprecated': False},
+ 'cecill-c': {'id': 'CECILL-C', 'deprecated': False},
+ 'cern-ohl-1.1': {'id': 'CERN-OHL-1.1', 'deprecated': False},
+ 'cern-ohl-1.2': {'id': 'CERN-OHL-1.2', 'deprecated': False},
+ 'cern-ohl-p-2.0': {'id': 'CERN-OHL-P-2.0', 'deprecated': False},
+ 'cern-ohl-s-2.0': {'id': 'CERN-OHL-S-2.0', 'deprecated': False},
+ 'cern-ohl-w-2.0': {'id': 'CERN-OHL-W-2.0', 'deprecated': False},
+ 'cfitsio': {'id': 'CFITSIO', 'deprecated': False},
+ 'check-cvs': {'id': 'check-cvs', 'deprecated': False},
+ 'checkmk': {'id': 'checkmk', 'deprecated': False},
+ 'clartistic': {'id': 'ClArtistic', 'deprecated': False},
+ 'clips': {'id': 'Clips', 'deprecated': False},
+ 'cmu-mach': {'id': 'CMU-Mach', 'deprecated': False},
+ 'cmu-mach-nodoc': {'id': 'CMU-Mach-nodoc', 'deprecated': False},
+ 'cnri-jython': {'id': 'CNRI-Jython', 'deprecated': False},
+ 'cnri-python': {'id': 'CNRI-Python', 'deprecated': False},
+ 'cnri-python-gpl-compatible': {'id': 'CNRI-Python-GPL-Compatible', 'deprecated': False},
+ 'coil-1.0': {'id': 'COIL-1.0', 'deprecated': False},
+ 'community-spec-1.0': {'id': 'Community-Spec-1.0', 'deprecated': False},
+ 'condor-1.1': {'id': 'Condor-1.1', 'deprecated': False},
+ 'copyleft-next-0.3.0': {'id': 'copyleft-next-0.3.0', 'deprecated': False},
+ 'copyleft-next-0.3.1': {'id': 'copyleft-next-0.3.1', 'deprecated': False},
+ 'cornell-lossless-jpeg': {'id': 'Cornell-Lossless-JPEG', 'deprecated': False},
+ 'cpal-1.0': {'id': 'CPAL-1.0', 'deprecated': False},
+ 'cpl-1.0': {'id': 'CPL-1.0', 'deprecated': False},
+ 'cpol-1.02': {'id': 'CPOL-1.02', 'deprecated': False},
+ 'cronyx': {'id': 'Cronyx', 'deprecated': False},
+ 'crossword': {'id': 'Crossword', 'deprecated': False},
+ 'crystalstacker': {'id': 'CrystalStacker', 'deprecated': False},
+ 'cua-opl-1.0': {'id': 'CUA-OPL-1.0', 'deprecated': False},
+ 'cube': {'id': 'Cube', 'deprecated': False},
+ 'curl': {'id': 'curl', 'deprecated': False},
+ 'cve-tou': {'id': 'cve-tou', 'deprecated': False},
+ 'd-fsl-1.0': {'id': 'D-FSL-1.0', 'deprecated': False},
+ 'dec-3-clause': {'id': 'DEC-3-Clause', 'deprecated': False},
+ 'diffmark': {'id': 'diffmark', 'deprecated': False},
+ 'dl-de-by-2.0': {'id': 'DL-DE-BY-2.0', 'deprecated': False},
+ 'dl-de-zero-2.0': {'id': 'DL-DE-ZERO-2.0', 'deprecated': False},
+ 'doc': {'id': 'DOC', 'deprecated': False},
+ 'docbook-schema': {'id': 'DocBook-Schema', 'deprecated': False},
+ 'docbook-xml': {'id': 'DocBook-XML', 'deprecated': False},
+ 'dotseqn': {'id': 'Dotseqn', 'deprecated': False},
+ 'drl-1.0': {'id': 'DRL-1.0', 'deprecated': False},
+ 'drl-1.1': {'id': 'DRL-1.1', 'deprecated': False},
+ 'dsdp': {'id': 'DSDP', 'deprecated': False},
+ 'dtoa': {'id': 'dtoa', 'deprecated': False},
+ 'dvipdfm': {'id': 'dvipdfm', 'deprecated': False},
+ 'ecl-1.0': {'id': 'ECL-1.0', 'deprecated': False},
+ 'ecl-2.0': {'id': 'ECL-2.0', 'deprecated': False},
+ 'ecos-2.0': {'id': 'eCos-2.0', 'deprecated': True},
+ 'efl-1.0': {'id': 'EFL-1.0', 'deprecated': False},
+ 'efl-2.0': {'id': 'EFL-2.0', 'deprecated': False},
+ 'egenix': {'id': 'eGenix', 'deprecated': False},
+ 'elastic-2.0': {'id': 'Elastic-2.0', 'deprecated': False},
+ 'entessa': {'id': 'Entessa', 'deprecated': False},
+ 'epics': {'id': 'EPICS', 'deprecated': False},
+ 'epl-1.0': {'id': 'EPL-1.0', 'deprecated': False},
+ 'epl-2.0': {'id': 'EPL-2.0', 'deprecated': False},
+ 'erlpl-1.1': {'id': 'ErlPL-1.1', 'deprecated': False},
+ 'etalab-2.0': {'id': 'etalab-2.0', 'deprecated': False},
+ 'eudatagrid': {'id': 'EUDatagrid', 'deprecated': False},
+ 'eupl-1.0': {'id': 'EUPL-1.0', 'deprecated': False},
+ 'eupl-1.1': {'id': 'EUPL-1.1', 'deprecated': False},
+ 'eupl-1.2': {'id': 'EUPL-1.2', 'deprecated': False},
+ 'eurosym': {'id': 'Eurosym', 'deprecated': False},
+ 'fair': {'id': 'Fair', 'deprecated': False},
+ 'fbm': {'id': 'FBM', 'deprecated': False},
+ 'fdk-aac': {'id': 'FDK-AAC', 'deprecated': False},
+ 'ferguson-twofish': {'id': 'Ferguson-Twofish', 'deprecated': False},
+ 'frameworx-1.0': {'id': 'Frameworx-1.0', 'deprecated': False},
+ 'freebsd-doc': {'id': 'FreeBSD-DOC', 'deprecated': False},
+ 'freeimage': {'id': 'FreeImage', 'deprecated': False},
+ 'fsfap': {'id': 'FSFAP', 'deprecated': False},
+ 'fsfap-no-warranty-disclaimer': {'id': 'FSFAP-no-warranty-disclaimer', 'deprecated': False},
+ 'fsful': {'id': 'FSFUL', 'deprecated': False},
+ 'fsfullr': {'id': 'FSFULLR', 'deprecated': False},
+ 'fsfullrwd': {'id': 'FSFULLRWD', 'deprecated': False},
+ 'ftl': {'id': 'FTL', 'deprecated': False},
+ 'furuseth': {'id': 'Furuseth', 'deprecated': False},
+ 'fwlw': {'id': 'fwlw', 'deprecated': False},
+ 'gcr-docs': {'id': 'GCR-docs', 'deprecated': False},
+ 'gd': {'id': 'GD', 'deprecated': False},
+ 'gfdl-1.1': {'id': 'GFDL-1.1', 'deprecated': True},
+ 'gfdl-1.1-invariants-only': {'id': 'GFDL-1.1-invariants-only', 'deprecated': False},
+ 'gfdl-1.1-invariants-or-later': {'id': 'GFDL-1.1-invariants-or-later', 'deprecated': False},
+ 'gfdl-1.1-no-invariants-only': {'id': 'GFDL-1.1-no-invariants-only', 'deprecated': False},
+ 'gfdl-1.1-no-invariants-or-later': {'id': 'GFDL-1.1-no-invariants-or-later', 'deprecated': False},
+ 'gfdl-1.1-only': {'id': 'GFDL-1.1-only', 'deprecated': False},
+ 'gfdl-1.1-or-later': {'id': 'GFDL-1.1-or-later', 'deprecated': False},
+ 'gfdl-1.2': {'id': 'GFDL-1.2', 'deprecated': True},
+ 'gfdl-1.2-invariants-only': {'id': 'GFDL-1.2-invariants-only', 'deprecated': False},
+ 'gfdl-1.2-invariants-or-later': {'id': 'GFDL-1.2-invariants-or-later', 'deprecated': False},
+ 'gfdl-1.2-no-invariants-only': {'id': 'GFDL-1.2-no-invariants-only', 'deprecated': False},
+ 'gfdl-1.2-no-invariants-or-later': {'id': 'GFDL-1.2-no-invariants-or-later', 'deprecated': False},
+ 'gfdl-1.2-only': {'id': 'GFDL-1.2-only', 'deprecated': False},
+ 'gfdl-1.2-or-later': {'id': 'GFDL-1.2-or-later', 'deprecated': False},
+ 'gfdl-1.3': {'id': 'GFDL-1.3', 'deprecated': True},
+ 'gfdl-1.3-invariants-only': {'id': 'GFDL-1.3-invariants-only', 'deprecated': False},
+ 'gfdl-1.3-invariants-or-later': {'id': 'GFDL-1.3-invariants-or-later', 'deprecated': False},
+ 'gfdl-1.3-no-invariants-only': {'id': 'GFDL-1.3-no-invariants-only', 'deprecated': False},
+ 'gfdl-1.3-no-invariants-or-later': {'id': 'GFDL-1.3-no-invariants-or-later', 'deprecated': False},
+ 'gfdl-1.3-only': {'id': 'GFDL-1.3-only', 'deprecated': False},
+ 'gfdl-1.3-or-later': {'id': 'GFDL-1.3-or-later', 'deprecated': False},
+ 'giftware': {'id': 'Giftware', 'deprecated': False},
+ 'gl2ps': {'id': 'GL2PS', 'deprecated': False},
+ 'glide': {'id': 'Glide', 'deprecated': False},
+ 'glulxe': {'id': 'Glulxe', 'deprecated': False},
+ 'glwtpl': {'id': 'GLWTPL', 'deprecated': False},
+ 'gnuplot': {'id': 'gnuplot', 'deprecated': False},
+ 'gpl-1.0': {'id': 'GPL-1.0', 'deprecated': True},
+ 'gpl-1.0+': {'id': 'GPL-1.0+', 'deprecated': True},
+ 'gpl-1.0-only': {'id': 'GPL-1.0-only', 'deprecated': False},
+ 'gpl-1.0-or-later': {'id': 'GPL-1.0-or-later', 'deprecated': False},
+ 'gpl-2.0': {'id': 'GPL-2.0', 'deprecated': True},
+ 'gpl-2.0+': {'id': 'GPL-2.0+', 'deprecated': True},
+ 'gpl-2.0-only': {'id': 'GPL-2.0-only', 'deprecated': False},
+ 'gpl-2.0-or-later': {'id': 'GPL-2.0-or-later', 'deprecated': False},
+ 'gpl-2.0-with-autoconf-exception': {'id': 'GPL-2.0-with-autoconf-exception', 'deprecated': True},
+ 'gpl-2.0-with-bison-exception': {'id': 'GPL-2.0-with-bison-exception', 'deprecated': True},
+ 'gpl-2.0-with-classpath-exception': {'id': 'GPL-2.0-with-classpath-exception', 'deprecated': True},
+ 'gpl-2.0-with-font-exception': {'id': 'GPL-2.0-with-font-exception', 'deprecated': True},
+ 'gpl-2.0-with-gcc-exception': {'id': 'GPL-2.0-with-GCC-exception', 'deprecated': True},
+ 'gpl-3.0': {'id': 'GPL-3.0', 'deprecated': True},
+ 'gpl-3.0+': {'id': 'GPL-3.0+', 'deprecated': True},
+ 'gpl-3.0-only': {'id': 'GPL-3.0-only', 'deprecated': False},
+ 'gpl-3.0-or-later': {'id': 'GPL-3.0-or-later', 'deprecated': False},
+ 'gpl-3.0-with-autoconf-exception': {'id': 'GPL-3.0-with-autoconf-exception', 'deprecated': True},
+ 'gpl-3.0-with-gcc-exception': {'id': 'GPL-3.0-with-GCC-exception', 'deprecated': True},
+ 'graphics-gems': {'id': 'Graphics-Gems', 'deprecated': False},
+ 'gsoap-1.3b': {'id': 'gSOAP-1.3b', 'deprecated': False},
+ 'gtkbook': {'id': 'gtkbook', 'deprecated': False},
+ 'gutmann': {'id': 'Gutmann', 'deprecated': False},
+ 'haskellreport': {'id': 'HaskellReport', 'deprecated': False},
+ 'hdparm': {'id': 'hdparm', 'deprecated': False},
+ 'hidapi': {'id': 'HIDAPI', 'deprecated': False},
+ 'hippocratic-2.1': {'id': 'Hippocratic-2.1', 'deprecated': False},
+ 'hp-1986': {'id': 'HP-1986', 'deprecated': False},
+ 'hp-1989': {'id': 'HP-1989', 'deprecated': False},
+ 'hpnd': {'id': 'HPND', 'deprecated': False},
+ 'hpnd-dec': {'id': 'HPND-DEC', 'deprecated': False},
+ 'hpnd-doc': {'id': 'HPND-doc', 'deprecated': False},
+ 'hpnd-doc-sell': {'id': 'HPND-doc-sell', 'deprecated': False},
+ 'hpnd-export-us': {'id': 'HPND-export-US', 'deprecated': False},
+ 'hpnd-export-us-acknowledgement': {'id': 'HPND-export-US-acknowledgement', 'deprecated': False},
+ 'hpnd-export-us-modify': {'id': 'HPND-export-US-modify', 'deprecated': False},
+ 'hpnd-export2-us': {'id': 'HPND-export2-US', 'deprecated': False},
+ 'hpnd-fenneberg-livingston': {'id': 'HPND-Fenneberg-Livingston', 'deprecated': False},
+ 'hpnd-inria-imag': {'id': 'HPND-INRIA-IMAG', 'deprecated': False},
+ 'hpnd-intel': {'id': 'HPND-Intel', 'deprecated': False},
+ 'hpnd-kevlin-henney': {'id': 'HPND-Kevlin-Henney', 'deprecated': False},
+ 'hpnd-markus-kuhn': {'id': 'HPND-Markus-Kuhn', 'deprecated': False},
+ 'hpnd-merchantability-variant': {'id': 'HPND-merchantability-variant', 'deprecated': False},
+ 'hpnd-mit-disclaimer': {'id': 'HPND-MIT-disclaimer', 'deprecated': False},
+ 'hpnd-netrek': {'id': 'HPND-Netrek', 'deprecated': False},
+ 'hpnd-pbmplus': {'id': 'HPND-Pbmplus', 'deprecated': False},
+ 'hpnd-sell-mit-disclaimer-xserver': {'id': 'HPND-sell-MIT-disclaimer-xserver', 'deprecated': False},
+ 'hpnd-sell-regexpr': {'id': 'HPND-sell-regexpr', 'deprecated': False},
+ 'hpnd-sell-variant': {'id': 'HPND-sell-variant', 'deprecated': False},
+ 'hpnd-sell-variant-mit-disclaimer': {'id': 'HPND-sell-variant-MIT-disclaimer', 'deprecated': False},
+ 'hpnd-sell-variant-mit-disclaimer-rev': {'id': 'HPND-sell-variant-MIT-disclaimer-rev', 'deprecated': False},
+ 'hpnd-uc': {'id': 'HPND-UC', 'deprecated': False},
+ 'hpnd-uc-export-us': {'id': 'HPND-UC-export-US', 'deprecated': False},
+ 'htmltidy': {'id': 'HTMLTIDY', 'deprecated': False},
+ 'ibm-pibs': {'id': 'IBM-pibs', 'deprecated': False},
+ 'icu': {'id': 'ICU', 'deprecated': False},
+ 'iec-code-components-eula': {'id': 'IEC-Code-Components-EULA', 'deprecated': False},
+ 'ijg': {'id': 'IJG', 'deprecated': False},
+ 'ijg-short': {'id': 'IJG-short', 'deprecated': False},
+ 'imagemagick': {'id': 'ImageMagick', 'deprecated': False},
+ 'imatix': {'id': 'iMatix', 'deprecated': False},
+ 'imlib2': {'id': 'Imlib2', 'deprecated': False},
+ 'info-zip': {'id': 'Info-ZIP', 'deprecated': False},
+ 'inner-net-2.0': {'id': 'Inner-Net-2.0', 'deprecated': False},
+ 'intel': {'id': 'Intel', 'deprecated': False},
+ 'intel-acpi': {'id': 'Intel-ACPI', 'deprecated': False},
+ 'interbase-1.0': {'id': 'Interbase-1.0', 'deprecated': False},
+ 'ipa': {'id': 'IPA', 'deprecated': False},
+ 'ipl-1.0': {'id': 'IPL-1.0', 'deprecated': False},
+ 'isc': {'id': 'ISC', 'deprecated': False},
+ 'isc-veillard': {'id': 'ISC-Veillard', 'deprecated': False},
+ 'jam': {'id': 'Jam', 'deprecated': False},
+ 'jasper-2.0': {'id': 'JasPer-2.0', 'deprecated': False},
+ 'jpl-image': {'id': 'JPL-image', 'deprecated': False},
+ 'jpnic': {'id': 'JPNIC', 'deprecated': False},
+ 'json': {'id': 'JSON', 'deprecated': False},
+ 'kastrup': {'id': 'Kastrup', 'deprecated': False},
+ 'kazlib': {'id': 'Kazlib', 'deprecated': False},
+ 'knuth-ctan': {'id': 'Knuth-CTAN', 'deprecated': False},
+ 'lal-1.2': {'id': 'LAL-1.2', 'deprecated': False},
+ 'lal-1.3': {'id': 'LAL-1.3', 'deprecated': False},
+ 'latex2e': {'id': 'Latex2e', 'deprecated': False},
+ 'latex2e-translated-notice': {'id': 'Latex2e-translated-notice', 'deprecated': False},
+ 'leptonica': {'id': 'Leptonica', 'deprecated': False},
+ 'lgpl-2.0': {'id': 'LGPL-2.0', 'deprecated': True},
+ 'lgpl-2.0+': {'id': 'LGPL-2.0+', 'deprecated': True},
+ 'lgpl-2.0-only': {'id': 'LGPL-2.0-only', 'deprecated': False},
+ 'lgpl-2.0-or-later': {'id': 'LGPL-2.0-or-later', 'deprecated': False},
+ 'lgpl-2.1': {'id': 'LGPL-2.1', 'deprecated': True},
+ 'lgpl-2.1+': {'id': 'LGPL-2.1+', 'deprecated': True},
+ 'lgpl-2.1-only': {'id': 'LGPL-2.1-only', 'deprecated': False},
+ 'lgpl-2.1-or-later': {'id': 'LGPL-2.1-or-later', 'deprecated': False},
+ 'lgpl-3.0': {'id': 'LGPL-3.0', 'deprecated': True},
+ 'lgpl-3.0+': {'id': 'LGPL-3.0+', 'deprecated': True},
+ 'lgpl-3.0-only': {'id': 'LGPL-3.0-only', 'deprecated': False},
+ 'lgpl-3.0-or-later': {'id': 'LGPL-3.0-or-later', 'deprecated': False},
+ 'lgpllr': {'id': 'LGPLLR', 'deprecated': False},
+ 'libpng': {'id': 'Libpng', 'deprecated': False},
+ 'libpng-2.0': {'id': 'libpng-2.0', 'deprecated': False},
+ 'libselinux-1.0': {'id': 'libselinux-1.0', 'deprecated': False},
+ 'libtiff': {'id': 'libtiff', 'deprecated': False},
+ 'libutil-david-nugent': {'id': 'libutil-David-Nugent', 'deprecated': False},
+ 'liliq-p-1.1': {'id': 'LiLiQ-P-1.1', 'deprecated': False},
+ 'liliq-r-1.1': {'id': 'LiLiQ-R-1.1', 'deprecated': False},
+ 'liliq-rplus-1.1': {'id': 'LiLiQ-Rplus-1.1', 'deprecated': False},
+ 'linux-man-pages-1-para': {'id': 'Linux-man-pages-1-para', 'deprecated': False},
+ 'linux-man-pages-copyleft': {'id': 'Linux-man-pages-copyleft', 'deprecated': False},
+ 'linux-man-pages-copyleft-2-para': {'id': 'Linux-man-pages-copyleft-2-para', 'deprecated': False},
+ 'linux-man-pages-copyleft-var': {'id': 'Linux-man-pages-copyleft-var', 'deprecated': False},
+ 'linux-openib': {'id': 'Linux-OpenIB', 'deprecated': False},
+ 'loop': {'id': 'LOOP', 'deprecated': False},
+ 'lpd-document': {'id': 'LPD-document', 'deprecated': False},
+ 'lpl-1.0': {'id': 'LPL-1.0', 'deprecated': False},
+ 'lpl-1.02': {'id': 'LPL-1.02', 'deprecated': False},
+ 'lppl-1.0': {'id': 'LPPL-1.0', 'deprecated': False},
+ 'lppl-1.1': {'id': 'LPPL-1.1', 'deprecated': False},
+ 'lppl-1.2': {'id': 'LPPL-1.2', 'deprecated': False},
+ 'lppl-1.3a': {'id': 'LPPL-1.3a', 'deprecated': False},
+ 'lppl-1.3c': {'id': 'LPPL-1.3c', 'deprecated': False},
+ 'lsof': {'id': 'lsof', 'deprecated': False},
+ 'lucida-bitmap-fonts': {'id': 'Lucida-Bitmap-Fonts', 'deprecated': False},
+ 'lzma-sdk-9.11-to-9.20': {'id': 'LZMA-SDK-9.11-to-9.20', 'deprecated': False},
+ 'lzma-sdk-9.22': {'id': 'LZMA-SDK-9.22', 'deprecated': False},
+ 'mackerras-3-clause': {'id': 'Mackerras-3-Clause', 'deprecated': False},
+ 'mackerras-3-clause-acknowledgment': {'id': 'Mackerras-3-Clause-acknowledgment', 'deprecated': False},
+ 'magaz': {'id': 'magaz', 'deprecated': False},
+ 'mailprio': {'id': 'mailprio', 'deprecated': False},
+ 'makeindex': {'id': 'MakeIndex', 'deprecated': False},
+ 'martin-birgmeier': {'id': 'Martin-Birgmeier', 'deprecated': False},
+ 'mcphee-slideshow': {'id': 'McPhee-slideshow', 'deprecated': False},
+ 'metamail': {'id': 'metamail', 'deprecated': False},
+ 'minpack': {'id': 'Minpack', 'deprecated': False},
+ 'miros': {'id': 'MirOS', 'deprecated': False},
+ 'mit': {'id': 'MIT', 'deprecated': False},
+ 'mit-0': {'id': 'MIT-0', 'deprecated': False},
+ 'mit-advertising': {'id': 'MIT-advertising', 'deprecated': False},
+ 'mit-cmu': {'id': 'MIT-CMU', 'deprecated': False},
+ 'mit-enna': {'id': 'MIT-enna', 'deprecated': False},
+ 'mit-feh': {'id': 'MIT-feh', 'deprecated': False},
+ 'mit-festival': {'id': 'MIT-Festival', 'deprecated': False},
+ 'mit-khronos-old': {'id': 'MIT-Khronos-old', 'deprecated': False},
+ 'mit-modern-variant': {'id': 'MIT-Modern-Variant', 'deprecated': False},
+ 'mit-open-group': {'id': 'MIT-open-group', 'deprecated': False},
+ 'mit-testregex': {'id': 'MIT-testregex', 'deprecated': False},
+ 'mit-wu': {'id': 'MIT-Wu', 'deprecated': False},
+ 'mitnfa': {'id': 'MITNFA', 'deprecated': False},
+ 'mmixware': {'id': 'MMIXware', 'deprecated': False},
+ 'motosoto': {'id': 'Motosoto', 'deprecated': False},
+ 'mpeg-ssg': {'id': 'MPEG-SSG', 'deprecated': False},
+ 'mpi-permissive': {'id': 'mpi-permissive', 'deprecated': False},
+ 'mpich2': {'id': 'mpich2', 'deprecated': False},
+ 'mpl-1.0': {'id': 'MPL-1.0', 'deprecated': False},
+ 'mpl-1.1': {'id': 'MPL-1.1', 'deprecated': False},
+ 'mpl-2.0': {'id': 'MPL-2.0', 'deprecated': False},
+ 'mpl-2.0-no-copyleft-exception': {'id': 'MPL-2.0-no-copyleft-exception', 'deprecated': False},
+ 'mplus': {'id': 'mplus', 'deprecated': False},
+ 'ms-lpl': {'id': 'MS-LPL', 'deprecated': False},
+ 'ms-pl': {'id': 'MS-PL', 'deprecated': False},
+ 'ms-rl': {'id': 'MS-RL', 'deprecated': False},
+ 'mtll': {'id': 'MTLL', 'deprecated': False},
+ 'mulanpsl-1.0': {'id': 'MulanPSL-1.0', 'deprecated': False},
+ 'mulanpsl-2.0': {'id': 'MulanPSL-2.0', 'deprecated': False},
+ 'multics': {'id': 'Multics', 'deprecated': False},
+ 'mup': {'id': 'Mup', 'deprecated': False},
+ 'naist-2003': {'id': 'NAIST-2003', 'deprecated': False},
+ 'nasa-1.3': {'id': 'NASA-1.3', 'deprecated': False},
+ 'naumen': {'id': 'Naumen', 'deprecated': False},
+ 'nbpl-1.0': {'id': 'NBPL-1.0', 'deprecated': False},
+ 'ncbi-pd': {'id': 'NCBI-PD', 'deprecated': False},
+ 'ncgl-uk-2.0': {'id': 'NCGL-UK-2.0', 'deprecated': False},
+ 'ncl': {'id': 'NCL', 'deprecated': False},
+ 'ncsa': {'id': 'NCSA', 'deprecated': False},
+ 'net-snmp': {'id': 'Net-SNMP', 'deprecated': True},
+ 'netcdf': {'id': 'NetCDF', 'deprecated': False},
+ 'newsletr': {'id': 'Newsletr', 'deprecated': False},
+ 'ngpl': {'id': 'NGPL', 'deprecated': False},
+ 'nicta-1.0': {'id': 'NICTA-1.0', 'deprecated': False},
+ 'nist-pd': {'id': 'NIST-PD', 'deprecated': False},
+ 'nist-pd-fallback': {'id': 'NIST-PD-fallback', 'deprecated': False},
+ 'nist-software': {'id': 'NIST-Software', 'deprecated': False},
+ 'nlod-1.0': {'id': 'NLOD-1.0', 'deprecated': False},
+ 'nlod-2.0': {'id': 'NLOD-2.0', 'deprecated': False},
+ 'nlpl': {'id': 'NLPL', 'deprecated': False},
+ 'nokia': {'id': 'Nokia', 'deprecated': False},
+ 'nosl': {'id': 'NOSL', 'deprecated': False},
+ 'noweb': {'id': 'Noweb', 'deprecated': False},
+ 'npl-1.0': {'id': 'NPL-1.0', 'deprecated': False},
+ 'npl-1.1': {'id': 'NPL-1.1', 'deprecated': False},
+ 'nposl-3.0': {'id': 'NPOSL-3.0', 'deprecated': False},
+ 'nrl': {'id': 'NRL', 'deprecated': False},
+ 'ntp': {'id': 'NTP', 'deprecated': False},
+ 'ntp-0': {'id': 'NTP-0', 'deprecated': False},
+ 'nunit': {'id': 'Nunit', 'deprecated': True},
+ 'o-uda-1.0': {'id': 'O-UDA-1.0', 'deprecated': False},
+ 'oar': {'id': 'OAR', 'deprecated': False},
+ 'occt-pl': {'id': 'OCCT-PL', 'deprecated': False},
+ 'oclc-2.0': {'id': 'OCLC-2.0', 'deprecated': False},
+ 'odbl-1.0': {'id': 'ODbL-1.0', 'deprecated': False},
+ 'odc-by-1.0': {'id': 'ODC-By-1.0', 'deprecated': False},
+ 'offis': {'id': 'OFFIS', 'deprecated': False},
+ 'ofl-1.0': {'id': 'OFL-1.0', 'deprecated': False},
+ 'ofl-1.0-no-rfn': {'id': 'OFL-1.0-no-RFN', 'deprecated': False},
+ 'ofl-1.0-rfn': {'id': 'OFL-1.0-RFN', 'deprecated': False},
+ 'ofl-1.1': {'id': 'OFL-1.1', 'deprecated': False},
+ 'ofl-1.1-no-rfn': {'id': 'OFL-1.1-no-RFN', 'deprecated': False},
+ 'ofl-1.1-rfn': {'id': 'OFL-1.1-RFN', 'deprecated': False},
+ 'ogc-1.0': {'id': 'OGC-1.0', 'deprecated': False},
+ 'ogdl-taiwan-1.0': {'id': 'OGDL-Taiwan-1.0', 'deprecated': False},
+ 'ogl-canada-2.0': {'id': 'OGL-Canada-2.0', 'deprecated': False},
+ 'ogl-uk-1.0': {'id': 'OGL-UK-1.0', 'deprecated': False},
+ 'ogl-uk-2.0': {'id': 'OGL-UK-2.0', 'deprecated': False},
+ 'ogl-uk-3.0': {'id': 'OGL-UK-3.0', 'deprecated': False},
+ 'ogtsl': {'id': 'OGTSL', 'deprecated': False},
+ 'oldap-1.1': {'id': 'OLDAP-1.1', 'deprecated': False},
+ 'oldap-1.2': {'id': 'OLDAP-1.2', 'deprecated': False},
+ 'oldap-1.3': {'id': 'OLDAP-1.3', 'deprecated': False},
+ 'oldap-1.4': {'id': 'OLDAP-1.4', 'deprecated': False},
+ 'oldap-2.0': {'id': 'OLDAP-2.0', 'deprecated': False},
+ 'oldap-2.0.1': {'id': 'OLDAP-2.0.1', 'deprecated': False},
+ 'oldap-2.1': {'id': 'OLDAP-2.1', 'deprecated': False},
+ 'oldap-2.2': {'id': 'OLDAP-2.2', 'deprecated': False},
+ 'oldap-2.2.1': {'id': 'OLDAP-2.2.1', 'deprecated': False},
+ 'oldap-2.2.2': {'id': 'OLDAP-2.2.2', 'deprecated': False},
+ 'oldap-2.3': {'id': 'OLDAP-2.3', 'deprecated': False},
+ 'oldap-2.4': {'id': 'OLDAP-2.4', 'deprecated': False},
+ 'oldap-2.5': {'id': 'OLDAP-2.5', 'deprecated': False},
+ 'oldap-2.6': {'id': 'OLDAP-2.6', 'deprecated': False},
+ 'oldap-2.7': {'id': 'OLDAP-2.7', 'deprecated': False},
+ 'oldap-2.8': {'id': 'OLDAP-2.8', 'deprecated': False},
+ 'olfl-1.3': {'id': 'OLFL-1.3', 'deprecated': False},
+ 'oml': {'id': 'OML', 'deprecated': False},
+ 'openpbs-2.3': {'id': 'OpenPBS-2.3', 'deprecated': False},
+ 'openssl': {'id': 'OpenSSL', 'deprecated': False},
+ 'openssl-standalone': {'id': 'OpenSSL-standalone', 'deprecated': False},
+ 'openvision': {'id': 'OpenVision', 'deprecated': False},
+ 'opl-1.0': {'id': 'OPL-1.0', 'deprecated': False},
+ 'opl-uk-3.0': {'id': 'OPL-UK-3.0', 'deprecated': False},
+ 'opubl-1.0': {'id': 'OPUBL-1.0', 'deprecated': False},
+ 'oset-pl-2.1': {'id': 'OSET-PL-2.1', 'deprecated': False},
+ 'osl-1.0': {'id': 'OSL-1.0', 'deprecated': False},
+ 'osl-1.1': {'id': 'OSL-1.1', 'deprecated': False},
+ 'osl-2.0': {'id': 'OSL-2.0', 'deprecated': False},
+ 'osl-2.1': {'id': 'OSL-2.1', 'deprecated': False},
+ 'osl-3.0': {'id': 'OSL-3.0', 'deprecated': False},
+ 'padl': {'id': 'PADL', 'deprecated': False},
+ 'parity-6.0.0': {'id': 'Parity-6.0.0', 'deprecated': False},
+ 'parity-7.0.0': {'id': 'Parity-7.0.0', 'deprecated': False},
+ 'pddl-1.0': {'id': 'PDDL-1.0', 'deprecated': False},
+ 'php-3.0': {'id': 'PHP-3.0', 'deprecated': False},
+ 'php-3.01': {'id': 'PHP-3.01', 'deprecated': False},
+ 'pixar': {'id': 'Pixar', 'deprecated': False},
+ 'pkgconf': {'id': 'pkgconf', 'deprecated': False},
+ 'plexus': {'id': 'Plexus', 'deprecated': False},
+ 'pnmstitch': {'id': 'pnmstitch', 'deprecated': False},
+ 'polyform-noncommercial-1.0.0': {'id': 'PolyForm-Noncommercial-1.0.0', 'deprecated': False},
+ 'polyform-small-business-1.0.0': {'id': 'PolyForm-Small-Business-1.0.0', 'deprecated': False},
+ 'postgresql': {'id': 'PostgreSQL', 'deprecated': False},
+ 'ppl': {'id': 'PPL', 'deprecated': False},
+ 'psf-2.0': {'id': 'PSF-2.0', 'deprecated': False},
+ 'psfrag': {'id': 'psfrag', 'deprecated': False},
+ 'psutils': {'id': 'psutils', 'deprecated': False},
+ 'python-2.0': {'id': 'Python-2.0', 'deprecated': False},
+ 'python-2.0.1': {'id': 'Python-2.0.1', 'deprecated': False},
+ 'python-ldap': {'id': 'python-ldap', 'deprecated': False},
+ 'qhull': {'id': 'Qhull', 'deprecated': False},
+ 'qpl-1.0': {'id': 'QPL-1.0', 'deprecated': False},
+ 'qpl-1.0-inria-2004': {'id': 'QPL-1.0-INRIA-2004', 'deprecated': False},
+ 'radvd': {'id': 'radvd', 'deprecated': False},
+ 'rdisc': {'id': 'Rdisc', 'deprecated': False},
+ 'rhecos-1.1': {'id': 'RHeCos-1.1', 'deprecated': False},
+ 'rpl-1.1': {'id': 'RPL-1.1', 'deprecated': False},
+ 'rpl-1.5': {'id': 'RPL-1.5', 'deprecated': False},
+ 'rpsl-1.0': {'id': 'RPSL-1.0', 'deprecated': False},
+ 'rsa-md': {'id': 'RSA-MD', 'deprecated': False},
+ 'rscpl': {'id': 'RSCPL', 'deprecated': False},
+ 'ruby': {'id': 'Ruby', 'deprecated': False},
+ 'ruby-pty': {'id': 'Ruby-pty', 'deprecated': False},
+ 'sax-pd': {'id': 'SAX-PD', 'deprecated': False},
+ 'sax-pd-2.0': {'id': 'SAX-PD-2.0', 'deprecated': False},
+ 'saxpath': {'id': 'Saxpath', 'deprecated': False},
+ 'scea': {'id': 'SCEA', 'deprecated': False},
+ 'schemereport': {'id': 'SchemeReport', 'deprecated': False},
+ 'sendmail': {'id': 'Sendmail', 'deprecated': False},
+ 'sendmail-8.23': {'id': 'Sendmail-8.23', 'deprecated': False},
+ 'sgi-b-1.0': {'id': 'SGI-B-1.0', 'deprecated': False},
+ 'sgi-b-1.1': {'id': 'SGI-B-1.1', 'deprecated': False},
+ 'sgi-b-2.0': {'id': 'SGI-B-2.0', 'deprecated': False},
+ 'sgi-opengl': {'id': 'SGI-OpenGL', 'deprecated': False},
+ 'sgp4': {'id': 'SGP4', 'deprecated': False},
+ 'shl-0.5': {'id': 'SHL-0.5', 'deprecated': False},
+ 'shl-0.51': {'id': 'SHL-0.51', 'deprecated': False},
+ 'simpl-2.0': {'id': 'SimPL-2.0', 'deprecated': False},
+ 'sissl': {'id': 'SISSL', 'deprecated': False},
+ 'sissl-1.2': {'id': 'SISSL-1.2', 'deprecated': False},
+ 'sl': {'id': 'SL', 'deprecated': False},
+ 'sleepycat': {'id': 'Sleepycat', 'deprecated': False},
+ 'smlnj': {'id': 'SMLNJ', 'deprecated': False},
+ 'smppl': {'id': 'SMPPL', 'deprecated': False},
+ 'snia': {'id': 'SNIA', 'deprecated': False},
+ 'snprintf': {'id': 'snprintf', 'deprecated': False},
+ 'softsurfer': {'id': 'softSurfer', 'deprecated': False},
+ 'soundex': {'id': 'Soundex', 'deprecated': False},
+ 'spencer-86': {'id': 'Spencer-86', 'deprecated': False},
+ 'spencer-94': {'id': 'Spencer-94', 'deprecated': False},
+ 'spencer-99': {'id': 'Spencer-99', 'deprecated': False},
+ 'spl-1.0': {'id': 'SPL-1.0', 'deprecated': False},
+ 'ssh-keyscan': {'id': 'ssh-keyscan', 'deprecated': False},
+ 'ssh-openssh': {'id': 'SSH-OpenSSH', 'deprecated': False},
+ 'ssh-short': {'id': 'SSH-short', 'deprecated': False},
+ 'ssleay-standalone': {'id': 'SSLeay-standalone', 'deprecated': False},
+ 'sspl-1.0': {'id': 'SSPL-1.0', 'deprecated': False},
+ 'standardml-nj': {'id': 'StandardML-NJ', 'deprecated': True},
+ 'sugarcrm-1.1.3': {'id': 'SugarCRM-1.1.3', 'deprecated': False},
+ 'sun-ppp': {'id': 'Sun-PPP', 'deprecated': False},
+ 'sun-ppp-2000': {'id': 'Sun-PPP-2000', 'deprecated': False},
+ 'sunpro': {'id': 'SunPro', 'deprecated': False},
+ 'swl': {'id': 'SWL', 'deprecated': False},
+ 'swrule': {'id': 'swrule', 'deprecated': False},
+ 'symlinks': {'id': 'Symlinks', 'deprecated': False},
+ 'tapr-ohl-1.0': {'id': 'TAPR-OHL-1.0', 'deprecated': False},
+ 'tcl': {'id': 'TCL', 'deprecated': False},
+ 'tcp-wrappers': {'id': 'TCP-wrappers', 'deprecated': False},
+ 'termreadkey': {'id': 'TermReadKey', 'deprecated': False},
+ 'tgppl-1.0': {'id': 'TGPPL-1.0', 'deprecated': False},
+ 'threeparttable': {'id': 'threeparttable', 'deprecated': False},
+ 'tmate': {'id': 'TMate', 'deprecated': False},
+ 'torque-1.1': {'id': 'TORQUE-1.1', 'deprecated': False},
+ 'tosl': {'id': 'TOSL', 'deprecated': False},
+ 'tpdl': {'id': 'TPDL', 'deprecated': False},
+ 'tpl-1.0': {'id': 'TPL-1.0', 'deprecated': False},
+ 'ttwl': {'id': 'TTWL', 'deprecated': False},
+ 'ttyp0': {'id': 'TTYP0', 'deprecated': False},
+ 'tu-berlin-1.0': {'id': 'TU-Berlin-1.0', 'deprecated': False},
+ 'tu-berlin-2.0': {'id': 'TU-Berlin-2.0', 'deprecated': False},
+ 'ubuntu-font-1.0': {'id': 'Ubuntu-font-1.0', 'deprecated': False},
+ 'ucar': {'id': 'UCAR', 'deprecated': False},
+ 'ucl-1.0': {'id': 'UCL-1.0', 'deprecated': False},
+ 'ulem': {'id': 'ulem', 'deprecated': False},
+ 'umich-merit': {'id': 'UMich-Merit', 'deprecated': False},
+ 'unicode-3.0': {'id': 'Unicode-3.0', 'deprecated': False},
+ 'unicode-dfs-2015': {'id': 'Unicode-DFS-2015', 'deprecated': False},
+ 'unicode-dfs-2016': {'id': 'Unicode-DFS-2016', 'deprecated': False},
+ 'unicode-tou': {'id': 'Unicode-TOU', 'deprecated': False},
+ 'unixcrypt': {'id': 'UnixCrypt', 'deprecated': False},
+ 'unlicense': {'id': 'Unlicense', 'deprecated': False},
+ 'upl-1.0': {'id': 'UPL-1.0', 'deprecated': False},
+ 'urt-rle': {'id': 'URT-RLE', 'deprecated': False},
+ 'vim': {'id': 'Vim', 'deprecated': False},
+ 'vostrom': {'id': 'VOSTROM', 'deprecated': False},
+ 'vsl-1.0': {'id': 'VSL-1.0', 'deprecated': False},
+ 'w3c': {'id': 'W3C', 'deprecated': False},
+ 'w3c-19980720': {'id': 'W3C-19980720', 'deprecated': False},
+ 'w3c-20150513': {'id': 'W3C-20150513', 'deprecated': False},
+ 'w3m': {'id': 'w3m', 'deprecated': False},
+ 'watcom-1.0': {'id': 'Watcom-1.0', 'deprecated': False},
+ 'widget-workshop': {'id': 'Widget-Workshop', 'deprecated': False},
+ 'wsuipa': {'id': 'Wsuipa', 'deprecated': False},
+ 'wtfpl': {'id': 'WTFPL', 'deprecated': False},
+ 'wxwindows': {'id': 'wxWindows', 'deprecated': True},
+ 'x11': {'id': 'X11', 'deprecated': False},
+ 'x11-distribute-modifications-variant': {'id': 'X11-distribute-modifications-variant', 'deprecated': False},
+ 'x11-swapped': {'id': 'X11-swapped', 'deprecated': False},
+ 'xdebug-1.03': {'id': 'Xdebug-1.03', 'deprecated': False},
+ 'xerox': {'id': 'Xerox', 'deprecated': False},
+ 'xfig': {'id': 'Xfig', 'deprecated': False},
+ 'xfree86-1.1': {'id': 'XFree86-1.1', 'deprecated': False},
+ 'xinetd': {'id': 'xinetd', 'deprecated': False},
+ 'xkeyboard-config-zinoviev': {'id': 'xkeyboard-config-Zinoviev', 'deprecated': False},
+ 'xlock': {'id': 'xlock', 'deprecated': False},
+ 'xnet': {'id': 'Xnet', 'deprecated': False},
+ 'xpp': {'id': 'xpp', 'deprecated': False},
+ 'xskat': {'id': 'XSkat', 'deprecated': False},
+ 'xzoom': {'id': 'xzoom', 'deprecated': False},
+ 'ypl-1.0': {'id': 'YPL-1.0', 'deprecated': False},
+ 'ypl-1.1': {'id': 'YPL-1.1', 'deprecated': False},
+ 'zed': {'id': 'Zed', 'deprecated': False},
+ 'zeeff': {'id': 'Zeeff', 'deprecated': False},
+ 'zend-2.0': {'id': 'Zend-2.0', 'deprecated': False},
+ 'zimbra-1.3': {'id': 'Zimbra-1.3', 'deprecated': False},
+ 'zimbra-1.4': {'id': 'Zimbra-1.4', 'deprecated': False},
+ 'zlib': {'id': 'Zlib', 'deprecated': False},
+ 'zlib-acknowledgement': {'id': 'zlib-acknowledgement', 'deprecated': False},
+ 'zpl-1.1': {'id': 'ZPL-1.1', 'deprecated': False},
+ 'zpl-2.0': {'id': 'ZPL-2.0', 'deprecated': False},
+ 'zpl-2.1': {'id': 'ZPL-2.1', 'deprecated': False},
+}
+
+EXCEPTIONS: dict[str, SPDXException] = {
+ '389-exception': {'id': '389-exception', 'deprecated': False},
+ 'asterisk-exception': {'id': 'Asterisk-exception', 'deprecated': False},
+ 'asterisk-linking-protocols-exception': {'id': 'Asterisk-linking-protocols-exception', 'deprecated': False},
+ 'autoconf-exception-2.0': {'id': 'Autoconf-exception-2.0', 'deprecated': False},
+ 'autoconf-exception-3.0': {'id': 'Autoconf-exception-3.0', 'deprecated': False},
+ 'autoconf-exception-generic': {'id': 'Autoconf-exception-generic', 'deprecated': False},
+ 'autoconf-exception-generic-3.0': {'id': 'Autoconf-exception-generic-3.0', 'deprecated': False},
+ 'autoconf-exception-macro': {'id': 'Autoconf-exception-macro', 'deprecated': False},
+ 'bison-exception-1.24': {'id': 'Bison-exception-1.24', 'deprecated': False},
+ 'bison-exception-2.2': {'id': 'Bison-exception-2.2', 'deprecated': False},
+ 'bootloader-exception': {'id': 'Bootloader-exception', 'deprecated': False},
+ 'classpath-exception-2.0': {'id': 'Classpath-exception-2.0', 'deprecated': False},
+ 'clisp-exception-2.0': {'id': 'CLISP-exception-2.0', 'deprecated': False},
+ 'cryptsetup-openssl-exception': {'id': 'cryptsetup-OpenSSL-exception', 'deprecated': False},
+ 'digirule-foss-exception': {'id': 'DigiRule-FOSS-exception', 'deprecated': False},
+ 'ecos-exception-2.0': {'id': 'eCos-exception-2.0', 'deprecated': False},
+ 'erlang-otp-linking-exception': {'id': 'erlang-otp-linking-exception', 'deprecated': False},
+ 'fawkes-runtime-exception': {'id': 'Fawkes-Runtime-exception', 'deprecated': False},
+ 'fltk-exception': {'id': 'FLTK-exception', 'deprecated': False},
+ 'fmt-exception': {'id': 'fmt-exception', 'deprecated': False},
+ 'font-exception-2.0': {'id': 'Font-exception-2.0', 'deprecated': False},
+ 'freertos-exception-2.0': {'id': 'freertos-exception-2.0', 'deprecated': False},
+ 'gcc-exception-2.0': {'id': 'GCC-exception-2.0', 'deprecated': False},
+ 'gcc-exception-2.0-note': {'id': 'GCC-exception-2.0-note', 'deprecated': False},
+ 'gcc-exception-3.1': {'id': 'GCC-exception-3.1', 'deprecated': False},
+ 'gmsh-exception': {'id': 'Gmsh-exception', 'deprecated': False},
+ 'gnat-exception': {'id': 'GNAT-exception', 'deprecated': False},
+ 'gnome-examples-exception': {'id': 'GNOME-examples-exception', 'deprecated': False},
+ 'gnu-compiler-exception': {'id': 'GNU-compiler-exception', 'deprecated': False},
+ 'gnu-javamail-exception': {'id': 'gnu-javamail-exception', 'deprecated': False},
+ 'gpl-3.0-interface-exception': {'id': 'GPL-3.0-interface-exception', 'deprecated': False},
+ 'gpl-3.0-linking-exception': {'id': 'GPL-3.0-linking-exception', 'deprecated': False},
+ 'gpl-3.0-linking-source-exception': {'id': 'GPL-3.0-linking-source-exception', 'deprecated': False},
+ 'gpl-cc-1.0': {'id': 'GPL-CC-1.0', 'deprecated': False},
+ 'gstreamer-exception-2005': {'id': 'GStreamer-exception-2005', 'deprecated': False},
+ 'gstreamer-exception-2008': {'id': 'GStreamer-exception-2008', 'deprecated': False},
+ 'i2p-gpl-java-exception': {'id': 'i2p-gpl-java-exception', 'deprecated': False},
+ 'kicad-libraries-exception': {'id': 'KiCad-libraries-exception', 'deprecated': False},
+ 'lgpl-3.0-linking-exception': {'id': 'LGPL-3.0-linking-exception', 'deprecated': False},
+ 'libpri-openh323-exception': {'id': 'libpri-OpenH323-exception', 'deprecated': False},
+ 'libtool-exception': {'id': 'Libtool-exception', 'deprecated': False},
+ 'linux-syscall-note': {'id': 'Linux-syscall-note', 'deprecated': False},
+ 'llgpl': {'id': 'LLGPL', 'deprecated': False},
+ 'llvm-exception': {'id': 'LLVM-exception', 'deprecated': False},
+ 'lzma-exception': {'id': 'LZMA-exception', 'deprecated': False},
+ 'mif-exception': {'id': 'mif-exception', 'deprecated': False},
+ 'nokia-qt-exception-1.1': {'id': 'Nokia-Qt-exception-1.1', 'deprecated': True},
+ 'ocaml-lgpl-linking-exception': {'id': 'OCaml-LGPL-linking-exception', 'deprecated': False},
+ 'occt-exception-1.0': {'id': 'OCCT-exception-1.0', 'deprecated': False},
+ 'openjdk-assembly-exception-1.0': {'id': 'OpenJDK-assembly-exception-1.0', 'deprecated': False},
+ 'openvpn-openssl-exception': {'id': 'openvpn-openssl-exception', 'deprecated': False},
+ 'pcre2-exception': {'id': 'PCRE2-exception', 'deprecated': False},
+ 'ps-or-pdf-font-exception-20170817': {'id': 'PS-or-PDF-font-exception-20170817', 'deprecated': False},
+ 'qpl-1.0-inria-2004-exception': {'id': 'QPL-1.0-INRIA-2004-exception', 'deprecated': False},
+ 'qt-gpl-exception-1.0': {'id': 'Qt-GPL-exception-1.0', 'deprecated': False},
+ 'qt-lgpl-exception-1.1': {'id': 'Qt-LGPL-exception-1.1', 'deprecated': False},
+ 'qwt-exception-1.0': {'id': 'Qwt-exception-1.0', 'deprecated': False},
+ 'romic-exception': {'id': 'romic-exception', 'deprecated': False},
+ 'rrdtool-floss-exception-2.0': {'id': 'RRDtool-FLOSS-exception-2.0', 'deprecated': False},
+ 'sane-exception': {'id': 'SANE-exception', 'deprecated': False},
+ 'shl-2.0': {'id': 'SHL-2.0', 'deprecated': False},
+ 'shl-2.1': {'id': 'SHL-2.1', 'deprecated': False},
+ 'stunnel-exception': {'id': 'stunnel-exception', 'deprecated': False},
+ 'swi-exception': {'id': 'SWI-exception', 'deprecated': False},
+ 'swift-exception': {'id': 'Swift-exception', 'deprecated': False},
+ 'texinfo-exception': {'id': 'Texinfo-exception', 'deprecated': False},
+ 'u-boot-exception-2.0': {'id': 'u-boot-exception-2.0', 'deprecated': False},
+ 'ubdl-exception': {'id': 'UBDL-exception', 'deprecated': False},
+ 'universal-foss-exception-1.0': {'id': 'Universal-FOSS-exception-1.0', 'deprecated': False},
+ 'vsftpd-openssl-exception': {'id': 'vsftpd-openssl-exception', 'deprecated': False},
+ 'wxwindows-exception-3.1': {'id': 'WxWindows-exception-3.1', 'deprecated': False},
+ 'x11vnc-openssl-exception': {'id': 'x11vnc-openssl-exception', 'deprecated': False},
+}
diff --git a/contrib/python/packaging/py3/packaging/markers.py b/contrib/python/packaging/py3/packaging/markers.py
index cb640e8f9b8..fb7f49cf8cd 100644
--- a/contrib/python/packaging/py3/packaging/markers.py
+++ b/contrib/python/packaging/py3/packaging/markers.py
@@ -2,31 +2,25 @@
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
# for complete details.
+from __future__ import annotations
+
import operator
import os
import platform
import sys
-from typing import Any, Callable, Dict, List, Optional, Tuple, Union
-
-from pyparsing import ( # noqa: N817
- Forward,
- Group,
- Literal as L,
- ParseException,
- ParseResults,
- QuotedString,
- ZeroOrMore,
- stringEnd,
- stringStart,
-)
+from typing import Any, Callable, TypedDict, cast
+from ._parser import MarkerAtom, MarkerList, Op, Value, Variable
+from ._parser import parse_marker as _parse_marker
+from ._tokenizer import ParserSyntaxError
from .specifiers import InvalidSpecifier, Specifier
+from .utils import canonicalize_name
__all__ = [
"InvalidMarker",
+ "Marker",
"UndefinedComparison",
"UndefinedEnvironmentName",
- "Marker",
"default_environment",
]
@@ -52,103 +46,97 @@ class UndefinedEnvironmentName(ValueError):
"""
-class Node:
- def __init__(self, value: Any) -> None:
- self.value = value
+class Environment(TypedDict):
+ implementation_name: str
+ """The implementation's identifier, e.g. ``'cpython'``."""
- def __str__(self) -> str:
- return str(self.value)
+ implementation_version: str
+ """
+ The implementation's version, e.g. ``'3.13.0a2'`` for CPython 3.13.0a2, or
+ ``'7.3.13'`` for PyPy3.10 v7.3.13.
+ """
- def __repr__(self) -> str:
- return f"<{self.__class__.__name__}('{self}')>"
-
- def serialize(self) -> str:
- raise NotImplementedError
-
-
-class Variable(Node):
- def serialize(self) -> str:
- return str(self)
-
-
-class Value(Node):
- def serialize(self) -> str:
- return f'"{self}"'
-
-
-class Op(Node):
- def serialize(self) -> str:
- return str(self)
-
-
-VARIABLE = (
- L("implementation_version")
- | L("platform_python_implementation")
- | L("implementation_name")
- | L("python_full_version")
- | L("platform_release")
- | L("platform_version")
- | L("platform_machine")
- | L("platform_system")
- | L("python_version")
- | L("sys_platform")
- | L("os_name")
- | L("os.name") # PEP-345
- | L("sys.platform") # PEP-345
- | L("platform.version") # PEP-345
- | L("platform.machine") # PEP-345
- | L("platform.python_implementation") # PEP-345
- | L("python_implementation") # undocumented setuptools legacy
- | L("extra") # PEP-508
-)
-ALIASES = {
- "os.name": "os_name",
- "sys.platform": "sys_platform",
- "platform.version": "platform_version",
- "platform.machine": "platform_machine",
- "platform.python_implementation": "platform_python_implementation",
- "python_implementation": "platform_python_implementation",
-}
-VARIABLE.setParseAction(lambda s, l, t: Variable(ALIASES.get(t[0], t[0])))
+ os_name: str
+ """
+ The value of :py:data:`os.name`. The name of the operating system dependent module
+ imported, e.g. ``'posix'``.
+ """
-VERSION_CMP = (
- L("===") | L("==") | L(">=") | L("<=") | L("!=") | L("~=") | L(">") | L("<")
-)
+ platform_machine: str
+ """
+ Returns the machine type, e.g. ``'i386'``.
-MARKER_OP = VERSION_CMP | L("not in") | L("in")
-MARKER_OP.setParseAction(lambda s, l, t: Op(t[0]))
+ An empty string if the value cannot be determined.
+ """
-MARKER_VALUE = QuotedString("'") | QuotedString('"')
-MARKER_VALUE.setParseAction(lambda s, l, t: Value(t[0]))
+ platform_release: str
+ """
+ The system's release, e.g. ``'2.2.0'`` or ``'NT'``.
-BOOLOP = L("and") | L("or")
+ An empty string if the value cannot be determined.
+ """
-MARKER_VAR = VARIABLE | MARKER_VALUE
+ platform_system: str
+ """
+ The system/OS name, e.g. ``'Linux'``, ``'Windows'`` or ``'Java'``.
-MARKER_ITEM = Group(MARKER_VAR + MARKER_OP + MARKER_VAR)
-MARKER_ITEM.setParseAction(lambda s, l, t: tuple(t[0]))
+ An empty string if the value cannot be determined.
+ """
-LPAREN = L("(").suppress()
-RPAREN = L(")").suppress()
+ platform_version: str
+ """
+ The system's release version, e.g. ``'#3 on degas'``.
-MARKER_EXPR = Forward()
-MARKER_ATOM = MARKER_ITEM | Group(LPAREN + MARKER_EXPR + RPAREN)
-MARKER_EXPR << MARKER_ATOM + ZeroOrMore(BOOLOP + MARKER_EXPR)
+ An empty string if the value cannot be determined.
+ """
-MARKER = stringStart + MARKER_EXPR + stringEnd
+ python_full_version: str
+ """
+ The Python version as string ``'major.minor.patchlevel'``.
+ Note that unlike the Python :py:data:`sys.version`, this value will always include
+ the patchlevel (it defaults to 0).
+ """
-def _coerce_parse_result(results: Union[ParseResults, List[Any]]) -> List[Any]:
- if isinstance(results, ParseResults):
- return [_coerce_parse_result(i) for i in results]
- else:
- return results
+ platform_python_implementation: str
+ """
+ A string identifying the Python implementation, e.g. ``'CPython'``.
+ """
+
+ python_version: str
+ """The Python version as string ``'major.minor'``."""
+
+ sys_platform: str
+ """
+ This string contains a platform identifier that can be used to append
+ platform-specific components to :py:data:`sys.path`, for instance.
+
+ For Unix systems, except on Linux and AIX, this is the lowercased OS name as
+ returned by ``uname -s`` with the first part of the version as returned by
+ ``uname -r`` appended, e.g. ``'sunos5'`` or ``'freebsd8'``, at the time when Python
+ was built.
+ """
+
+
+def _normalize_extra_values(results: Any) -> Any:
+ """
+ Normalize extra values.
+ """
+ if isinstance(results[0], tuple):
+ lhs, op, rhs = results[0]
+ if isinstance(lhs, Variable) and lhs.value == "extra":
+ normalized_extra = canonicalize_name(rhs.value)
+ rhs = Value(normalized_extra)
+ elif isinstance(rhs, Variable) and rhs.value == "extra":
+ normalized_extra = canonicalize_name(lhs.value)
+ lhs = Value(normalized_extra)
+ results[0] = lhs, op, rhs
+ return results
def _format_marker(
- marker: Union[List[str], Tuple[Node, ...], str], first: Optional[bool] = True
+ marker: list[str] | MarkerAtom | str, first: bool | None = True
) -> str:
-
assert isinstance(marker, (list, tuple, str))
# Sometimes we have a structure like [[...]] which is a single item list
@@ -174,7 +162,7 @@ def _format_marker(
return marker
-_operators: Dict[str, Operator] = {
+_operators: dict[str, Operator] = {
"in": lambda lhs, rhs: lhs in rhs,
"not in": lambda lhs, rhs: lhs not in rhs,
"<": operator.lt,
@@ -192,35 +180,29 @@ def _eval_op(lhs: str, op: Op, rhs: str) -> bool:
except InvalidSpecifier:
pass
else:
- return spec.contains(lhs)
+ return spec.contains(lhs, prereleases=True)
- oper: Optional[Operator] = _operators.get(op.serialize())
+ oper: Operator | None = _operators.get(op.serialize())
if oper is None:
raise UndefinedComparison(f"Undefined {op!r} on {lhs!r} and {rhs!r}.")
return oper(lhs, rhs)
-class Undefined:
- pass
+def _normalize(*values: str, key: str) -> tuple[str, ...]:
+ # PEP 685 – Comparison of extra names for optional distribution dependencies
+ # https://peps.python.org/pep-0685/
+ # > When comparing extra names, tools MUST normalize the names being
+ # > compared using the semantics outlined in PEP 503 for names
+ if key == "extra":
+ return tuple(canonicalize_name(v) for v in values)
+ # other environment markers don't have such standards
+ return values
-_undefined = Undefined()
-
-def _get_env(environment: Dict[str, str], name: str) -> str:
- value: Union[str, Undefined] = environment.get(name, _undefined)
-
- if isinstance(value, Undefined):
- raise UndefinedEnvironmentName(
- f"{name!r} does not exist in evaluation environment."
- )
-
- return value
-
-
-def _evaluate_markers(markers: List[Any], environment: Dict[str, str]) -> bool:
- groups: List[List[bool]] = [[]]
+def _evaluate_markers(markers: MarkerList, environment: dict[str, str]) -> bool:
+ groups: list[list[bool]] = [[]]
for marker in markers:
assert isinstance(marker, (list, tuple, str))
@@ -231,12 +213,15 @@ def _evaluate_markers(markers: List[Any], environment: Dict[str, str]) -> bool:
lhs, op, rhs = marker
if isinstance(lhs, Variable):
- lhs_value = _get_env(environment, lhs.value)
+ environment_key = lhs.value
+ lhs_value = environment[environment_key]
rhs_value = rhs.value
else:
lhs_value = lhs.value
- rhs_value = _get_env(environment, rhs.value)
+ environment_key = rhs.value
+ rhs_value = environment[environment_key]
+ lhs_value, rhs_value = _normalize(lhs_value, rhs_value, key=environment_key)
groups[-1].append(_eval_op(lhs_value, op, rhs_value))
else:
assert marker in ["and", "or"]
@@ -246,15 +231,15 @@ def _evaluate_markers(markers: List[Any], environment: Dict[str, str]) -> bool:
return any(all(item) for item in groups)
-def format_full_version(info: "sys._version_info") -> str:
- version = "{0.major}.{0.minor}.{0.micro}".format(info)
+def format_full_version(info: sys._version_info) -> str:
+ version = f"{info.major}.{info.minor}.{info.micro}"
kind = info.releaselevel
if kind != "final":
version += kind[0] + str(info.serial)
return version
-def default_environment() -> Dict[str, str]:
+def default_environment() -> Environment:
iver = format_full_version(sys.implementation.version)
implementation_name = sys.implementation.name
return {
@@ -274,13 +259,29 @@ def default_environment() -> Dict[str, str]:
class Marker:
def __init__(self, marker: str) -> None:
+ # Note: We create a Marker object without calling this constructor in
+ # packaging.requirements.Requirement. If any additional logic is
+ # added here, make sure to mirror/adapt Requirement.
try:
- self._markers = _coerce_parse_result(MARKER.parseString(marker))
- except ParseException as e:
- raise InvalidMarker(
- f"Invalid marker: {marker!r}, parse error at "
- f"{marker[e.loc : e.loc + 8]!r}"
- )
+ self._markers = _normalize_extra_values(_parse_marker(marker))
+ # The attribute `_markers` can be described in terms of a recursive type:
+ # MarkerList = List[Union[Tuple[Node, ...], str, MarkerList]]
+ #
+ # For example, the following expression:
+ # python_version > "3.6" or (python_version == "3.6" and os_name == "unix")
+ #
+ # is parsed into:
+ # [
+ # (<Variable('python_version')>, <Op('>')>, <Value('3.6')>),
+ # 'and',
+ # [
+ # (<Variable('python_version')>, <Op('==')>, <Value('3.6')>),
+ # 'or',
+ # (<Variable('os_name')>, <Op('==')>, <Value('unix')>)
+ # ]
+ # ]
+ except ParserSyntaxError as e:
+ raise InvalidMarker(str(e)) from e
def __str__(self) -> str:
return _format_marker(self._markers)
@@ -288,7 +289,16 @@ class Marker:
def __repr__(self) -> str:
return f"<Marker('{self}')>"
- def evaluate(self, environment: Optional[Dict[str, str]] = None) -> bool:
+ def __hash__(self) -> int:
+ return hash((self.__class__.__name__, str(self)))
+
+ def __eq__(self, other: Any) -> bool:
+ if not isinstance(other, Marker):
+ return NotImplemented
+
+ return str(self) == str(other)
+
+ def evaluate(self, environment: dict[str, str] | None = None) -> bool:
"""Evaluate a marker.
Return the boolean from evaluating the given marker against the
@@ -297,8 +307,25 @@ class Marker:
The environment is determined from the current Python process.
"""
- current_environment = default_environment()
+ current_environment = cast("dict[str, str]", default_environment())
+ current_environment["extra"] = ""
if environment is not None:
current_environment.update(environment)
+ # The API used to allow setting extra to None. We need to handle this
+ # case for backwards compatibility.
+ if current_environment["extra"] is None:
+ current_environment["extra"] = ""
- return _evaluate_markers(self._markers, current_environment)
+ return _evaluate_markers(
+ self._markers, _repair_python_full_version(current_environment)
+ )
+
+
+def _repair_python_full_version(env: dict[str, str]) -> dict[str, str]:
+ """
+ Work around platform.python_version() returning something that is not PEP 440
+ compliant for non-tagged Python builds.
+ """
+ if env["python_full_version"].endswith("+"):
+ env["python_full_version"] += "local"
+ return env
diff --git a/contrib/python/packaging/py3/packaging/metadata.py b/contrib/python/packaging/py3/packaging/metadata.py
new file mode 100644
index 00000000000..721f411cfc4
--- /dev/null
+++ b/contrib/python/packaging/py3/packaging/metadata.py
@@ -0,0 +1,863 @@
+from __future__ import annotations
+
+import email.feedparser
+import email.header
+import email.message
+import email.parser
+import email.policy
+import pathlib
+import sys
+import typing
+from typing import (
+ Any,
+ Callable,
+ Generic,
+ Literal,
+ TypedDict,
+ cast,
+)
+
+from . import licenses, requirements, specifiers, utils
+from . import version as version_module
+from .licenses import NormalizedLicenseExpression
+
+T = typing.TypeVar("T")
+
+
+if sys.version_info >= (3, 11): # pragma: no cover
+ ExceptionGroup = ExceptionGroup
+else: # pragma: no cover
+
+ class ExceptionGroup(Exception):
+ """A minimal implementation of :external:exc:`ExceptionGroup` from Python 3.11.
+
+ If :external:exc:`ExceptionGroup` is already defined by Python itself,
+ that version is used instead.
+ """
+
+ message: str
+ exceptions: list[Exception]
+
+ def __init__(self, message: str, exceptions: list[Exception]) -> None:
+ self.message = message
+ self.exceptions = exceptions
+
+ def __repr__(self) -> str:
+ return f"{self.__class__.__name__}({self.message!r}, {self.exceptions!r})"
+
+
+class InvalidMetadata(ValueError):
+ """A metadata field contains invalid data."""
+
+ field: str
+ """The name of the field that contains invalid data."""
+
+ def __init__(self, field: str, message: str) -> None:
+ self.field = field
+ super().__init__(message)
+
+
+# The RawMetadata class attempts to make as few assumptions about the underlying
+# serialization formats as possible. The idea is that as long as a serialization
+# formats offer some very basic primitives in *some* way then we can support
+# serializing to and from that format.
+class RawMetadata(TypedDict, total=False):
+ """A dictionary of raw core metadata.
+
+ Each field in core metadata maps to a key of this dictionary (when data is
+ provided). The key is lower-case and underscores are used instead of dashes
+ compared to the equivalent core metadata field. Any core metadata field that
+ can be specified multiple times or can hold multiple values in a single
+ field have a key with a plural name. See :class:`Metadata` whose attributes
+ match the keys of this dictionary.
+
+ Core metadata fields that can be specified multiple times are stored as a
+ list or dict depending on which is appropriate for the field. Any fields
+ which hold multiple values in a single field are stored as a list.
+
+ """
+
+ # Metadata 1.0 - PEP 241
+ metadata_version: str
+ name: str
+ version: str
+ platforms: list[str]
+ summary: str
+ description: str
+ keywords: list[str]
+ home_page: str
+ author: str
+ author_email: str
+ license: str
+
+ # Metadata 1.1 - PEP 314
+ supported_platforms: list[str]
+ download_url: str
+ classifiers: list[str]
+ requires: list[str]
+ provides: list[str]
+ obsoletes: list[str]
+
+ # Metadata 1.2 - PEP 345
+ maintainer: str
+ maintainer_email: str
+ requires_dist: list[str]
+ provides_dist: list[str]
+ obsoletes_dist: list[str]
+ requires_python: str
+ requires_external: list[str]
+ project_urls: dict[str, str]
+
+ # Metadata 2.0
+ # PEP 426 attempted to completely revamp the metadata format
+ # but got stuck without ever being able to build consensus on
+ # it and ultimately ended up withdrawn.
+ #
+ # However, a number of tools had started emitting METADATA with
+ # `2.0` Metadata-Version, so for historical reasons, this version
+ # was skipped.
+
+ # Metadata 2.1 - PEP 566
+ description_content_type: str
+ provides_extra: list[str]
+
+ # Metadata 2.2 - PEP 643
+ dynamic: list[str]
+
+ # Metadata 2.3 - PEP 685
+ # No new fields were added in PEP 685, just some edge case were
+ # tightened up to provide better interoptability.
+
+ # Metadata 2.4 - PEP 639
+ license_expression: str
+ license_files: list[str]
+
+
+_STRING_FIELDS = {
+ "author",
+ "author_email",
+ "description",
+ "description_content_type",
+ "download_url",
+ "home_page",
+ "license",
+ "license_expression",
+ "maintainer",
+ "maintainer_email",
+ "metadata_version",
+ "name",
+ "requires_python",
+ "summary",
+ "version",
+}
+
+_LIST_FIELDS = {
+ "classifiers",
+ "dynamic",
+ "license_files",
+ "obsoletes",
+ "obsoletes_dist",
+ "platforms",
+ "provides",
+ "provides_dist",
+ "provides_extra",
+ "requires",
+ "requires_dist",
+ "requires_external",
+ "supported_platforms",
+}
+
+_DICT_FIELDS = {
+ "project_urls",
+}
+
+
+def _parse_keywords(data: str) -> list[str]:
+ """Split a string of comma-separated keywords into a list of keywords."""
+ return [k.strip() for k in data.split(",")]
+
+
+def _parse_project_urls(data: list[str]) -> dict[str, str]:
+ """Parse a list of label/URL string pairings separated by a comma."""
+ urls = {}
+ for pair in data:
+ # Our logic is slightly tricky here as we want to try and do
+ # *something* reasonable with malformed data.
+ #
+ # The main thing that we have to worry about, is data that does
+ # not have a ',' at all to split the label from the Value. There
+ # isn't a singular right answer here, and we will fail validation
+ # later on (if the caller is validating) so it doesn't *really*
+ # matter, but since the missing value has to be an empty str
+ # and our return value is dict[str, str], if we let the key
+ # be the missing value, then they'd have multiple '' values that
+ # overwrite each other in a accumulating dict.
+ #
+ # The other potentional issue is that it's possible to have the
+ # same label multiple times in the metadata, with no solid "right"
+ # answer with what to do in that case. As such, we'll do the only
+ # thing we can, which is treat the field as unparseable and add it
+ # to our list of unparsed fields.
+ parts = [p.strip() for p in pair.split(",", 1)]
+ parts.extend([""] * (max(0, 2 - len(parts)))) # Ensure 2 items
+
+ # TODO: The spec doesn't say anything about if the keys should be
+ # considered case sensitive or not... logically they should
+ # be case-preserving and case-insensitive, but doing that
+ # would open up more cases where we might have duplicate
+ # entries.
+ label, url = parts
+ if label in urls:
+ # The label already exists in our set of urls, so this field
+ # is unparseable, and we can just add the whole thing to our
+ # unparseable data and stop processing it.
+ raise KeyError("duplicate labels in project urls")
+ urls[label] = url
+
+ return urls
+
+
+def _get_payload(msg: email.message.Message, source: bytes | str) -> str:
+ """Get the body of the message."""
+ # If our source is a str, then our caller has managed encodings for us,
+ # and we don't need to deal with it.
+ if isinstance(source, str):
+ payload = msg.get_payload()
+ assert isinstance(payload, str)
+ return payload
+ # If our source is a bytes, then we're managing the encoding and we need
+ # to deal with it.
+ else:
+ bpayload = msg.get_payload(decode=True)
+ assert isinstance(bpayload, bytes)
+ try:
+ return bpayload.decode("utf8", "strict")
+ except UnicodeDecodeError as exc:
+ raise ValueError("payload in an invalid encoding") from exc
+
+
+# The various parse_FORMAT functions here are intended to be as lenient as
+# possible in their parsing, while still returning a correctly typed
+# RawMetadata.
+#
+# To aid in this, we also generally want to do as little touching of the
+# data as possible, except where there are possibly some historic holdovers
+# that make valid data awkward to work with.
+#
+# While this is a lower level, intermediate format than our ``Metadata``
+# class, some light touch ups can make a massive difference in usability.
+
+# Map METADATA fields to RawMetadata.
+_EMAIL_TO_RAW_MAPPING = {
+ "author": "author",
+ "author-email": "author_email",
+ "classifier": "classifiers",
+ "description": "description",
+ "description-content-type": "description_content_type",
+ "download-url": "download_url",
+ "dynamic": "dynamic",
+ "home-page": "home_page",
+ "keywords": "keywords",
+ "license": "license",
+ "license-expression": "license_expression",
+ "license-file": "license_files",
+ "maintainer": "maintainer",
+ "maintainer-email": "maintainer_email",
+ "metadata-version": "metadata_version",
+ "name": "name",
+ "obsoletes": "obsoletes",
+ "obsoletes-dist": "obsoletes_dist",
+ "platform": "platforms",
+ "project-url": "project_urls",
+ "provides": "provides",
+ "provides-dist": "provides_dist",
+ "provides-extra": "provides_extra",
+ "requires": "requires",
+ "requires-dist": "requires_dist",
+ "requires-external": "requires_external",
+ "requires-python": "requires_python",
+ "summary": "summary",
+ "supported-platform": "supported_platforms",
+ "version": "version",
+}
+_RAW_TO_EMAIL_MAPPING = {raw: email for email, raw in _EMAIL_TO_RAW_MAPPING.items()}
+
+
+def parse_email(data: bytes | str) -> tuple[RawMetadata, dict[str, list[str]]]:
+ """Parse a distribution's metadata stored as email headers (e.g. from ``METADATA``).
+
+ This function returns a two-item tuple of dicts. The first dict is of
+ recognized fields from the core metadata specification. Fields that can be
+ parsed and translated into Python's built-in types are converted
+ appropriately. All other fields are left as-is. Fields that are allowed to
+ appear multiple times are stored as lists.
+
+ The second dict contains all other fields from the metadata. This includes
+ any unrecognized fields. It also includes any fields which are expected to
+ be parsed into a built-in type but were not formatted appropriately. Finally,
+ any fields that are expected to appear only once but are repeated are
+ included in this dict.
+
+ """
+ raw: dict[str, str | list[str] | dict[str, str]] = {}
+ unparsed: dict[str, list[str]] = {}
+
+ if isinstance(data, str):
+ parsed = email.parser.Parser(policy=email.policy.compat32).parsestr(data)
+ else:
+ parsed = email.parser.BytesParser(policy=email.policy.compat32).parsebytes(data)
+
+ # We have to wrap parsed.keys() in a set, because in the case of multiple
+ # values for a key (a list), the key will appear multiple times in the
+ # list of keys, but we're avoiding that by using get_all().
+ for name in frozenset(parsed.keys()):
+ # Header names in RFC are case insensitive, so we'll normalize to all
+ # lower case to make comparisons easier.
+ name = name.lower()
+
+ # We use get_all() here, even for fields that aren't multiple use,
+ # because otherwise someone could have e.g. two Name fields, and we
+ # would just silently ignore it rather than doing something about it.
+ headers = parsed.get_all(name) or []
+
+ # The way the email module works when parsing bytes is that it
+ # unconditionally decodes the bytes as ascii using the surrogateescape
+ # handler. When you pull that data back out (such as with get_all() ),
+ # it looks to see if the str has any surrogate escapes, and if it does
+ # it wraps it in a Header object instead of returning the string.
+ #
+ # As such, we'll look for those Header objects, and fix up the encoding.
+ value = []
+ # Flag if we have run into any issues processing the headers, thus
+ # signalling that the data belongs in 'unparsed'.
+ valid_encoding = True
+ for h in headers:
+ # It's unclear if this can return more types than just a Header or
+ # a str, so we'll just assert here to make sure.
+ assert isinstance(h, (email.header.Header, str))
+
+ # If it's a header object, we need to do our little dance to get
+ # the real data out of it. In cases where there is invalid data
+ # we're going to end up with mojibake, but there's no obvious, good
+ # way around that without reimplementing parts of the Header object
+ # ourselves.
+ #
+ # That should be fine since, if mojibacked happens, this key is
+ # going into the unparsed dict anyways.
+ if isinstance(h, email.header.Header):
+ # The Header object stores it's data as chunks, and each chunk
+ # can be independently encoded, so we'll need to check each
+ # of them.
+ chunks: list[tuple[bytes, str | None]] = []
+ for bin, encoding in email.header.decode_header(h):
+ try:
+ bin.decode("utf8", "strict")
+ except UnicodeDecodeError:
+ # Enable mojibake.
+ encoding = "latin1"
+ valid_encoding = False
+ else:
+ encoding = "utf8"
+ chunks.append((bin, encoding))
+
+ # Turn our chunks back into a Header object, then let that
+ # Header object do the right thing to turn them into a
+ # string for us.
+ value.append(str(email.header.make_header(chunks)))
+ # This is already a string, so just add it.
+ else:
+ value.append(h)
+
+ # We've processed all of our values to get them into a list of str,
+ # but we may have mojibake data, in which case this is an unparsed
+ # field.
+ if not valid_encoding:
+ unparsed[name] = value
+ continue
+
+ raw_name = _EMAIL_TO_RAW_MAPPING.get(name)
+ if raw_name is None:
+ # This is a bit of a weird situation, we've encountered a key that
+ # we don't know what it means, so we don't know whether it's meant
+ # to be a list or not.
+ #
+ # Since we can't really tell one way or another, we'll just leave it
+ # as a list, even though it may be a single item list, because that's
+ # what makes the most sense for email headers.
+ unparsed[name] = value
+ continue
+
+ # If this is one of our string fields, then we'll check to see if our
+ # value is a list of a single item. If it is then we'll assume that
+ # it was emitted as a single string, and unwrap the str from inside
+ # the list.
+ #
+ # If it's any other kind of data, then we haven't the faintest clue
+ # what we should parse it as, and we have to just add it to our list
+ # of unparsed stuff.
+ if raw_name in _STRING_FIELDS and len(value) == 1:
+ raw[raw_name] = value[0]
+ # If this is one of our list of string fields, then we can just assign
+ # the value, since email *only* has strings, and our get_all() call
+ # above ensures that this is a list.
+ elif raw_name in _LIST_FIELDS:
+ raw[raw_name] = value
+ # Special Case: Keywords
+ # The keywords field is implemented in the metadata spec as a str,
+ # but it conceptually is a list of strings, and is serialized using
+ # ", ".join(keywords), so we'll do some light data massaging to turn
+ # this into what it logically is.
+ elif raw_name == "keywords" and len(value) == 1:
+ raw[raw_name] = _parse_keywords(value[0])
+ # Special Case: Project-URL
+ # The project urls is implemented in the metadata spec as a list of
+ # specially-formatted strings that represent a key and a value, which
+ # is fundamentally a mapping, however the email format doesn't support
+ # mappings in a sane way, so it was crammed into a list of strings
+ # instead.
+ #
+ # We will do a little light data massaging to turn this into a map as
+ # it logically should be.
+ elif raw_name == "project_urls":
+ try:
+ raw[raw_name] = _parse_project_urls(value)
+ except KeyError:
+ unparsed[name] = value
+ # Nothing that we've done has managed to parse this, so it'll just
+ # throw it in our unparseable data and move on.
+ else:
+ unparsed[name] = value
+
+ # We need to support getting the Description from the message payload in
+ # addition to getting it from the the headers. This does mean, though, there
+ # is the possibility of it being set both ways, in which case we put both
+ # in 'unparsed' since we don't know which is right.
+ try:
+ payload = _get_payload(parsed, data)
+ except ValueError:
+ unparsed.setdefault("description", []).append(
+ parsed.get_payload(decode=isinstance(data, bytes)) # type: ignore[call-overload]
+ )
+ else:
+ if payload:
+ # Check to see if we've already got a description, if so then both
+ # it, and this body move to unparseable.
+ if "description" in raw:
+ description_header = cast(str, raw.pop("description"))
+ unparsed.setdefault("description", []).extend(
+ [description_header, payload]
+ )
+ elif "description" in unparsed:
+ unparsed["description"].append(payload)
+ else:
+ raw["description"] = payload
+
+ # We need to cast our `raw` to a metadata, because a TypedDict only support
+ # literal key names, but we're computing our key names on purpose, but the
+ # way this function is implemented, our `TypedDict` can only have valid key
+ # names.
+ return cast(RawMetadata, raw), unparsed
+
+
+_NOT_FOUND = object()
+
+
+# Keep the two values in sync.
+_VALID_METADATA_VERSIONS = ["1.0", "1.1", "1.2", "2.1", "2.2", "2.3", "2.4"]
+_MetadataVersion = Literal["1.0", "1.1", "1.2", "2.1", "2.2", "2.3", "2.4"]
+
+_REQUIRED_ATTRS = frozenset(["metadata_version", "name", "version"])
+
+
+class _Validator(Generic[T]):
+ """Validate a metadata field.
+
+ All _process_*() methods correspond to a core metadata field. The method is
+ called with the field's raw value. If the raw value is valid it is returned
+ in its "enriched" form (e.g. ``version.Version`` for the ``Version`` field).
+ If the raw value is invalid, :exc:`InvalidMetadata` is raised (with a cause
+ as appropriate).
+ """
+
+ name: str
+ raw_name: str
+ added: _MetadataVersion
+
+ def __init__(
+ self,
+ *,
+ added: _MetadataVersion = "1.0",
+ ) -> None:
+ self.added = added
+
+ def __set_name__(self, _owner: Metadata, name: str) -> None:
+ self.name = name
+ self.raw_name = _RAW_TO_EMAIL_MAPPING[name]
+
+ def __get__(self, instance: Metadata, _owner: type[Metadata]) -> T:
+ # With Python 3.8, the caching can be replaced with functools.cached_property().
+ # No need to check the cache as attribute lookup will resolve into the
+ # instance's __dict__ before __get__ is called.
+ cache = instance.__dict__
+ value = instance._raw.get(self.name)
+
+ # To make the _process_* methods easier, we'll check if the value is None
+ # and if this field is NOT a required attribute, and if both of those
+ # things are true, we'll skip the the converter. This will mean that the
+ # converters never have to deal with the None union.
+ if self.name in _REQUIRED_ATTRS or value is not None:
+ try:
+ converter: Callable[[Any], T] = getattr(self, f"_process_{self.name}")
+ except AttributeError:
+ pass
+ else:
+ value = converter(value)
+
+ cache[self.name] = value
+ try:
+ del instance._raw[self.name] # type: ignore[misc]
+ except KeyError:
+ pass
+
+ return cast(T, value)
+
+ def _invalid_metadata(
+ self, msg: str, cause: Exception | None = None
+ ) -> InvalidMetadata:
+ exc = InvalidMetadata(
+ self.raw_name, msg.format_map({"field": repr(self.raw_name)})
+ )
+ exc.__cause__ = cause
+ return exc
+
+ def _process_metadata_version(self, value: str) -> _MetadataVersion:
+ # Implicitly makes Metadata-Version required.
+ if value not in _VALID_METADATA_VERSIONS:
+ raise self._invalid_metadata(f"{value!r} is not a valid metadata version")
+ return cast(_MetadataVersion, value)
+
+ def _process_name(self, value: str) -> str:
+ if not value:
+ raise self._invalid_metadata("{field} is a required field")
+ # Validate the name as a side-effect.
+ try:
+ utils.canonicalize_name(value, validate=True)
+ except utils.InvalidName as exc:
+ raise self._invalid_metadata(
+ f"{value!r} is invalid for {{field}}", cause=exc
+ ) from exc
+ else:
+ return value
+
+ def _process_version(self, value: str) -> version_module.Version:
+ if not value:
+ raise self._invalid_metadata("{field} is a required field")
+ try:
+ return version_module.parse(value)
+ except version_module.InvalidVersion as exc:
+ raise self._invalid_metadata(
+ f"{value!r} is invalid for {{field}}", cause=exc
+ ) from exc
+
+ def _process_summary(self, value: str) -> str:
+ """Check the field contains no newlines."""
+ if "\n" in value:
+ raise self._invalid_metadata("{field} must be a single line")
+ return value
+
+ def _process_description_content_type(self, value: str) -> str:
+ content_types = {"text/plain", "text/x-rst", "text/markdown"}
+ message = email.message.EmailMessage()
+ message["content-type"] = value
+
+ content_type, parameters = (
+ # Defaults to `text/plain` if parsing failed.
+ message.get_content_type().lower(),
+ message["content-type"].params,
+ )
+ # Check if content-type is valid or defaulted to `text/plain` and thus was
+ # not parseable.
+ if content_type not in content_types or content_type not in value.lower():
+ raise self._invalid_metadata(
+ f"{{field}} must be one of {list(content_types)}, not {value!r}"
+ )
+
+ charset = parameters.get("charset", "UTF-8")
+ if charset != "UTF-8":
+ raise self._invalid_metadata(
+ f"{{field}} can only specify the UTF-8 charset, not {list(charset)}"
+ )
+
+ markdown_variants = {"GFM", "CommonMark"}
+ variant = parameters.get("variant", "GFM") # Use an acceptable default.
+ if content_type == "text/markdown" and variant not in markdown_variants:
+ raise self._invalid_metadata(
+ f"valid Markdown variants for {{field}} are {list(markdown_variants)}, "
+ f"not {variant!r}",
+ )
+ return value
+
+ def _process_dynamic(self, value: list[str]) -> list[str]:
+ for dynamic_field in map(str.lower, value):
+ if dynamic_field in {"name", "version", "metadata-version"}:
+ raise self._invalid_metadata(
+ f"{dynamic_field!r} is not allowed as a dynamic field"
+ )
+ elif dynamic_field not in _EMAIL_TO_RAW_MAPPING:
+ raise self._invalid_metadata(
+ f"{dynamic_field!r} is not a valid dynamic field"
+ )
+ return list(map(str.lower, value))
+
+ def _process_provides_extra(
+ self,
+ value: list[str],
+ ) -> list[utils.NormalizedName]:
+ normalized_names = []
+ try:
+ for name in value:
+ normalized_names.append(utils.canonicalize_name(name, validate=True))
+ except utils.InvalidName as exc:
+ raise self._invalid_metadata(
+ f"{name!r} is invalid for {{field}}", cause=exc
+ ) from exc
+ else:
+ return normalized_names
+
+ def _process_requires_python(self, value: str) -> specifiers.SpecifierSet:
+ try:
+ return specifiers.SpecifierSet(value)
+ except specifiers.InvalidSpecifier as exc:
+ raise self._invalid_metadata(
+ f"{value!r} is invalid for {{field}}", cause=exc
+ ) from exc
+
+ def _process_requires_dist(
+ self,
+ value: list[str],
+ ) -> list[requirements.Requirement]:
+ reqs = []
+ try:
+ for req in value:
+ reqs.append(requirements.Requirement(req))
+ except requirements.InvalidRequirement as exc:
+ raise self._invalid_metadata(
+ f"{req!r} is invalid for {{field}}", cause=exc
+ ) from exc
+ else:
+ return reqs
+
+ def _process_license_expression(
+ self, value: str
+ ) -> NormalizedLicenseExpression | None:
+ try:
+ return licenses.canonicalize_license_expression(value)
+ except ValueError as exc:
+ raise self._invalid_metadata(
+ f"{value!r} is invalid for {{field}}", cause=exc
+ ) from exc
+
+ def _process_license_files(self, value: list[str]) -> list[str]:
+ paths = []
+ for path in value:
+ if ".." in path:
+ raise self._invalid_metadata(
+ f"{path!r} is invalid for {{field}}, "
+ "parent directory indicators are not allowed"
+ )
+ if "*" in path:
+ raise self._invalid_metadata(
+ f"{path!r} is invalid for {{field}}, paths must be resolved"
+ )
+ if (
+ pathlib.PurePosixPath(path).is_absolute()
+ or pathlib.PureWindowsPath(path).is_absolute()
+ ):
+ raise self._invalid_metadata(
+ f"{path!r} is invalid for {{field}}, paths must be relative"
+ )
+ if pathlib.PureWindowsPath(path).as_posix() != path:
+ raise self._invalid_metadata(
+ f"{path!r} is invalid for {{field}}, "
+ "paths must use '/' delimiter"
+ )
+ paths.append(path)
+ return paths
+
+
+class Metadata:
+ """Representation of distribution metadata.
+
+ Compared to :class:`RawMetadata`, this class provides objects representing
+ metadata fields instead of only using built-in types. Any invalid metadata
+ will cause :exc:`InvalidMetadata` to be raised (with a
+ :py:attr:`~BaseException.__cause__` attribute as appropriate).
+ """
+
+ _raw: RawMetadata
+
+ @classmethod
+ def from_raw(cls, data: RawMetadata, *, validate: bool = True) -> Metadata:
+ """Create an instance from :class:`RawMetadata`.
+
+ If *validate* is true, all metadata will be validated. All exceptions
+ related to validation will be gathered and raised as an :class:`ExceptionGroup`.
+ """
+ ins = cls()
+ ins._raw = data.copy() # Mutations occur due to caching enriched values.
+
+ if validate:
+ exceptions: list[Exception] = []
+ try:
+ metadata_version = ins.metadata_version
+ metadata_age = _VALID_METADATA_VERSIONS.index(metadata_version)
+ except InvalidMetadata as metadata_version_exc:
+ exceptions.append(metadata_version_exc)
+ metadata_version = None
+
+ # Make sure to check for the fields that are present, the required
+ # fields (so their absence can be reported).
+ fields_to_check = frozenset(ins._raw) | _REQUIRED_ATTRS
+ # Remove fields that have already been checked.
+ fields_to_check -= {"metadata_version"}
+
+ for key in fields_to_check:
+ try:
+ if metadata_version:
+ # Can't use getattr() as that triggers descriptor protocol which
+ # will fail due to no value for the instance argument.
+ try:
+ field_metadata_version = cls.__dict__[key].added
+ except KeyError:
+ exc = InvalidMetadata(key, f"unrecognized field: {key!r}")
+ exceptions.append(exc)
+ continue
+ field_age = _VALID_METADATA_VERSIONS.index(
+ field_metadata_version
+ )
+ if field_age > metadata_age:
+ field = _RAW_TO_EMAIL_MAPPING[key]
+ exc = InvalidMetadata(
+ field,
+ f"{field} introduced in metadata version "
+ f"{field_metadata_version}, not {metadata_version}",
+ )
+ exceptions.append(exc)
+ continue
+ getattr(ins, key)
+ except InvalidMetadata as exc:
+ exceptions.append(exc)
+
+ if exceptions:
+ raise ExceptionGroup("invalid metadata", exceptions)
+
+ return ins
+
+ @classmethod
+ def from_email(cls, data: bytes | str, *, validate: bool = True) -> Metadata:
+ """Parse metadata from email headers.
+
+ If *validate* is true, the metadata will be validated. All exceptions
+ related to validation will be gathered and raised as an :class:`ExceptionGroup`.
+ """
+ raw, unparsed = parse_email(data)
+
+ if validate:
+ exceptions: list[Exception] = []
+ for unparsed_key in unparsed:
+ if unparsed_key in _EMAIL_TO_RAW_MAPPING:
+ message = f"{unparsed_key!r} has invalid data"
+ else:
+ message = f"unrecognized field: {unparsed_key!r}"
+ exceptions.append(InvalidMetadata(unparsed_key, message))
+
+ if exceptions:
+ raise ExceptionGroup("unparsed", exceptions)
+
+ try:
+ return cls.from_raw(raw, validate=validate)
+ except ExceptionGroup as exc_group:
+ raise ExceptionGroup(
+ "invalid or unparsed metadata", exc_group.exceptions
+ ) from None
+
+ metadata_version: _Validator[_MetadataVersion] = _Validator()
+ """:external:ref:`core-metadata-metadata-version`
+ (required; validated to be a valid metadata version)"""
+ # `name` is not normalized/typed to NormalizedName so as to provide access to
+ # the original/raw name.
+ name: _Validator[str] = _Validator()
+ """:external:ref:`core-metadata-name`
+ (required; validated using :func:`~packaging.utils.canonicalize_name` and its
+ *validate* parameter)"""
+ version: _Validator[version_module.Version] = _Validator()
+ """:external:ref:`core-metadata-version` (required)"""
+ dynamic: _Validator[list[str] | None] = _Validator(
+ added="2.2",
+ )
+ """:external:ref:`core-metadata-dynamic`
+ (validated against core metadata field names and lowercased)"""
+ platforms: _Validator[list[str] | None] = _Validator()
+ """:external:ref:`core-metadata-platform`"""
+ supported_platforms: _Validator[list[str] | None] = _Validator(added="1.1")
+ """:external:ref:`core-metadata-supported-platform`"""
+ summary: _Validator[str | None] = _Validator()
+ """:external:ref:`core-metadata-summary` (validated to contain no newlines)"""
+ description: _Validator[str | None] = _Validator() # TODO 2.1: can be in body
+ """:external:ref:`core-metadata-description`"""
+ description_content_type: _Validator[str | None] = _Validator(added="2.1")
+ """:external:ref:`core-metadata-description-content-type` (validated)"""
+ keywords: _Validator[list[str] | None] = _Validator()
+ """:external:ref:`core-metadata-keywords`"""
+ home_page: _Validator[str | None] = _Validator()
+ """:external:ref:`core-metadata-home-page`"""
+ download_url: _Validator[str | None] = _Validator(added="1.1")
+ """:external:ref:`core-metadata-download-url`"""
+ author: _Validator[str | None] = _Validator()
+ """:external:ref:`core-metadata-author`"""
+ author_email: _Validator[str | None] = _Validator()
+ """:external:ref:`core-metadata-author-email`"""
+ maintainer: _Validator[str | None] = _Validator(added="1.2")
+ """:external:ref:`core-metadata-maintainer`"""
+ maintainer_email: _Validator[str | None] = _Validator(added="1.2")
+ """:external:ref:`core-metadata-maintainer-email`"""
+ license: _Validator[str | None] = _Validator()
+ """:external:ref:`core-metadata-license`"""
+ license_expression: _Validator[NormalizedLicenseExpression | None] = _Validator(
+ added="2.4"
+ )
+ """:external:ref:`core-metadata-license-expression`"""
+ license_files: _Validator[list[str] | None] = _Validator(added="2.4")
+ """:external:ref:`core-metadata-license-file`"""
+ classifiers: _Validator[list[str] | None] = _Validator(added="1.1")
+ """:external:ref:`core-metadata-classifier`"""
+ requires_dist: _Validator[list[requirements.Requirement] | None] = _Validator(
+ added="1.2"
+ )
+ """:external:ref:`core-metadata-requires-dist`"""
+ requires_python: _Validator[specifiers.SpecifierSet | None] = _Validator(
+ added="1.2"
+ )
+ """:external:ref:`core-metadata-requires-python`"""
+ # Because `Requires-External` allows for non-PEP 440 version specifiers, we
+ # don't do any processing on the values.
+ requires_external: _Validator[list[str] | None] = _Validator(added="1.2")
+ """:external:ref:`core-metadata-requires-external`"""
+ project_urls: _Validator[dict[str, str] | None] = _Validator(added="1.2")
+ """:external:ref:`core-metadata-project-url`"""
+ # PEP 685 lets us raise an error if an extra doesn't pass `Name` validation
+ # regardless of metadata version.
+ provides_extra: _Validator[list[utils.NormalizedName] | None] = _Validator(
+ added="2.1",
+ )
+ """:external:ref:`core-metadata-provides-extra`"""
+ provides_dist: _Validator[list[str] | None] = _Validator(added="1.2")
+ """:external:ref:`core-metadata-provides-dist`"""
+ obsoletes_dist: _Validator[list[str] | None] = _Validator(added="1.2")
+ """:external:ref:`core-metadata-obsoletes-dist`"""
+ requires: _Validator[list[str] | None] = _Validator(added="1.1")
+ """``Requires`` (deprecated)"""
+ provides: _Validator[list[str] | None] = _Validator(added="1.1")
+ """``Provides`` (deprecated)"""
+ obsoletes: _Validator[list[str] | None] = _Validator(added="1.1")
+ """``Obsoletes`` (deprecated)"""
diff --git a/contrib/python/packaging/py3/packaging/requirements.py b/contrib/python/packaging/py3/packaging/requirements.py
index 53f9a3aa42b..4e068c9567d 100644
--- a/contrib/python/packaging/py3/packaging/requirements.py
+++ b/contrib/python/packaging/py3/packaging/requirements.py
@@ -1,27 +1,15 @@
# This file is dual licensed under the terms of the Apache License, Version
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
# for complete details.
+from __future__ import annotations
-import re
-import string
-import urllib.parse
-from typing import List, Optional as TOptional, Set
+from typing import Any, Iterator
-from pyparsing import ( # noqa
- Combine,
- Literal as L,
- Optional,
- ParseException,
- Regex,
- Word,
- ZeroOrMore,
- originalTextFor,
- stringEnd,
- stringStart,
-)
-
-from .markers import MARKER_EXPR, Marker
-from .specifiers import LegacySpecifier, Specifier, SpecifierSet
+from ._parser import parse_requirement as _parse_requirement
+from ._tokenizer import ParserSyntaxError
+from .markers import Marker, _normalize_extra_values
+from .specifiers import SpecifierSet
+from .utils import canonicalize_name
class InvalidRequirement(ValueError):
@@ -30,60 +18,6 @@ class InvalidRequirement(ValueError):
"""
-ALPHANUM = Word(string.ascii_letters + string.digits)
-
-LBRACKET = L("[").suppress()
-RBRACKET = L("]").suppress()
-LPAREN = L("(").suppress()
-RPAREN = L(")").suppress()
-COMMA = L(",").suppress()
-SEMICOLON = L(";").suppress()
-AT = L("@").suppress()
-
-PUNCTUATION = Word("-_.")
-IDENTIFIER_END = ALPHANUM | (ZeroOrMore(PUNCTUATION) + ALPHANUM)
-IDENTIFIER = Combine(ALPHANUM + ZeroOrMore(IDENTIFIER_END))
-
-NAME = IDENTIFIER("name")
-EXTRA = IDENTIFIER
-
-URI = Regex(r"[^ ]+")("url")
-URL = AT + URI
-
-EXTRAS_LIST = EXTRA + ZeroOrMore(COMMA + EXTRA)
-EXTRAS = (LBRACKET + Optional(EXTRAS_LIST) + RBRACKET)("extras")
-
-VERSION_PEP440 = Regex(Specifier._regex_str, re.VERBOSE | re.IGNORECASE)
-VERSION_LEGACY = Regex(LegacySpecifier._regex_str, re.VERBOSE | re.IGNORECASE)
-
-VERSION_ONE = VERSION_PEP440 ^ VERSION_LEGACY
-VERSION_MANY = Combine(
- VERSION_ONE + ZeroOrMore(COMMA + VERSION_ONE), joinString=",", adjacent=False
-)("_raw_spec")
-_VERSION_SPEC = Optional((LPAREN + VERSION_MANY + RPAREN) | VERSION_MANY)
-_VERSION_SPEC.setParseAction(lambda s, l, t: t._raw_spec or "")
-
-VERSION_SPEC = originalTextFor(_VERSION_SPEC)("specifier")
-VERSION_SPEC.setParseAction(lambda s, l, t: t[1])
-
-MARKER_EXPR = originalTextFor(MARKER_EXPR())("marker")
-MARKER_EXPR.setParseAction(
- lambda s, l, t: Marker(s[t._original_start : t._original_end])
-)
-MARKER_SEPARATOR = SEMICOLON
-MARKER = MARKER_SEPARATOR + MARKER_EXPR
-
-VERSION_AND_MARKER = VERSION_SPEC + Optional(MARKER)
-URL_AND_MARKER = URL + Optional(MARKER)
-
-NAMED_REQUIREMENT = NAME + Optional(EXTRAS) + (URL_AND_MARKER | VERSION_AND_MARKER)
-
-REQUIREMENT = stringStart + NAMED_REQUIREMENT + stringEnd
-# pyparsing isn't thread safe during initialization, so we do it eagerly, see
-# issue #104
-REQUIREMENT.parseString("x[]")
-
-
class Requirement:
"""Parse a requirement.
@@ -99,48 +33,59 @@ class Requirement:
def __init__(self, requirement_string: str) -> None:
try:
- req = REQUIREMENT.parseString(requirement_string)
- except ParseException as e:
- raise InvalidRequirement(
- f'Parse error at "{ requirement_string[e.loc : e.loc + 8]!r}": {e.msg}'
- )
-
- self.name: str = req.name
- if req.url:
- parsed_url = urllib.parse.urlparse(req.url)
- if parsed_url.scheme == "file":
- if urllib.parse.urlunparse(parsed_url) != req.url:
- raise InvalidRequirement("Invalid URL given")
- elif not (parsed_url.scheme and parsed_url.netloc) or (
- not parsed_url.scheme and not parsed_url.netloc
- ):
- raise InvalidRequirement(f"Invalid URL: {req.url}")
- self.url: TOptional[str] = req.url
- else:
- self.url = None
- self.extras: Set[str] = set(req.extras.asList() if req.extras else [])
- self.specifier: SpecifierSet = SpecifierSet(req.specifier)
- self.marker: TOptional[Marker] = req.marker if req.marker else None
-
- def __str__(self) -> str:
- parts: List[str] = [self.name]
+ parsed = _parse_requirement(requirement_string)
+ except ParserSyntaxError as e:
+ raise InvalidRequirement(str(e)) from e
+
+ self.name: str = parsed.name
+ self.url: str | None = parsed.url or None
+ self.extras: set[str] = set(parsed.extras or [])
+ self.specifier: SpecifierSet = SpecifierSet(parsed.specifier)
+ self.marker: Marker | None = None
+ if parsed.marker is not None:
+ self.marker = Marker.__new__(Marker)
+ self.marker._markers = _normalize_extra_values(parsed.marker)
+
+ def _iter_parts(self, name: str) -> Iterator[str]:
+ yield name
if self.extras:
formatted_extras = ",".join(sorted(self.extras))
- parts.append(f"[{formatted_extras}]")
+ yield f"[{formatted_extras}]"
if self.specifier:
- parts.append(str(self.specifier))
+ yield str(self.specifier)
if self.url:
- parts.append(f"@ {self.url}")
+ yield f"@ {self.url}"
if self.marker:
- parts.append(" ")
+ yield " "
if self.marker:
- parts.append(f"; {self.marker}")
+ yield f"; {self.marker}"
- return "".join(parts)
+ def __str__(self) -> str:
+ return "".join(self._iter_parts(self.name))
def __repr__(self) -> str:
return f"<Requirement('{self}')>"
+
+ def __hash__(self) -> int:
+ return hash(
+ (
+ self.__class__.__name__,
+ *self._iter_parts(canonicalize_name(self.name)),
+ )
+ )
+
+ def __eq__(self, other: Any) -> bool:
+ if not isinstance(other, Requirement):
+ return NotImplemented
+
+ return (
+ canonicalize_name(self.name) == canonicalize_name(other.name)
+ and self.extras == other.extras
+ and self.specifier == other.specifier
+ and self.url == other.url
+ and self.marker == other.marker
+ )
diff --git a/contrib/python/packaging/py3/packaging/specifiers.py b/contrib/python/packaging/py3/packaging/specifiers.py
index 0e218a6f9f7..b30926af8bf 100644
--- a/contrib/python/packaging/py3/packaging/specifiers.py
+++ b/contrib/python/packaging/py3/packaging/specifiers.py
@@ -1,38 +1,43 @@
# This file is dual licensed under the terms of the Apache License, Version
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
# for complete details.
+"""
+.. testsetup::
+
+ from packaging.specifiers import Specifier, SpecifierSet, InvalidSpecifier
+ from packaging.version import Version
+"""
+
+from __future__ import annotations
import abc
-import functools
import itertools
import re
-import warnings
-from typing import (
- Callable,
- Dict,
- Iterable,
- Iterator,
- List,
- Optional,
- Pattern,
- Set,
- Tuple,
- TypeVar,
- Union,
-)
+from typing import Callable, Iterable, Iterator, TypeVar, Union
from .utils import canonicalize_version
-from .version import LegacyVersion, Version, parse
+from .version import Version
+
+UnparsedVersion = Union[Version, str]
+UnparsedVersionVar = TypeVar("UnparsedVersionVar", bound=UnparsedVersion)
+CallableOperator = Callable[[Version, str], bool]
+
-ParsedVersion = Union[Version, LegacyVersion]
-UnparsedVersion = Union[Version, LegacyVersion, str]
-VersionTypeVar = TypeVar("VersionTypeVar", bound=UnparsedVersion)
-CallableOperator = Callable[[ParsedVersion, str], bool]
+def _coerce_version(version: UnparsedVersion) -> Version:
+ if not isinstance(version, Version):
+ version = Version(version)
+ return version
class InvalidSpecifier(ValueError):
"""
- An invalid specifier was found, users should refer to PEP 440.
+ Raised when attempting to create a :class:`Specifier` with a specifier
+ string that is invalid.
+
+ >>> Specifier("lolwat")
+ Traceback (most recent call last):
+ ...
+ packaging.specifiers.InvalidSpecifier: Invalid specifier: 'lolwat'
"""
@@ -40,266 +45,71 @@ class BaseSpecifier(metaclass=abc.ABCMeta):
@abc.abstractmethod
def __str__(self) -> str:
"""
- Returns the str representation of this Specifier like object. This
+ Returns the str representation of this Specifier-like object. This
should be representative of the Specifier itself.
"""
@abc.abstractmethod
def __hash__(self) -> int:
"""
- Returns a hash value for this Specifier like object.
+ Returns a hash value for this Specifier-like object.
"""
@abc.abstractmethod
def __eq__(self, other: object) -> bool:
"""
- Returns a boolean representing whether or not the two Specifier like
+ Returns a boolean representing whether or not the two Specifier-like
objects are equal.
- """
- @abc.abstractproperty
- def prereleases(self) -> Optional[bool]:
+ :param other: The other object to check against.
"""
- Returns whether or not pre-releases as a whole are allowed by this
- specifier.
+
+ @property
+ @abc.abstractmethod
+ def prereleases(self) -> bool | None:
+ """Whether or not pre-releases as a whole are allowed.
+
+ This can be set to either ``True`` or ``False`` to explicitly enable or disable
+ prereleases or it can be set to ``None`` (the default) to use default semantics.
"""
@prereleases.setter
def prereleases(self, value: bool) -> None:
- """
- Sets whether or not pre-releases as a whole are allowed by this
- specifier.
+ """Setter for :attr:`prereleases`.
+
+ :param value: The value to set.
"""
@abc.abstractmethod
- def contains(self, item: str, prereleases: Optional[bool] = None) -> bool:
+ def contains(self, item: str, prereleases: bool | None = None) -> bool:
"""
Determines if the given item is contained within this specifier.
"""
@abc.abstractmethod
def filter(
- self, iterable: Iterable[VersionTypeVar], prereleases: Optional[bool] = None
- ) -> Iterable[VersionTypeVar]:
+ self, iterable: Iterable[UnparsedVersionVar], prereleases: bool | None = None
+ ) -> Iterator[UnparsedVersionVar]:
"""
Takes an iterable of items and filters them so that only items which
are contained within this specifier are allowed in it.
"""
-class _IndividualSpecifier(BaseSpecifier):
-
- _operators: Dict[str, str] = {}
- _regex: Pattern[str]
-
- def __init__(self, spec: str = "", prereleases: Optional[bool] = None) -> None:
- match = self._regex.search(spec)
- if not match:
- raise InvalidSpecifier(f"Invalid specifier: '{spec}'")
-
- self._spec: Tuple[str, str] = (
- match.group("operator").strip(),
- match.group("version").strip(),
- )
-
- # Store whether or not this Specifier should accept prereleases
- self._prereleases = prereleases
-
- def __repr__(self) -> str:
- pre = (
- f", prereleases={self.prereleases!r}"
- if self._prereleases is not None
- else ""
- )
-
- return f"<{self.__class__.__name__}({str(self)!r}{pre})>"
-
- def __str__(self) -> str:
- return "{}{}".format(*self._spec)
-
- @property
- def _canonical_spec(self) -> Tuple[str, str]:
- return self._spec[0], canonicalize_version(self._spec[1])
-
- def __hash__(self) -> int:
- return hash(self._canonical_spec)
-
- def __eq__(self, other: object) -> bool:
- if isinstance(other, str):
- try:
- other = self.__class__(str(other))
- except InvalidSpecifier:
- return NotImplemented
- elif not isinstance(other, self.__class__):
- return NotImplemented
-
- return self._canonical_spec == other._canonical_spec
-
- def _get_operator(self, op: str) -> CallableOperator:
- operator_callable: CallableOperator = getattr(
- self, f"_compare_{self._operators[op]}"
- )
- return operator_callable
-
- def _coerce_version(self, version: UnparsedVersion) -> ParsedVersion:
- if not isinstance(version, (LegacyVersion, Version)):
- version = parse(version)
- return version
-
- @property
- def operator(self) -> str:
- return self._spec[0]
-
- @property
- def version(self) -> str:
- return self._spec[1]
-
- @property
- def prereleases(self) -> Optional[bool]:
- return self._prereleases
-
- @prereleases.setter
- def prereleases(self, value: bool) -> None:
- self._prereleases = value
-
- def __contains__(self, item: str) -> bool:
- return self.contains(item)
-
- def contains(
- self, item: UnparsedVersion, prereleases: Optional[bool] = None
- ) -> bool:
-
- # Determine if prereleases are to be allowed or not.
- if prereleases is None:
- prereleases = self.prereleases
-
- # Normalize item to a Version or LegacyVersion, this allows us to have
- # a shortcut for ``"2.0" in Specifier(">=2")
- normalized_item = self._coerce_version(item)
-
- # Determine if we should be supporting prereleases in this specifier
- # or not, if we do not support prereleases than we can short circuit
- # logic if this version is a prereleases.
- if normalized_item.is_prerelease and not prereleases:
- return False
-
- # Actually do the comparison to determine if this item is contained
- # within this Specifier or not.
- operator_callable: CallableOperator = self._get_operator(self.operator)
- return operator_callable(normalized_item, self.version)
-
- def filter(
- self, iterable: Iterable[VersionTypeVar], prereleases: Optional[bool] = None
- ) -> Iterable[VersionTypeVar]:
-
- yielded = False
- found_prereleases = []
-
- kw = {"prereleases": prereleases if prereleases is not None else True}
-
- # Attempt to iterate over all the values in the iterable and if any of
- # them match, yield them.
- for version in iterable:
- parsed_version = self._coerce_version(version)
-
- if self.contains(parsed_version, **kw):
- # If our version is a prerelease, and we were not set to allow
- # prereleases, then we'll store it for later in case nothing
- # else matches this specifier.
- if parsed_version.is_prerelease and not (
- prereleases or self.prereleases
- ):
- found_prereleases.append(version)
- # Either this is not a prerelease, or we should have been
- # accepting prereleases from the beginning.
- else:
- yielded = True
- yield version
-
- # Now that we've iterated over everything, determine if we've yielded
- # any values, and if we have not and we have any prereleases stored up
- # then we will go ahead and yield the prereleases.
- if not yielded and found_prereleases:
- for version in found_prereleases:
- yield version
-
-
-class LegacySpecifier(_IndividualSpecifier):
-
- _regex_str = r"""
- (?P<operator>(==|!=|<=|>=|<|>))
- \s*
- (?P<version>
- [^,;\s)]* # Since this is a "legacy" specifier, and the version
- # string can be just about anything, we match everything
- # except for whitespace, a semi-colon for marker support,
- # a closing paren since versions can be enclosed in
- # them, and a comma since it's a version separator.
- )
- """
-
- _regex = re.compile(r"^\s*" + _regex_str + r"\s*$", re.VERBOSE | re.IGNORECASE)
-
- _operators = {
- "==": "equal",
- "!=": "not_equal",
- "<=": "less_than_equal",
- ">=": "greater_than_equal",
- "<": "less_than",
- ">": "greater_than",
- }
-
- def __init__(self, spec: str = "", prereleases: Optional[bool] = None) -> None:
- super().__init__(spec, prereleases)
-
- warnings.warn(
- "Creating a LegacyVersion has been deprecated and will be "
- "removed in the next major release",
- DeprecationWarning,
- )
-
- def _coerce_version(self, version: UnparsedVersion) -> LegacyVersion:
- if not isinstance(version, LegacyVersion):
- version = LegacyVersion(str(version))
- return version
-
- def _compare_equal(self, prospective: LegacyVersion, spec: str) -> bool:
- return prospective == self._coerce_version(spec)
-
- def _compare_not_equal(self, prospective: LegacyVersion, spec: str) -> bool:
- return prospective != self._coerce_version(spec)
-
- def _compare_less_than_equal(self, prospective: LegacyVersion, spec: str) -> bool:
- return prospective <= self._coerce_version(spec)
-
- def _compare_greater_than_equal(
- self, prospective: LegacyVersion, spec: str
- ) -> bool:
- return prospective >= self._coerce_version(spec)
-
- def _compare_less_than(self, prospective: LegacyVersion, spec: str) -> bool:
- return prospective < self._coerce_version(spec)
-
- def _compare_greater_than(self, prospective: LegacyVersion, spec: str) -> bool:
- return prospective > self._coerce_version(spec)
+class Specifier(BaseSpecifier):
+ """This class abstracts handling of version specifiers.
+ .. tip::
-def _require_version_compare(
- fn: Callable[["Specifier", ParsedVersion, str], bool]
-) -> Callable[["Specifier", ParsedVersion, str], bool]:
- @functools.wraps(fn)
- def wrapped(self: "Specifier", prospective: ParsedVersion, spec: str) -> bool:
- if not isinstance(prospective, Version):
- return False
- return fn(self, prospective, spec)
-
- return wrapped
-
-
-class Specifier(_IndividualSpecifier):
+ It is generally not required to instantiate this manually. You should instead
+ prefer to work with :class:`SpecifierSet` instead, which can parse
+ comma-separated version specifiers (which is what package metadata contains).
+ """
- _regex_str = r"""
+ _operator_regex_str = r"""
(?P<operator>(~=|==|!=|<=|>=|<|>|===))
+ """
+ _version_regex_str = r"""
(?P<version>
(?:
# The identity operators allow for an escape hatch that will
@@ -309,8 +119,10 @@ class Specifier(_IndividualSpecifier):
# but included entirely as an escape hatch.
(?<====) # Only match for the identity operator
\s*
- [^\s]* # We just match everything, except for whitespace
- # since we are only testing for strict identity.
+ [^\s;)]* # The arbitrary version can be just about anything,
+ # we match everything except for whitespace, a
+ # semi-colon for marker support, and a closing paren
+ # since versions can be enclosed in them.
)
|
(?:
@@ -323,23 +135,23 @@ class Specifier(_IndividualSpecifier):
v?
(?:[0-9]+!)? # epoch
[0-9]+(?:\.[0-9]+)* # release
- (?: # pre release
- [-_\.]?
- (a|b|c|rc|alpha|beta|pre|preview)
- [-_\.]?
- [0-9]*
- )?
- (?: # post release
- (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
- )?
- # You cannot use a wild card and a dev or local version
- # together so group them with a | and make them optional.
+ # You cannot use a wild card and a pre-release, post-release, a dev or
+ # local version together so group them with a | and make them optional.
(?:
+ \.\* # Wild card syntax of .*
+ |
+ (?: # pre release
+ [-_\.]?
+ (alpha|beta|preview|pre|a|b|c|rc)
+ [-_\.]?
+ [0-9]*
+ )?
+ (?: # post release
+ (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
+ )?
(?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release
(?:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local
- |
- \.\* # Wild card syntax of .*
)?
)
|
@@ -354,7 +166,7 @@ class Specifier(_IndividualSpecifier):
[0-9]+(?:\.[0-9]+)+ # release (We have a + instead of a *)
(?: # pre release
[-_\.]?
- (a|b|c|rc|alpha|beta|pre|preview)
+ (alpha|beta|preview|pre|a|b|c|rc)
[-_\.]?
[0-9]*
)?
@@ -379,7 +191,7 @@ class Specifier(_IndividualSpecifier):
[0-9]+(?:\.[0-9]+)* # release
(?: # pre release
[-_\.]?
- (a|b|c|rc|alpha|beta|pre|preview)
+ (alpha|beta|preview|pre|a|b|c|rc)
[-_\.]?
[0-9]*
)?
@@ -391,7 +203,10 @@ class Specifier(_IndividualSpecifier):
)
"""
- _regex = re.compile(r"^\s*" + _regex_str + r"\s*$", re.VERBOSE | re.IGNORECASE)
+ _regex = re.compile(
+ r"^\s*" + _operator_regex_str + _version_regex_str + r"\s*$",
+ re.VERBOSE | re.IGNORECASE,
+ )
_operators = {
"~=": "compatible",
@@ -404,9 +219,153 @@ class Specifier(_IndividualSpecifier):
"===": "arbitrary",
}
- @_require_version_compare
- def _compare_compatible(self, prospective: ParsedVersion, spec: str) -> bool:
+ def __init__(self, spec: str = "", prereleases: bool | None = None) -> None:
+ """Initialize a Specifier instance.
+
+ :param spec:
+ The string representation of a specifier which will be parsed and
+ normalized before use.
+ :param prereleases:
+ This tells the specifier if it should accept prerelease versions if
+ applicable or not. The default of ``None`` will autodetect it from the
+ given specifiers.
+ :raises InvalidSpecifier:
+ If the given specifier is invalid (i.e. bad syntax).
+ """
+ match = self._regex.search(spec)
+ if not match:
+ raise InvalidSpecifier(f"Invalid specifier: {spec!r}")
+
+ self._spec: tuple[str, str] = (
+ match.group("operator").strip(),
+ match.group("version").strip(),
+ )
+
+ # Store whether or not this Specifier should accept prereleases
+ self._prereleases = prereleases
+
+ # https://github.com/python/mypy/pull/13475#pullrequestreview-1079784515
+ @property # type: ignore[override]
+ def prereleases(self) -> bool:
+ # If there is an explicit prereleases set for this, then we'll just
+ # blindly use that.
+ if self._prereleases is not None:
+ return self._prereleases
+
+ # Look at all of our specifiers and determine if they are inclusive
+ # operators, and if they are if they are including an explicit
+ # prerelease.
+ operator, version = self._spec
+ if operator in ["==", ">=", "<=", "~=", "===", ">", "<"]:
+ # The == specifier can include a trailing .*, if it does we
+ # want to remove before parsing.
+ if operator == "==" and version.endswith(".*"):
+ version = version[:-2]
+
+ # Parse the version, and if it is a pre-release than this
+ # specifier allows pre-releases.
+ if Version(version).is_prerelease:
+ return True
+
+ return False
+ @prereleases.setter
+ def prereleases(self, value: bool) -> None:
+ self._prereleases = value
+
+ @property
+ def operator(self) -> str:
+ """The operator of this specifier.
+
+ >>> Specifier("==1.2.3").operator
+ '=='
+ """
+ return self._spec[0]
+
+ @property
+ def version(self) -> str:
+ """The version of this specifier.
+
+ >>> Specifier("==1.2.3").version
+ '1.2.3'
+ """
+ return self._spec[1]
+
+ def __repr__(self) -> str:
+ """A representation of the Specifier that shows all internal state.
+
+ >>> Specifier('>=1.0.0')
+ <Specifier('>=1.0.0')>
+ >>> Specifier('>=1.0.0', prereleases=False)
+ <Specifier('>=1.0.0', prereleases=False)>
+ >>> Specifier('>=1.0.0', prereleases=True)
+ <Specifier('>=1.0.0', prereleases=True)>
+ """
+ pre = (
+ f", prereleases={self.prereleases!r}"
+ if self._prereleases is not None
+ else ""
+ )
+
+ return f"<{self.__class__.__name__}({str(self)!r}{pre})>"
+
+ def __str__(self) -> str:
+ """A string representation of the Specifier that can be round-tripped.
+
+ >>> str(Specifier('>=1.0.0'))
+ '>=1.0.0'
+ >>> str(Specifier('>=1.0.0', prereleases=False))
+ '>=1.0.0'
+ """
+ return "{}{}".format(*self._spec)
+
+ @property
+ def _canonical_spec(self) -> tuple[str, str]:
+ canonical_version = canonicalize_version(
+ self._spec[1],
+ strip_trailing_zero=(self._spec[0] != "~="),
+ )
+ return self._spec[0], canonical_version
+
+ def __hash__(self) -> int:
+ return hash(self._canonical_spec)
+
+ def __eq__(self, other: object) -> bool:
+ """Whether or not the two Specifier-like objects are equal.
+
+ :param other: The other object to check against.
+
+ The value of :attr:`prereleases` is ignored.
+
+ >>> Specifier("==1.2.3") == Specifier("== 1.2.3.0")
+ True
+ >>> (Specifier("==1.2.3", prereleases=False) ==
+ ... Specifier("==1.2.3", prereleases=True))
+ True
+ >>> Specifier("==1.2.3") == "==1.2.3"
+ True
+ >>> Specifier("==1.2.3") == Specifier("==1.2.4")
+ False
+ >>> Specifier("==1.2.3") == Specifier("~=1.2.3")
+ False
+ """
+ if isinstance(other, str):
+ try:
+ other = self.__class__(str(other))
+ except InvalidSpecifier:
+ return NotImplemented
+ elif not isinstance(other, self.__class__):
+ return NotImplemented
+
+ return self._canonical_spec == other._canonical_spec
+
+ def _get_operator(self, op: str) -> CallableOperator:
+ operator_callable: CallableOperator = getattr(
+ self, f"_compare_{self._operators[op]}"
+ )
+ return operator_callable
+
+ def _compare_compatible(self, prospective: Version, spec: str) -> bool:
# Compatible releases have an equivalent combination of >= and ==. That
# is that ~=2.2 is equivalent to >=2.2,==2.*. This allows us to
# implement this in terms of the other specifiers instead of
@@ -415,7 +374,7 @@ class Specifier(_IndividualSpecifier):
# We want everything but the last item in the version, but we want to
# ignore suffix segments.
- prefix = ".".join(
+ prefix = _version_join(
list(itertools.takewhile(_is_not_suffix, _version_split(spec)))[:-1]
)
@@ -426,34 +385,34 @@ class Specifier(_IndividualSpecifier):
prospective, prefix
)
- @_require_version_compare
- def _compare_equal(self, prospective: ParsedVersion, spec: str) -> bool:
-
+ def _compare_equal(self, prospective: Version, spec: str) -> bool:
# We need special logic to handle prefix matching
if spec.endswith(".*"):
# In the case of prefix matching we want to ignore local segment.
- prospective = Version(prospective.public)
- # Split the spec out by dots, and pretend that there is an implicit
- # dot in between a release segment and a pre-release segment.
- split_spec = _version_split(spec[:-2]) # Remove the trailing .*
+ normalized_prospective = canonicalize_version(
+ prospective.public, strip_trailing_zero=False
+ )
+ # Get the normalized version string ignoring the trailing .*
+ normalized_spec = canonicalize_version(spec[:-2], strip_trailing_zero=False)
+ # Split the spec out by bangs and dots, and pretend that there is
+ # an implicit dot in between a release segment and a pre-release segment.
+ split_spec = _version_split(normalized_spec)
- # Split the prospective version out by dots, and pretend that there
- # is an implicit dot in between a release segment and a pre-release
- # segment.
- split_prospective = _version_split(str(prospective))
+ # Split the prospective version out by bangs and dots, and pretend
+ # that there is an implicit dot in between a release segment and
+ # a pre-release segment.
+ split_prospective = _version_split(normalized_prospective)
+
+ # 0-pad the prospective version before shortening it to get the correct
+ # shortened version.
+ padded_prospective, _ = _pad_version(split_prospective, split_spec)
# Shorten the prospective version to be the same length as the spec
# so that we can determine if the specifier is a prefix of the
# prospective version or not.
- shortened_prospective = split_prospective[: len(split_spec)]
+ shortened_prospective = padded_prospective[: len(split_spec)]
- # Pad out our two sides with zeros so that they both equal the same
- # length.
- padded_spec, padded_prospective = _pad_version(
- split_spec, shortened_prospective
- )
-
- return padded_prospective == padded_spec
+ return shortened_prospective == split_spec
else:
# Convert our spec string into a Version
spec_version = Version(spec)
@@ -466,31 +425,22 @@ class Specifier(_IndividualSpecifier):
return prospective == spec_version
- @_require_version_compare
- def _compare_not_equal(self, prospective: ParsedVersion, spec: str) -> bool:
+ def _compare_not_equal(self, prospective: Version, spec: str) -> bool:
return not self._compare_equal(prospective, spec)
- @_require_version_compare
- def _compare_less_than_equal(self, prospective: ParsedVersion, spec: str) -> bool:
-
+ def _compare_less_than_equal(self, prospective: Version, spec: str) -> bool:
# NB: Local version identifiers are NOT permitted in the version
# specifier, so local version labels can be universally removed from
# the prospective version.
return Version(prospective.public) <= Version(spec)
- @_require_version_compare
- def _compare_greater_than_equal(
- self, prospective: ParsedVersion, spec: str
- ) -> bool:
-
+ def _compare_greater_than_equal(self, prospective: Version, spec: str) -> bool:
# NB: Local version identifiers are NOT permitted in the version
# specifier, so local version labels can be universally removed from
# the prospective version.
return Version(prospective.public) >= Version(spec)
- @_require_version_compare
- def _compare_less_than(self, prospective: ParsedVersion, spec_str: str) -> bool:
-
+ def _compare_less_than(self, prospective: Version, spec_str: str) -> bool:
# Convert our spec to a Version instance, since we'll want to work with
# it as a version.
spec = Version(spec_str)
@@ -514,9 +464,7 @@ class Specifier(_IndividualSpecifier):
# version in the spec.
return True
- @_require_version_compare
- def _compare_greater_than(self, prospective: ParsedVersion, spec_str: str) -> bool:
-
+ def _compare_greater_than(self, prospective: Version, spec_str: str) -> bool:
# Convert our spec to a Version instance, since we'll want to work with
# it as a version.
spec = Version(spec_str)
@@ -549,42 +497,150 @@ class Specifier(_IndividualSpecifier):
def _compare_arbitrary(self, prospective: Version, spec: str) -> bool:
return str(prospective).lower() == str(spec).lower()
- @property
- def prereleases(self) -> bool:
+ def __contains__(self, item: str | Version) -> bool:
+ """Return whether or not the item is contained in this specifier.
- # If there is an explicit prereleases set for this, then we'll just
- # blindly use that.
- if self._prereleases is not None:
- return self._prereleases
+ :param item: The item to check for.
- # Look at all of our specifiers and determine if they are inclusive
- # operators, and if they are if they are including an explicit
- # prerelease.
- operator, version = self._spec
- if operator in ["==", ">=", "<=", "~=", "==="]:
- # The == specifier can include a trailing .*, if it does we
- # want to remove before parsing.
- if operator == "==" and version.endswith(".*"):
- version = version[:-2]
+ This is used for the ``in`` operator and behaves the same as
+ :meth:`contains` with no ``prereleases`` argument passed.
- # Parse the version, and if it is a pre-release than this
- # specifier allows pre-releases.
- if parse(version).is_prerelease:
- return True
+ >>> "1.2.3" in Specifier(">=1.2.3")
+ True
+ >>> Version("1.2.3") in Specifier(">=1.2.3")
+ True
+ >>> "1.0.0" in Specifier(">=1.2.3")
+ False
+ >>> "1.3.0a1" in Specifier(">=1.2.3")
+ False
+ >>> "1.3.0a1" in Specifier(">=1.2.3", prereleases=True)
+ True
+ """
+ return self.contains(item)
- return False
+ def contains(self, item: UnparsedVersion, prereleases: bool | None = None) -> bool:
+ """Return whether or not the item is contained in this specifier.
+
+ :param item:
+ The item to check for, which can be a version string or a
+ :class:`Version` instance.
+ :param prereleases:
+ Whether or not to match prereleases with this Specifier. If set to
+ ``None`` (the default), it uses :attr:`prereleases` to determine
+ whether or not prereleases are allowed.
+
+ >>> Specifier(">=1.2.3").contains("1.2.3")
+ True
+ >>> Specifier(">=1.2.3").contains(Version("1.2.3"))
+ True
+ >>> Specifier(">=1.2.3").contains("1.0.0")
+ False
+ >>> Specifier(">=1.2.3").contains("1.3.0a1")
+ False
+ >>> Specifier(">=1.2.3", prereleases=True).contains("1.3.0a1")
+ True
+ >>> Specifier(">=1.2.3").contains("1.3.0a1", prereleases=True)
+ True
+ """
- @prereleases.setter
- def prereleases(self, value: bool) -> None:
- self._prereleases = value
+ # Determine if prereleases are to be allowed or not.
+ if prereleases is None:
+ prereleases = self.prereleases
+
+ # Normalize item to a Version, this allows us to have a shortcut for
+ # "2.0" in Specifier(">=2")
+ normalized_item = _coerce_version(item)
+
+ # Determine if we should be supporting prereleases in this specifier
+ # or not, if we do not support prereleases than we can short circuit
+ # logic if this version is a prereleases.
+ if normalized_item.is_prerelease and not prereleases:
+ return False
+
+ # Actually do the comparison to determine if this item is contained
+ # within this Specifier or not.
+ operator_callable: CallableOperator = self._get_operator(self.operator)
+ return operator_callable(normalized_item, self.version)
+
+ def filter(
+ self, iterable: Iterable[UnparsedVersionVar], prereleases: bool | None = None
+ ) -> Iterator[UnparsedVersionVar]:
+ """Filter items in the given iterable, that match the specifier.
+
+ :param iterable:
+ An iterable that can contain version strings and :class:`Version` instances.
+ The items in the iterable will be filtered according to the specifier.
+ :param prereleases:
+ Whether or not to allow prereleases in the returned iterator. If set to
+ ``None`` (the default), it will be intelligently decide whether to allow
+ prereleases or not (based on the :attr:`prereleases` attribute, and
+ whether the only versions matching are prereleases).
+
+ This method is smarter than just ``filter(Specifier().contains, [...])``
+ because it implements the rule from :pep:`440` that a prerelease item
+ SHOULD be accepted if no other versions match the given specifier.
+
+ >>> list(Specifier(">=1.2.3").filter(["1.2", "1.3", "1.5a1"]))
+ ['1.3']
+ >>> list(Specifier(">=1.2.3").filter(["1.2", "1.2.3", "1.3", Version("1.4")]))
+ ['1.2.3', '1.3', <Version('1.4')>]
+ >>> list(Specifier(">=1.2.3").filter(["1.2", "1.5a1"]))
+ ['1.5a1']
+ >>> list(Specifier(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True))
+ ['1.3', '1.5a1']
+ >>> list(Specifier(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"]))
+ ['1.3', '1.5a1']
+ """
+
+ yielded = False
+ found_prereleases = []
+
+ kw = {"prereleases": prereleases if prereleases is not None else True}
+
+ # Attempt to iterate over all the values in the iterable and if any of
+ # them match, yield them.
+ for version in iterable:
+ parsed_version = _coerce_version(version)
+
+ if self.contains(parsed_version, **kw):
+ # If our version is a prerelease, and we were not set to allow
+ # prereleases, then we'll store it for later in case nothing
+ # else matches this specifier.
+ if parsed_version.is_prerelease and not (
+ prereleases or self.prereleases
+ ):
+ found_prereleases.append(version)
+ # Either this is not a prerelease, or we should have been
+ # accepting prereleases from the beginning.
+ else:
+ yielded = True
+ yield version
+
+ # Now that we've iterated over everything, determine if we've yielded
+ # any values, and if we have not and we have any prereleases stored up
+ # then we will go ahead and yield the prereleases.
+ if not yielded and found_prereleases:
+ for version in found_prereleases:
+ yield version
_prefix_regex = re.compile(r"^([0-9]+)((?:a|b|c|rc)[0-9]+)$")
-def _version_split(version: str) -> List[str]:
- result: List[str] = []
- for item in version.split("."):
+def _version_split(version: str) -> list[str]:
+ """Split version into components.
+
+ The split components are intended for version comparison. The logic does
+ not attempt to retain the original version string, so joining the
+ components back with :func:`_version_join` may not produce the original
+ version string.
+ """
+ result: list[str] = []
+
+ epoch, _, rest = version.rpartition("!")
+ result.append(epoch or "0")
+
+ for item in rest.split("."):
match = _prefix_regex.search(item)
if match:
result.extend(match.groups())
@@ -593,13 +649,24 @@ def _version_split(version: str) -> List[str]:
return result
+def _version_join(components: list[str]) -> str:
+ """Join split version components into a version string.
+
+ This function assumes the input came from :func:`_version_split`, where the
+ first component must be the epoch (either empty or numeric), and all other
+ components numeric.
+ """
+ epoch, *rest = components
+ return f"{epoch}!{'.'.join(rest)}"
+
+
def _is_not_suffix(segment: str) -> bool:
return not any(
segment.startswith(prefix) for prefix in ("dev", "a", "b", "rc", "post")
)
-def _pad_version(left: List[str], right: List[str]) -> Tuple[List[str], List[str]]:
+def _pad_version(left: list[str], right: list[str]) -> tuple[list[str], list[str]]:
left_split, right_split = [], []
# Get the release segment of our versions
@@ -614,35 +681,91 @@ def _pad_version(left: List[str], right: List[str]) -> Tuple[List[str], List[str
left_split.insert(1, ["0"] * max(0, len(right_split[0]) - len(left_split[0])))
right_split.insert(1, ["0"] * max(0, len(left_split[0]) - len(right_split[0])))
- return (list(itertools.chain(*left_split)), list(itertools.chain(*right_split)))
+ return (
+ list(itertools.chain.from_iterable(left_split)),
+ list(itertools.chain.from_iterable(right_split)),
+ )
class SpecifierSet(BaseSpecifier):
+ """This class abstracts handling of a set of version specifiers.
+
+ It can be passed a single specifier (``>=3.0``), a comma-separated list of
+ specifiers (``>=3.0,!=3.1``), or no specifier at all.
+ """
+
def __init__(
- self, specifiers: str = "", prereleases: Optional[bool] = None
+ self,
+ specifiers: str | Iterable[Specifier] = "",
+ prereleases: bool | None = None,
) -> None:
+ """Initialize a SpecifierSet instance.
+
+ :param specifiers:
+ The string representation of a specifier or a comma-separated list of
+ specifiers which will be parsed and normalized before use.
+ May also be an iterable of ``Specifier`` instances, which will be used
+ as is.
+ :param prereleases:
+ This tells the SpecifierSet if it should accept prerelease versions if
+ applicable or not. The default of ``None`` will autodetect it from the
+ given specifiers.
+
+ :raises InvalidSpecifier:
+ If the given ``specifiers`` are not parseable than this exception will be
+ raised.
+ """
- # Split on , to break each individual specifier into it's own item, and
- # strip each item to remove leading/trailing whitespace.
- split_specifiers = [s.strip() for s in specifiers.split(",") if s.strip()]
-
- # Parsed each individual specifier, attempting first to make it a
- # Specifier and falling back to a LegacySpecifier.
- parsed: Set[_IndividualSpecifier] = set()
- for specifier in split_specifiers:
- try:
- parsed.add(Specifier(specifier))
- except InvalidSpecifier:
- parsed.add(LegacySpecifier(specifier))
+ if isinstance(specifiers, str):
+ # Split on `,` to break each individual specifier into its own item, and
+ # strip each item to remove leading/trailing whitespace.
+ split_specifiers = [s.strip() for s in specifiers.split(",") if s.strip()]
- # Turn our parsed specifiers into a frozen set and save them for later.
- self._specs = frozenset(parsed)
+ # Make each individual specifier a Specifier and save in a frozen set
+ # for later.
+ self._specs = frozenset(map(Specifier, split_specifiers))
+ else:
+ # Save the supplied specifiers in a frozen set.
+ self._specs = frozenset(specifiers)
# Store our prereleases value so we can use it later to determine if
# we accept prereleases or not.
self._prereleases = prereleases
+ @property
+ def prereleases(self) -> bool | None:
+ # If we have been given an explicit prerelease modifier, then we'll
+ # pass that through here.
+ if self._prereleases is not None:
+ return self._prereleases
+
+ # If we don't have any specifiers, and we don't have a forced value,
+ # then we'll just return None since we don't know if this should have
+ # pre-releases or not.
+ if not self._specs:
+ return None
+
+ # Otherwise we'll see if any of the given specifiers accept
+ # prereleases, if any of them do we'll return True, otherwise False.
+ return any(s.prereleases for s in self._specs)
+
+ @prereleases.setter
+ def prereleases(self, value: bool) -> None:
+ self._prereleases = value
+
def __repr__(self) -> str:
+ """A representation of the specifier set that shows all internal state.
+
+ Note that the ordering of the individual specifiers within the set may not
+ match the input string.
+
+ >>> SpecifierSet('>=1.0.0,!=2.0.0')
+ <SpecifierSet('!=2.0.0,>=1.0.0')>
+ >>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=False)
+ <SpecifierSet('!=2.0.0,>=1.0.0', prereleases=False)>
+ >>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=True)
+ <SpecifierSet('!=2.0.0,>=1.0.0', prereleases=True)>
+ """
pre = (
f", prereleases={self.prereleases!r}"
if self._prereleases is not None
@@ -652,12 +775,31 @@ class SpecifierSet(BaseSpecifier):
return f"<SpecifierSet({str(self)!r}{pre})>"
def __str__(self) -> str:
+ """A string representation of the specifier set that can be round-tripped.
+
+ Note that the ordering of the individual specifiers within the set may not
+ match the input string.
+
+ >>> str(SpecifierSet(">=1.0.0,!=1.0.1"))
+ '!=1.0.1,>=1.0.0'
+ >>> str(SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False))
+ '!=1.0.1,>=1.0.0'
+ """
return ",".join(sorted(str(s) for s in self._specs))
def __hash__(self) -> int:
return hash(self._specs)
- def __and__(self, other: Union["SpecifierSet", str]) -> "SpecifierSet":
+ def __and__(self, other: SpecifierSet | str) -> SpecifierSet:
+ """Return a SpecifierSet which is a combination of the two sets.
+
+ :param other: The other object to combine with.
+
+ >>> SpecifierSet(">=1.0.0,!=1.0.1") & '<=2.0.0,!=2.0.1'
+ <SpecifierSet('!=1.0.1,!=2.0.1,<=2.0.0,>=1.0.0')>
+ >>> SpecifierSet(">=1.0.0,!=1.0.1") & SpecifierSet('<=2.0.0,!=2.0.1')
+ <SpecifierSet('!=1.0.1,!=2.0.1,<=2.0.0,>=1.0.0')>
+ """
if isinstance(other, str):
other = SpecifierSet(other)
elif not isinstance(other, SpecifierSet):
@@ -681,7 +823,25 @@ class SpecifierSet(BaseSpecifier):
return specifier
def __eq__(self, other: object) -> bool:
- if isinstance(other, (str, _IndividualSpecifier)):
+ """Whether or not the two SpecifierSet-like objects are equal.
+
+ :param other: The other object to check against.
+
+ The value of :attr:`prereleases` is ignored.
+
+ >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.1")
+ True
+ >>> (SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False) ==
+ ... SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True))
+ True
+ >>> SpecifierSet(">=1.0.0,!=1.0.1") == ">=1.0.0,!=1.0.1"
+ True
+ >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0")
+ False
+ >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.2")
+ False
+ """
+ if isinstance(other, (str, Specifier)):
other = SpecifierSet(str(other))
elif not isinstance(other, SpecifierSet):
return NotImplemented
@@ -689,43 +849,72 @@ class SpecifierSet(BaseSpecifier):
return self._specs == other._specs
def __len__(self) -> int:
+ """Returns the number of specifiers in this specifier set."""
return len(self._specs)
- def __iter__(self) -> Iterator[_IndividualSpecifier]:
- return iter(self._specs)
-
- @property
- def prereleases(self) -> Optional[bool]:
-
- # If we have been given an explicit prerelease modifier, then we'll
- # pass that through here.
- if self._prereleases is not None:
- return self._prereleases
-
- # If we don't have any specifiers, and we don't have a forced value,
- # then we'll just return None since we don't know if this should have
- # pre-releases or not.
- if not self._specs:
- return None
-
- # Otherwise we'll see if any of the given specifiers accept
- # prereleases, if any of them do we'll return True, otherwise False.
- return any(s.prereleases for s in self._specs)
+ def __iter__(self) -> Iterator[Specifier]:
+ """
+ Returns an iterator over all the underlying :class:`Specifier` instances
+ in this specifier set.
- @prereleases.setter
- def prereleases(self, value: bool) -> None:
- self._prereleases = value
+ >>> sorted(SpecifierSet(">=1.0.0,!=1.0.1"), key=str)
+ [<Specifier('!=1.0.1')>, <Specifier('>=1.0.0')>]
+ """
+ return iter(self._specs)
def __contains__(self, item: UnparsedVersion) -> bool:
+ """Return whether or not the item is contained in this specifier.
+
+ :param item: The item to check for.
+
+ This is used for the ``in`` operator and behaves the same as
+ :meth:`contains` with no ``prereleases`` argument passed.
+
+ >>> "1.2.3" in SpecifierSet(">=1.0.0,!=1.0.1")
+ True
+ >>> Version("1.2.3") in SpecifierSet(">=1.0.0,!=1.0.1")
+ True
+ >>> "1.0.1" in SpecifierSet(">=1.0.0,!=1.0.1")
+ False
+ >>> "1.3.0a1" in SpecifierSet(">=1.0.0,!=1.0.1")
+ False
+ >>> "1.3.0a1" in SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True)
+ True
+ """
return self.contains(item)
def contains(
- self, item: UnparsedVersion, prereleases: Optional[bool] = None
+ self,
+ item: UnparsedVersion,
+ prereleases: bool | None = None,
+ installed: bool | None = None,
) -> bool:
-
- # Ensure that our item is a Version or LegacyVersion instance.
- if not isinstance(item, (LegacyVersion, Version)):
- item = parse(item)
+ """Return whether or not the item is contained in this SpecifierSet.
+
+ :param item:
+ The item to check for, which can be a version string or a
+ :class:`Version` instance.
+ :param prereleases:
+ Whether or not to match prereleases with this SpecifierSet. If set to
+ ``None`` (the default), it uses :attr:`prereleases` to determine
+ whether or not prereleases are allowed.
+
+ >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.2.3")
+ True
+ >>> SpecifierSet(">=1.0.0,!=1.0.1").contains(Version("1.2.3"))
+ True
+ >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.0.1")
+ False
+ >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.3.0a1")
+ False
+ >>> SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True).contains("1.3.0a1")
+ True
+ >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.3.0a1", prereleases=True)
+ True
+ """
+ # Ensure that our item is a Version instance.
+ if not isinstance(item, Version):
+ item = Version(item)
# Determine if we're forcing a prerelease or not, if we're not forcing
# one for this particular filter call, then we'll use whatever the
@@ -742,6 +931,9 @@ class SpecifierSet(BaseSpecifier):
if not prereleases and item.is_prerelease:
return False
+ if installed and item.is_prerelease:
+ item = Version(item.base_version)
+
# We simply dispatch to the underlying specs here to make sure that the
# given version is contained within all of them.
# Note: This use of all() here means that an empty set of specifiers
@@ -749,9 +941,46 @@ class SpecifierSet(BaseSpecifier):
return all(s.contains(item, prereleases=prereleases) for s in self._specs)
def filter(
- self, iterable: Iterable[VersionTypeVar], prereleases: Optional[bool] = None
- ) -> Iterable[VersionTypeVar]:
-
+ self, iterable: Iterable[UnparsedVersionVar], prereleases: bool | None = None
+ ) -> Iterator[UnparsedVersionVar]:
+ """Filter items in the given iterable, that match the specifiers in this set.
+
+ :param iterable:
+ An iterable that can contain version strings and :class:`Version` instances.
+ The items in the iterable will be filtered according to the specifier.
+ :param prereleases:
+ Whether or not to allow prereleases in the returned iterator. If set to
+ ``None`` (the default), it will be intelligently decide whether to allow
+ prereleases or not (based on the :attr:`prereleases` attribute, and
+ whether the only versions matching are prereleases).
+
+ This method is smarter than just ``filter(SpecifierSet(...).contains, [...])``
+ because it implements the rule from :pep:`440` that a prerelease item
+ SHOULD be accepted if no other versions match the given specifier.
+
+ >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.3", "1.5a1"]))
+ ['1.3']
+ >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.3", Version("1.4")]))
+ ['1.3', <Version('1.4')>]
+ >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.5a1"]))
+ []
+ >>> list(SpecifierSet(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True))
+ ['1.3', '1.5a1']
+ >>> list(SpecifierSet(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"]))
+ ['1.3', '1.5a1']
+
+ An "empty" SpecifierSet will filter items based on the presence of prerelease
+ versions in the set.
+
+ >>> list(SpecifierSet("").filter(["1.3", "1.5a1"]))
+ ['1.3']
+ >>> list(SpecifierSet("").filter(["1.5a1"]))
+ ['1.5a1']
+ >>> list(SpecifierSet("", prereleases=True).filter(["1.3", "1.5a1"]))
+ ['1.3', '1.5a1']
+ >>> list(SpecifierSet("").filter(["1.3", "1.5a1"], prereleases=True))
+ ['1.3', '1.5a1']
+ """
# Determine if we're forcing a prerelease or not, if we're not forcing
# one for this particular filter call, then we'll use whatever the
# SpecifierSet thinks for whether or not we should support prereleases.
@@ -764,27 +993,16 @@ class SpecifierSet(BaseSpecifier):
if self._specs:
for spec in self._specs:
iterable = spec.filter(iterable, prereleases=bool(prereleases))
- return iterable
+ return iter(iterable)
# If we do not have any specifiers, then we need to have a rough filter
# which will filter out any pre-releases, unless there are no final
- # releases, and which will filter out LegacyVersion in general.
+ # releases.
else:
- filtered: List[VersionTypeVar] = []
- found_prereleases: List[VersionTypeVar] = []
-
- item: UnparsedVersion
- parsed_version: Union[Version, LegacyVersion]
+ filtered: list[UnparsedVersionVar] = []
+ found_prereleases: list[UnparsedVersionVar] = []
for item in iterable:
- # Ensure that we some kind of Version class for this item.
- if not isinstance(item, (LegacyVersion, Version)):
- parsed_version = parse(item)
- else:
- parsed_version = item
-
- # Filter out any item which is parsed as a LegacyVersion
- if isinstance(parsed_version, LegacyVersion):
- continue
+ parsed_version = _coerce_version(item)
# Store any item which is a pre-release for later unless we've
# already found a final version or we are accepting prereleases
@@ -797,6 +1015,6 @@ class SpecifierSet(BaseSpecifier):
# If we've found no items except for pre-releases, then we'll go
# ahead and use the pre-releases
if not filtered and found_prereleases and prereleases is None:
- return found_prereleases
+ return iter(found_prereleases)
- return filtered
+ return iter(filtered)
diff --git a/contrib/python/packaging/py3/packaging/tags.py b/contrib/python/packaging/py3/packaging/tags.py
index 9a3d25a71c7..f5903402abb 100644
--- a/contrib/python/packaging/py3/packaging/tags.py
+++ b/contrib/python/packaging/py3/packaging/tags.py
@@ -2,21 +2,21 @@
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
# for complete details.
+from __future__ import annotations
+
import logging
import platform
+import re
+import struct
+import subprocess
import sys
import sysconfig
from importlib.machinery import EXTENSION_SUFFIXES
from typing import (
- Dict,
- FrozenSet,
Iterable,
Iterator,
- List,
- Optional,
Sequence,
Tuple,
- Union,
cast,
)
@@ -25,9 +25,9 @@ from . import _manylinux, _musllinux
logger = logging.getLogger(__name__)
PythonVersion = Sequence[int]
-MacVersion = Tuple[int, int]
+AppleVersion = Tuple[int, int]
-INTERPRETER_SHORT_NAMES: Dict[str, str] = {
+INTERPRETER_SHORT_NAMES: dict[str, str] = {
"python": "py", # Generic.
"cpython": "cp",
"pypy": "pp",
@@ -36,7 +36,7 @@ INTERPRETER_SHORT_NAMES: Dict[str, str] = {
}
-_32_BIT_INTERPRETER = sys.maxsize <= 2 ** 32
+_32_BIT_INTERPRETER = struct.calcsize("P") == 4
class Tag:
@@ -47,7 +47,7 @@ class Tag:
is also supported.
"""
- __slots__ = ["_interpreter", "_abi", "_platform", "_hash"]
+ __slots__ = ["_abi", "_hash", "_interpreter", "_platform"]
def __init__(self, interpreter: str, abi: str, platform: str) -> None:
self._interpreter = interpreter.lower()
@@ -93,7 +93,7 @@ class Tag:
return f"<{self} @ {id(self)}>"
-def parse_tag(tag: str) -> FrozenSet[Tag]:
+def parse_tag(tag: str) -> frozenset[Tag]:
"""
Parses the provided tag (e.g. `py3-none-any`) into a frozenset of Tag instances.
@@ -109,8 +109,8 @@ def parse_tag(tag: str) -> FrozenSet[Tag]:
return frozenset(tags)
-def _get_config_var(name: str, warn: bool = False) -> Union[int, str, None]:
- value = sysconfig.get_config_var(name)
+def _get_config_var(name: str, warn: bool = False) -> int | str | None:
+ value: int | str | None = sysconfig.get_config_var(name)
if value is None and warn:
logger.debug(
"Config variable '%s' is unset, Python ABI tag may be incorrect", name
@@ -119,23 +119,40 @@ def _get_config_var(name: str, warn: bool = False) -> Union[int, str, None]:
def _normalize_string(string: str) -> str:
- return string.replace(".", "_").replace("-", "_")
+ return string.replace(".", "_").replace("-", "_").replace(" ", "_")
+
+
+def _is_threaded_cpython(abis: list[str]) -> bool:
+ """
+ Determine if the ABI corresponds to a threaded (`--disable-gil`) build.
+
+ The threaded builds are indicated by a "t" in the abiflags.
+ """
+ if len(abis) == 0:
+ return False
+ # expect e.g., cp313
+ m = re.match(r"cp\d+(.*)", abis[0])
+ if not m:
+ return False
+ abiflags = m.group(1)
+ return "t" in abiflags
-def _abi3_applies(python_version: PythonVersion) -> bool:
+def _abi3_applies(python_version: PythonVersion, threading: bool) -> bool:
"""
Determine if the Python version supports abi3.
- PEP 384 was first implemented in Python 3.2.
+ PEP 384 was first implemented in Python 3.2. The threaded (`--disable-gil`)
+ builds do not support abi3.
"""
- return len(python_version) > 1 and tuple(python_version) >= (3, 2)
+ return len(python_version) > 1 and tuple(python_version) >= (3, 2) and not threading
-def _cpython_abis(py_version: PythonVersion, warn: bool = False) -> List[str]:
+def _cpython_abis(py_version: PythonVersion, warn: bool = False) -> list[str]:
py_version = tuple(py_version) # To allow for version comparison.
abis = []
version = _version_nodot(py_version[:2])
- debug = pymalloc = ucs4 = ""
+ threading = debug = pymalloc = ucs4 = ""
with_debug = _get_config_var("Py_DEBUG", warn)
has_refcount = hasattr(sys, "gettotalrefcount")
# Windows doesn't set Py_DEBUG, so checking for support of debug-compiled
@@ -144,6 +161,8 @@ def _cpython_abis(py_version: PythonVersion, warn: bool = False) -> List[str]:
has_ext = "_d.pyd" in EXTENSION_SUFFIXES
if with_debug or (with_debug is None and (has_refcount or has_ext)):
debug = "d"
+ if py_version >= (3, 13) and _get_config_var("Py_GIL_DISABLED", warn):
+ threading = "t"
if py_version < (3, 8):
with_pymalloc = _get_config_var("WITH_PYMALLOC", warn)
if with_pymalloc or with_pymalloc is None:
@@ -157,20 +176,15 @@ def _cpython_abis(py_version: PythonVersion, warn: bool = False) -> List[str]:
elif debug:
# Debug builds can also load "normal" extension modules.
# We can also assume no UCS-4 or pymalloc requirement.
- abis.append(f"cp{version}")
- abis.insert(
- 0,
- "cp{version}{debug}{pymalloc}{ucs4}".format(
- version=version, debug=debug, pymalloc=pymalloc, ucs4=ucs4
- ),
- )
+ abis.append(f"cp{version}{threading}")
+ abis.insert(0, f"cp{version}{threading}{debug}{pymalloc}{ucs4}")
return abis
def cpython_tags(
- python_version: Optional[PythonVersion] = None,
- abis: Optional[Iterable[str]] = None,
- platforms: Optional[Iterable[str]] = None,
+ python_version: PythonVersion | None = None,
+ abis: Iterable[str] | None = None,
+ platforms: Iterable[str] | None = None,
*,
warn: bool = False,
) -> Iterator[Tag]:
@@ -211,29 +225,66 @@ def cpython_tags(
for abi in abis:
for platform_ in platforms:
yield Tag(interpreter, abi, platform_)
- if _abi3_applies(python_version):
+
+ threading = _is_threaded_cpython(abis)
+ use_abi3 = _abi3_applies(python_version, threading)
+ if use_abi3:
yield from (Tag(interpreter, "abi3", platform_) for platform_ in platforms)
yield from (Tag(interpreter, "none", platform_) for platform_ in platforms)
- if _abi3_applies(python_version):
+ if use_abi3:
for minor_version in range(python_version[1] - 1, 1, -1):
for platform_ in platforms:
- interpreter = "cp{version}".format(
- version=_version_nodot((python_version[0], minor_version))
- )
+ version = _version_nodot((python_version[0], minor_version))
+ interpreter = f"cp{version}"
yield Tag(interpreter, "abi3", platform_)
-def _generic_abi() -> Iterator[str]:
- abi = sysconfig.get_config_var("SOABI")
- if abi:
- yield _normalize_string(abi)
+def _generic_abi() -> list[str]:
+ """
+ Return the ABI tag based on EXT_SUFFIX.
+ """
+ # The following are examples of `EXT_SUFFIX`.
+ # We want to keep the parts which are related to the ABI and remove the
+ # parts which are related to the platform:
+ # - linux: '.cpython-310-x86_64-linux-gnu.so' => cp310
+ # - mac: '.cpython-310-darwin.so' => cp310
+ # - win: '.cp310-win_amd64.pyd' => cp310
+ # - win: '.pyd' => cp37 (uses _cpython_abis())
+ # - pypy: '.pypy38-pp73-x86_64-linux-gnu.so' => pypy38_pp73
+ # - graalpy: '.graalpy-38-native-x86_64-darwin.dylib'
+ # => graalpy_38_native
+
+ ext_suffix = _get_config_var("EXT_SUFFIX", warn=True)
+ if not isinstance(ext_suffix, str) or ext_suffix[0] != ".":
+ raise SystemError("invalid sysconfig.get_config_var('EXT_SUFFIX')")
+ parts = ext_suffix.split(".")
+ if len(parts) < 3:
+ # CPython3.7 and earlier uses ".pyd" on Windows.
+ return _cpython_abis(sys.version_info[:2])
+ soabi = parts[1]
+ if soabi.startswith("cpython"):
+ # non-windows
+ abi = "cp" + soabi.split("-")[1]
+ elif soabi.startswith("cp"):
+ # windows
+ abi = soabi.split("-")[0]
+ elif soabi.startswith("pypy"):
+ abi = "-".join(soabi.split("-")[:2])
+ elif soabi.startswith("graalpy"):
+ abi = "-".join(soabi.split("-")[:3])
+ elif soabi:
+ # pyston, ironpython, others?
+ abi = soabi
+ else:
+ return []
+ return [_normalize_string(abi)]
def generic_tags(
- interpreter: Optional[str] = None,
- abis: Optional[Iterable[str]] = None,
- platforms: Optional[Iterable[str]] = None,
+ interpreter: str | None = None,
+ abis: Iterable[str] | None = None,
+ platforms: Iterable[str] | None = None,
*,
warn: bool = False,
) -> Iterator[Tag]:
@@ -251,8 +302,9 @@ def generic_tags(
interpreter = "".join([interp_name, interp_version])
if abis is None:
abis = _generic_abi()
+ else:
+ abis = list(abis)
platforms = list(platforms or platform_tags())
- abis = list(abis)
if "none" not in abis:
abis.append("none")
for abi in abis:
@@ -276,9 +328,9 @@ def _py_interpreter_range(py_version: PythonVersion) -> Iterator[str]:
def compatible_tags(
- python_version: Optional[PythonVersion] = None,
- interpreter: Optional[str] = None,
- platforms: Optional[Iterable[str]] = None,
+ python_version: PythonVersion | None = None,
+ interpreter: str | None = None,
+ platforms: Iterable[str] | None = None,
) -> Iterator[Tag]:
"""
Yields the sequence of tags that are compatible with a specific version of Python.
@@ -310,7 +362,7 @@ def _mac_arch(arch: str, is_32bit: bool = _32_BIT_INTERPRETER) -> str:
return "i386"
-def _mac_binary_formats(version: MacVersion, cpu_arch: str) -> List[str]:
+def _mac_binary_formats(version: AppleVersion, cpu_arch: str) -> list[str]:
formats = [cpu_arch]
if cpu_arch == "x86_64":
if version < (10, 4):
@@ -343,7 +395,7 @@ def _mac_binary_formats(version: MacVersion, cpu_arch: str) -> List[str]:
def mac_platforms(
- version: Optional[MacVersion] = None, arch: Optional[str] = None
+ version: AppleVersion | None = None, arch: str | None = None
) -> Iterator[str]:
"""
Yields the platform tags for a macOS system.
@@ -355,7 +407,23 @@ def mac_platforms(
"""
version_str, _, cpu_arch = platform.mac_ver()
if version is None:
- version = cast("MacVersion", tuple(map(int, version_str.split(".")[:2])))
+ version = cast("AppleVersion", tuple(map(int, version_str.split(".")[:2])))
+ if version == (10, 16):
+ # When built against an older macOS SDK, Python will report macOS 10.16
+ # instead of the real version.
+ version_str = subprocess.run(
+ [
+ sys.executable,
+ "-sS",
+ "-c",
+ "import platform; print(platform.mac_ver()[0])",
+ ],
+ check=True,
+ env={"SYSTEM_VERSION_COMPAT": "0"},
+ stdout=subprocess.PIPE,
+ text=True,
+ ).stdout
+ version = cast("AppleVersion", tuple(map(int, version_str.split(".")[:2])))
else:
version = version
if arch is None:
@@ -366,24 +434,22 @@ def mac_platforms(
if (10, 0) <= version and version < (11, 0):
# Prior to Mac OS 11, each yearly release of Mac OS bumped the
# "minor" version number. The major version was always 10.
+ major_version = 10
for minor_version in range(version[1], -1, -1):
- compat_version = 10, minor_version
+ compat_version = major_version, minor_version
binary_formats = _mac_binary_formats(compat_version, arch)
for binary_format in binary_formats:
- yield "macosx_{major}_{minor}_{binary_format}".format(
- major=10, minor=minor_version, binary_format=binary_format
- )
+ yield f"macosx_{major_version}_{minor_version}_{binary_format}"
if version >= (11, 0):
# Starting with Mac OS 11, each yearly release bumps the major version
# number. The minor versions are now the midyear updates.
+ minor_version = 0
for major_version in range(version[0], 10, -1):
- compat_version = major_version, 0
+ compat_version = major_version, minor_version
binary_formats = _mac_binary_formats(compat_version, arch)
for binary_format in binary_formats:
- yield "macosx_{major}_{minor}_{binary_format}".format(
- major=major_version, minor=0, binary_format=binary_format
- )
+ yield f"macosx_{major_version}_{minor_version}_{binary_format}"
if version >= (11, 0):
# Mac OS 11 on x86_64 is compatible with binaries from previous releases.
@@ -393,38 +459,94 @@ def mac_platforms(
# However, the "universal2" binary format can have a
# macOS version earlier than 11.0 when the x86_64 part of the binary supports
# that version of macOS.
+ major_version = 10
if arch == "x86_64":
for minor_version in range(16, 3, -1):
- compat_version = 10, minor_version
+ compat_version = major_version, minor_version
binary_formats = _mac_binary_formats(compat_version, arch)
for binary_format in binary_formats:
- yield "macosx_{major}_{minor}_{binary_format}".format(
- major=compat_version[0],
- minor=compat_version[1],
- binary_format=binary_format,
- )
+ yield f"macosx_{major_version}_{minor_version}_{binary_format}"
else:
for minor_version in range(16, 3, -1):
- compat_version = 10, minor_version
+ compat_version = major_version, minor_version
binary_format = "universal2"
- yield "macosx_{major}_{minor}_{binary_format}".format(
- major=compat_version[0],
- minor=compat_version[1],
- binary_format=binary_format,
- )
+ yield f"macosx_{major_version}_{minor_version}_{binary_format}"
+
+
+def ios_platforms(
+ version: AppleVersion | None = None, multiarch: str | None = None
+) -> Iterator[str]:
+ """
+ Yields the platform tags for an iOS system.
+
+ :param version: A two-item tuple specifying the iOS version to generate
+ platform tags for. Defaults to the current iOS version.
+ :param multiarch: The CPU architecture+ABI to generate platform tags for -
+ (the value used by `sys.implementation._multiarch` e.g.,
+ `arm64_iphoneos` or `x84_64_iphonesimulator`). Defaults to the current
+ multiarch value.
+ """
+ if version is None:
+ # if iOS is the current platform, ios_ver *must* be defined. However,
+ # it won't exist for CPython versions before 3.13, which causes a mypy
+ # error.
+ _, release, _, _ = platform.ios_ver() # type: ignore[attr-defined, unused-ignore]
+ version = cast("AppleVersion", tuple(map(int, release.split(".")[:2])))
+
+ if multiarch is None:
+ multiarch = sys.implementation._multiarch
+ multiarch = multiarch.replace("-", "_")
+
+ ios_platform_template = "ios_{major}_{minor}_{multiarch}"
+
+ # Consider any iOS major.minor version from the version requested, down to
+ # 12.0. 12.0 is the first iOS version that is known to have enough features
+ # to support CPython. Consider every possible minor release up to X.9. There
+ # highest the minor has ever gone is 8 (14.8 and 15.8) but having some extra
+ # candidates that won't ever match doesn't really hurt, and it saves us from
+ # having to keep an explicit list of known iOS versions in the code. Return
+ # the results descending order of version number.
+
+ # If the requested major version is less than 12, there won't be any matches.
+ if version[0] < 12:
+ return
+
+ # Consider the actual X.Y version that was requested.
+ yield ios_platform_template.format(
+ major=version[0], minor=version[1], multiarch=multiarch
+ )
+
+ # Consider every minor version from X.0 to the minor version prior to the
+ # version requested by the platform.
+ for minor in range(version[1] - 1, -1, -1):
+ yield ios_platform_template.format(
+ major=version[0], minor=minor, multiarch=multiarch
+ )
+
+ for major in range(version[0] - 1, 11, -1):
+ for minor in range(9, -1, -1):
+ yield ios_platform_template.format(
+ major=major, minor=minor, multiarch=multiarch
+ )
def _linux_platforms(is_32bit: bool = _32_BIT_INTERPRETER) -> Iterator[str]:
linux = _normalize_string(sysconfig.get_platform())
+ if not linux.startswith("linux_"):
+ # we should never be here, just yield the sysconfig one and return
+ yield linux
+ return
if is_32bit:
if linux == "linux_x86_64":
linux = "linux_i686"
elif linux == "linux_aarch64":
- linux = "linux_armv7l"
+ linux = "linux_armv8l"
_, arch = linux.split("_", 1)
- yield from _manylinux.platform_tags(linux, arch)
- yield from _musllinux.platform_tags(arch)
- yield linux
+ archs = {"armv8l": ["armv8l", "armv7l"]}.get(arch, [arch])
+ yield from _manylinux.platform_tags(archs)
+ yield from _musllinux.platform_tags(archs)
+ for arch in archs:
+ yield f"linux_{arch}"
def _generic_platforms() -> Iterator[str]:
@@ -437,6 +559,8 @@ def platform_tags() -> Iterator[str]:
"""
if platform.system() == "Darwin":
return mac_platforms()
+ elif platform.system() == "iOS":
+ return ios_platforms()
elif platform.system() == "Linux":
return _linux_platforms()
else:
@@ -446,6 +570,9 @@ def platform_tags() -> Iterator[str]:
def interpreter_name() -> str:
"""
Returns the name of the running interpreter.
+
+ Some implementations have a reserved, two-letter abbreviation which will
+ be returned when appropriate.
"""
name = sys.implementation.name
return INTERPRETER_SHORT_NAMES.get(name) or name
@@ -482,6 +609,9 @@ def sys_tags(*, warn: bool = False) -> Iterator[Tag]:
yield from generic_tags()
if interp_name == "pp":
- yield from compatible_tags(interpreter="pp3")
+ interp = "pp3"
+ elif interp_name == "cp":
+ interp = "cp" + interpreter_version(warn=warn)
else:
- yield from compatible_tags()
+ interp = None
+ yield from compatible_tags(interpreter=interp)
diff --git a/contrib/python/packaging/py3/packaging/utils.py b/contrib/python/packaging/py3/packaging/utils.py
index 80993eff132..23450953df7 100644
--- a/contrib/python/packaging/py3/packaging/utils.py
+++ b/contrib/python/packaging/py3/packaging/utils.py
@@ -2,16 +2,25 @@
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
# for complete details.
+from __future__ import annotations
+
+import functools
import re
-from typing import FrozenSet, NewType, Tuple, Union, cast
+from typing import NewType, Tuple, Union, cast
from .tags import Tag, parse_tag
-from .version import InvalidVersion, Version
+from .version import InvalidVersion, Version, _TrimmedRelease
BuildTag = Union[Tuple[()], Tuple[int, str]]
NormalizedName = NewType("NormalizedName", str)
+class InvalidName(ValueError):
+ """
+ An invalid distribution name; users should refer to the packaging user guide.
+ """
+
+
class InvalidWheelFilename(ValueError):
"""
An invalid wheel filename was found, users should refer to PEP 427.
@@ -24,88 +33,99 @@ class InvalidSdistFilename(ValueError):
"""
+# Core metadata spec for `Name`
+_validate_regex = re.compile(
+ r"^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$", re.IGNORECASE
+)
_canonicalize_regex = re.compile(r"[-_.]+")
+_normalized_regex = re.compile(r"^([a-z0-9]|[a-z0-9]([a-z0-9-](?!--))*[a-z0-9])$")
# PEP 427: The build number must start with a digit.
_build_tag_regex = re.compile(r"(\d+)(.*)")
-def canonicalize_name(name: str) -> NormalizedName:
+def canonicalize_name(name: str, *, validate: bool = False) -> NormalizedName:
+ if validate and not _validate_regex.match(name):
+ raise InvalidName(f"name is invalid: {name!r}")
# This is taken from PEP 503.
value = _canonicalize_regex.sub("-", name).lower()
return cast(NormalizedName, value)
-def canonicalize_version(version: Union[Version, str], strip_trailing_zero: bool = False) -> str:
- """
- This is very similar to Version.__str__, but has one subtle difference
- with the way it handles the release segment.
- """
- if isinstance(version, str):
- try:
- parsed = Version(version)
- except InvalidVersion:
- # Legacy versions cannot be normalized
- return version
- else:
- parsed = version
+def is_normalized_name(name: str) -> bool:
+ return _normalized_regex.match(name) is not None
- parts = []
- # Epoch
- if parsed.epoch != 0:
- parts.append(f"{parsed.epoch}!")
+@functools.singledispatch
+def canonicalize_version(
+ version: Version | str, *, strip_trailing_zero: bool = True
+) -> str:
+ """
+ Return a canonical form of a version as a string.
- # Release segment
- # NB: This strips trailing '.0's to normalize
- parts.append(re.sub(r"(\.0)+$", "", ".".join(str(x) for x in parsed.release)))
+ >>> canonicalize_version('1.0.1')
+ '1.0.1'
- # Pre-release
- if parsed.pre is not None:
- parts.append("".join(str(x) for x in parsed.pre))
+ Per PEP 625, versions may have multiple canonical forms, differing
+ only by trailing zeros.
- # Post-release
- if parsed.post is not None:
- parts.append(f".post{parsed.post}")
+ >>> canonicalize_version('1.0.0')
+ '1'
+ >>> canonicalize_version('1.0.0', strip_trailing_zero=False)
+ '1.0.0'
- # Development release
- if parsed.dev is not None:
- parts.append(f".dev{parsed.dev}")
+ Invalid versions are returned unaltered.
+
+ >>> canonicalize_version('foo bar baz')
+ 'foo bar baz'
+ """
+ return str(_TrimmedRelease(str(version)) if strip_trailing_zero else version)
- # Local version segment
- if parsed.local is not None:
- parts.append(f"+{parsed.local}")
- return "".join(parts)
+@canonicalize_version.register
+def _(version: str, *, strip_trailing_zero: bool = True) -> str:
+ try:
+ parsed = Version(version)
+ except InvalidVersion:
+ # Legacy versions cannot be normalized
+ return version
+ return canonicalize_version(parsed, strip_trailing_zero=strip_trailing_zero)
def parse_wheel_filename(
filename: str,
-) -> Tuple[NormalizedName, Version, BuildTag, FrozenSet[Tag]]:
+) -> tuple[NormalizedName, Version, BuildTag, frozenset[Tag]]:
if not filename.endswith(".whl"):
raise InvalidWheelFilename(
- f"Invalid wheel filename (extension must be '.whl'): {filename}"
+ f"Invalid wheel filename (extension must be '.whl'): {filename!r}"
)
filename = filename[:-4]
dashes = filename.count("-")
if dashes not in (4, 5):
raise InvalidWheelFilename(
- f"Invalid wheel filename (wrong number of parts): {filename}"
+ f"Invalid wheel filename (wrong number of parts): {filename!r}"
)
parts = filename.split("-", dashes - 2)
name_part = parts[0]
- # See PEP 427 for the rules on escaping the project name
+ # See PEP 427 for the rules on escaping the project name.
if "__" in name_part or re.match(r"^[\w\d._]*$", name_part, re.UNICODE) is None:
- raise InvalidWheelFilename(f"Invalid project name: {filename}")
+ raise InvalidWheelFilename(f"Invalid project name: {filename!r}")
name = canonicalize_name(name_part)
- version = Version(parts[1])
+
+ try:
+ version = Version(parts[1])
+ except InvalidVersion as e:
+ raise InvalidWheelFilename(
+ f"Invalid wheel filename (invalid version): {filename!r}"
+ ) from e
+
if dashes == 5:
build_part = parts[2]
build_match = _build_tag_regex.match(build_part)
if build_match is None:
raise InvalidWheelFilename(
- f"Invalid build number: {build_part} in '{filename}'"
+ f"Invalid build number: {build_part} in {filename!r}"
)
build = cast(BuildTag, (int(build_match.group(1)), build_match.group(2)))
else:
@@ -114,7 +134,7 @@ def parse_wheel_filename(
return (name, version, build, tags)
-def parse_sdist_filename(filename: str) -> Tuple[NormalizedName, Version]:
+def parse_sdist_filename(filename: str) -> tuple[NormalizedName, Version]:
if filename.endswith(".tar.gz"):
file_stem = filename[: -len(".tar.gz")]
elif filename.endswith(".zip"):
@@ -122,15 +142,22 @@ def parse_sdist_filename(filename: str) -> Tuple[NormalizedName, Version]:
else:
raise InvalidSdistFilename(
f"Invalid sdist filename (extension must be '.tar.gz' or '.zip'):"
- f" {filename}"
+ f" {filename!r}"
)
# We are requiring a PEP 440 version, which cannot contain dashes,
# so we split on the last dash.
name_part, sep, version_part = file_stem.rpartition("-")
if not sep:
- raise InvalidSdistFilename(f"Invalid sdist filename: {filename}")
+ raise InvalidSdistFilename(f"Invalid sdist filename: {filename!r}")
name = canonicalize_name(name_part)
- version = Version(version_part)
+
+ try:
+ version = Version(version_part)
+ except InvalidVersion as e:
+ raise InvalidSdistFilename(
+ f"Invalid sdist filename (invalid version): {filename!r}"
+ ) from e
+
return (name, version)
diff --git a/contrib/python/packaging/py3/packaging/version.py b/contrib/python/packaging/py3/packaging/version.py
index de9a09a4ed3..c9bbda20e46 100644
--- a/contrib/python/packaging/py3/packaging/version.py
+++ b/contrib/python/packaging/py3/packaging/version.py
@@ -1,64 +1,73 @@
# This file is dual licensed under the terms of the Apache License, Version
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
# for complete details.
+"""
+.. testsetup::
+
+ from packaging.version import parse, Version
+"""
+
+from __future__ import annotations
-import collections
import itertools
import re
-import warnings
-from typing import Callable, Iterator, List, Optional, SupportsInt, Tuple, Union
+from typing import Any, Callable, NamedTuple, SupportsInt, Tuple, Union
from ._structures import Infinity, InfinityType, NegativeInfinity, NegativeInfinityType
-__all__ = ["parse", "Version", "LegacyVersion", "InvalidVersion", "VERSION_PATTERN"]
+__all__ = ["VERSION_PATTERN", "InvalidVersion", "Version", "parse"]
+
+LocalType = Tuple[Union[int, str], ...]
-InfiniteTypes = Union[InfinityType, NegativeInfinityType]
-PrePostDevType = Union[InfiniteTypes, Tuple[str, int]]
-SubLocalType = Union[InfiniteTypes, int, str]
-LocalType = Union[
+CmpPrePostDevType = Union[InfinityType, NegativeInfinityType, Tuple[str, int]]
+CmpLocalType = Union[
NegativeInfinityType,
- Tuple[
- Union[
- SubLocalType,
- Tuple[SubLocalType, str],
- Tuple[NegativeInfinityType, SubLocalType],
- ],
- ...,
- ],
+ Tuple[Union[Tuple[int, str], Tuple[NegativeInfinityType, Union[int, str]]], ...],
]
CmpKey = Tuple[
- int, Tuple[int, ...], PrePostDevType, PrePostDevType, PrePostDevType, LocalType
-]
-LegacyCmpKey = Tuple[int, Tuple[str, ...]]
-VersionComparisonMethod = Callable[
- [Union[CmpKey, LegacyCmpKey], Union[CmpKey, LegacyCmpKey]], bool
+ int,
+ Tuple[int, ...],
+ CmpPrePostDevType,
+ CmpPrePostDevType,
+ CmpPrePostDevType,
+ CmpLocalType,
]
+VersionComparisonMethod = Callable[[CmpKey, CmpKey], bool]
-_Version = collections.namedtuple(
- "_Version", ["epoch", "release", "dev", "pre", "post", "local"]
-)
+class _Version(NamedTuple):
+ epoch: int
+ release: tuple[int, ...]
+ dev: tuple[str, int] | None
+ pre: tuple[str, int] | None
+ post: tuple[str, int] | None
+ local: LocalType | None
-def parse(version: str) -> Union["LegacyVersion", "Version"]:
- """
- Parse the given version string and return either a :class:`Version` object
- or a :class:`LegacyVersion` object depending on if the given version is
- a valid PEP 440 version or a legacy version.
+
+def parse(version: str) -> Version:
+ """Parse the given version string.
+
+ >>> parse('1.0.dev1')
+ <Version('1.0.dev1')>
+
+ :param version: The version string to parse.
+ :raises InvalidVersion: When the version string is not a valid version.
"""
- try:
- return Version(version)
- except InvalidVersion:
- return LegacyVersion(version)
+ return Version(version)
class InvalidVersion(ValueError):
- """
- An invalid version was found, users should refer to PEP 440.
+ """Raised when a version string is not a valid version.
+
+ >>> Version("invalid")
+ Traceback (most recent call last):
+ ...
+ packaging.version.InvalidVersion: Invalid version: 'invalid'
"""
class _BaseVersion:
- _key: Union[CmpKey, LegacyCmpKey]
+ _key: tuple[Any, ...]
def __hash__(self) -> int:
return hash(self._key)
@@ -66,13 +75,13 @@ class _BaseVersion:
# Please keep the duplicated `isinstance` check
# in the six comparisons hereunder
# unless you find a way to avoid adding overhead function calls.
- def __lt__(self, other: "_BaseVersion") -> bool:
+ def __lt__(self, other: _BaseVersion) -> bool:
if not isinstance(other, _BaseVersion):
return NotImplemented
return self._key < other._key
- def __le__(self, other: "_BaseVersion") -> bool:
+ def __le__(self, other: _BaseVersion) -> bool:
if not isinstance(other, _BaseVersion):
return NotImplemented
@@ -84,13 +93,13 @@ class _BaseVersion:
return self._key == other._key
- def __ge__(self, other: "_BaseVersion") -> bool:
+ def __ge__(self, other: _BaseVersion) -> bool:
if not isinstance(other, _BaseVersion):
return NotImplemented
return self._key >= other._key
- def __gt__(self, other: "_BaseVersion") -> bool:
+ def __gt__(self, other: _BaseVersion) -> bool:
if not isinstance(other, _BaseVersion):
return NotImplemented
@@ -103,133 +112,16 @@ class _BaseVersion:
return self._key != other._key
-class LegacyVersion(_BaseVersion):
- def __init__(self, version: str) -> None:
- self._version = str(version)
- self._key = _legacy_cmpkey(self._version)
-
- warnings.warn(
- "Creating a LegacyVersion has been deprecated and will be "
- "removed in the next major release",
- DeprecationWarning,
- )
-
- def __str__(self) -> str:
- return self._version
-
- def __repr__(self) -> str:
- return f"<LegacyVersion('{self}')>"
-
- @property
- def public(self) -> str:
- return self._version
-
- @property
- def base_version(self) -> str:
- return self._version
-
- @property
- def epoch(self) -> int:
- return -1
-
- @property
- def release(self) -> None:
- return None
-
- @property
- def pre(self) -> None:
- return None
-
- @property
- def post(self) -> None:
- return None
-
- @property
- def dev(self) -> None:
- return None
-
- @property
- def local(self) -> None:
- return None
-
- @property
- def is_prerelease(self) -> bool:
- return False
-
- @property
- def is_postrelease(self) -> bool:
- return False
-
- @property
- def is_devrelease(self) -> bool:
- return False
-
-
-_legacy_version_component_re = re.compile(r"(\d+ | [a-z]+ | \.| -)", re.VERBOSE)
-
-_legacy_version_replacement_map = {
- "pre": "c",
- "preview": "c",
- "-": "final-",
- "rc": "c",
- "dev": "@",
-}
-
-
-def _parse_version_parts(s: str) -> Iterator[str]:
- for part in _legacy_version_component_re.split(s):
- part = _legacy_version_replacement_map.get(part, part)
-
- if not part or part == ".":
- continue
-
- if part[:1] in "0123456789":
- # pad for numeric comparison
- yield part.zfill(8)
- else:
- yield "*" + part
-
- # ensure that alpha/beta/candidate are before final
- yield "*final"
-
-
-def _legacy_cmpkey(version: str) -> LegacyCmpKey:
-
- # We hardcode an epoch of -1 here. A PEP 440 version can only have a epoch
- # greater than or equal to 0. This will effectively put the LegacyVersion,
- # which uses the defacto standard originally implemented by setuptools,
- # as before all PEP 440 versions.
- epoch = -1
-
- # This scheme is taken from pkg_resources.parse_version setuptools prior to
- # it's adoption of the packaging library.
- parts: List[str] = []
- for part in _parse_version_parts(version.lower()):
- if part.startswith("*"):
- # remove "-" before a prerelease tag
- if part < "*final":
- while parts and parts[-1] == "*final-":
- parts.pop()
-
- # remove trailing zeros from each series of numeric parts
- while parts and parts[-1] == "00000000":
- parts.pop()
-
- parts.append(part)
-
- return epoch, tuple(parts)
-
-
# Deliberately not anchored to the start and end of the string, to make it
# easier for 3rd party code to reuse
-VERSION_PATTERN = r"""
+_VERSION_PATTERN = r"""
v?
(?:
(?:(?P<epoch>[0-9]+)!)? # epoch
(?P<release>[0-9]+(?:\.[0-9]+)*) # release segment
(?P<pre> # pre-release
[-_\.]?
- (?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview))
+ (?P<pre_l>alpha|a|beta|b|preview|pre|c|rc)
[-_\.]?
(?P<pre_n>[0-9]+)?
)?
@@ -253,17 +145,61 @@ VERSION_PATTERN = r"""
(?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))? # local version
"""
+VERSION_PATTERN = _VERSION_PATTERN
+"""
+A string containing the regular expression used to match a valid version.
+
+The pattern is not anchored at either end, and is intended for embedding in larger
+expressions (for example, matching a version number as part of a file name). The
+regular expression should be compiled with the ``re.VERBOSE`` and ``re.IGNORECASE``
+flags set.
+
+:meta hide-value:
+"""
+
class Version(_BaseVersion):
+ """This class abstracts handling of a project's versions.
+
+ A :class:`Version` instance is comparison aware and can be compared and
+ sorted using the standard Python interfaces.
+
+ >>> v1 = Version("1.0a5")
+ >>> v2 = Version("1.0")
+ >>> v1
+ <Version('1.0a5')>
+ >>> v2
+ <Version('1.0')>
+ >>> v1 < v2
+ True
+ >>> v1 == v2
+ False
+ >>> v1 > v2
+ False
+ >>> v1 >= v2
+ False
+ >>> v1 <= v2
+ True
+ """
_regex = re.compile(r"^\s*" + VERSION_PATTERN + r"\s*$", re.VERBOSE | re.IGNORECASE)
+ _key: CmpKey
def __init__(self, version: str) -> None:
+ """Initialize a Version object.
+
+ :param version:
+ The string representation of a version which will be parsed and normalized
+ before use.
+ :raises InvalidVersion:
+ If the ``version`` does not conform to PEP 440 in any way then this
+ exception will be raised.
+ """
# Validate the version and parse it into pieces
match = self._regex.search(version)
if not match:
- raise InvalidVersion(f"Invalid version: '{version}'")
+ raise InvalidVersion(f"Invalid version: {version!r}")
# Store the parsed out pieces of the version
self._version = _Version(
@@ -288,9 +224,19 @@ class Version(_BaseVersion):
)
def __repr__(self) -> str:
+ """A representation of the Version that shows all internal state.
+
+ >>> Version('1.0.0')
+ <Version('1.0.0')>
+ """
return f"<Version('{self}')>"
def __str__(self) -> str:
+ """A string representation of the version that can be round-tripped.
+
+ >>> str(Version("1.0a5"))
+ '1.0a5'
+ """
parts = []
# Epoch
@@ -320,29 +266,77 @@ class Version(_BaseVersion):
@property
def epoch(self) -> int:
- _epoch: int = self._version.epoch
- return _epoch
+ """The epoch of the version.
+
+ >>> Version("2.0.0").epoch
+ 0
+ >>> Version("1!2.0.0").epoch
+ 1
+ """
+ return self._version.epoch
@property
- def release(self) -> Tuple[int, ...]:
- _release: Tuple[int, ...] = self._version.release
- return _release
+ def release(self) -> tuple[int, ...]:
+ """The components of the "release" segment of the version.
+
+ >>> Version("1.2.3").release
+ (1, 2, 3)
+ >>> Version("2.0.0").release
+ (2, 0, 0)
+ >>> Version("1!2.0.0.post0").release
+ (2, 0, 0)
+
+ Includes trailing zeroes but not the epoch or any pre-release / development /
+ post-release suffixes.
+ """
+ return self._version.release
@property
- def pre(self) -> Optional[Tuple[str, int]]:
- _pre: Optional[Tuple[str, int]] = self._version.pre
- return _pre
+ def pre(self) -> tuple[str, int] | None:
+ """The pre-release segment of the version.
+
+ >>> print(Version("1.2.3").pre)
+ None
+ >>> Version("1.2.3a1").pre
+ ('a', 1)
+ >>> Version("1.2.3b1").pre
+ ('b', 1)
+ >>> Version("1.2.3rc1").pre
+ ('rc', 1)
+ """
+ return self._version.pre
@property
- def post(self) -> Optional[int]:
+ def post(self) -> int | None:
+ """The post-release number of the version.
+
+ >>> print(Version("1.2.3").post)
+ None
+ >>> Version("1.2.3.post1").post
+ 1
+ """
return self._version.post[1] if self._version.post else None
@property
- def dev(self) -> Optional[int]:
+ def dev(self) -> int | None:
+ """The development number of the version.
+
+ >>> print(Version("1.2.3").dev)
+ None
+ >>> Version("1.2.3.dev1").dev
+ 1
+ """
return self._version.dev[1] if self._version.dev else None
@property
- def local(self) -> Optional[str]:
+ def local(self) -> str | None:
+ """The local version segment of the version.
+
+ >>> print(Version("1.2.3").local)
+ None
+ >>> Version("1.2.3+abc").local
+ 'abc'
+ """
if self._version.local:
return ".".join(str(x) for x in self._version.local)
else:
@@ -350,10 +344,31 @@ class Version(_BaseVersion):
@property
def public(self) -> str:
+ """The public portion of the version.
+
+ >>> Version("1.2.3").public
+ '1.2.3'
+ >>> Version("1.2.3+abc").public
+ '1.2.3'
+ >>> Version("1!1.2.3dev1+abc").public
+ '1!1.2.3.dev1'
+ """
return str(self).split("+", 1)[0]
@property
def base_version(self) -> str:
+ """The "base version" of the version.
+
+ >>> Version("1.2.3").base_version
+ '1.2.3'
+ >>> Version("1.2.3+abc").base_version
+ '1.2.3'
+ >>> Version("1!1.2.3dev1+abc").base_version
+ '1!1.2.3'
+
+ The "base version" is the public version of the project without any pre or post
+ release markers.
+ """
parts = []
# Epoch
@@ -367,33 +382,95 @@ class Version(_BaseVersion):
@property
def is_prerelease(self) -> bool:
+ """Whether this version is a pre-release.
+
+ >>> Version("1.2.3").is_prerelease
+ False
+ >>> Version("1.2.3a1").is_prerelease
+ True
+ >>> Version("1.2.3b1").is_prerelease
+ True
+ >>> Version("1.2.3rc1").is_prerelease
+ True
+ >>> Version("1.2.3dev1").is_prerelease
+ True
+ """
return self.dev is not None or self.pre is not None
@property
def is_postrelease(self) -> bool:
+ """Whether this version is a post-release.
+
+ >>> Version("1.2.3").is_postrelease
+ False
+ >>> Version("1.2.3.post1").is_postrelease
+ True
+ """
return self.post is not None
@property
def is_devrelease(self) -> bool:
+ """Whether this version is a development release.
+
+ >>> Version("1.2.3").is_devrelease
+ False
+ >>> Version("1.2.3.dev1").is_devrelease
+ True
+ """
return self.dev is not None
@property
def major(self) -> int:
+ """The first item of :attr:`release` or ``0`` if unavailable.
+
+ >>> Version("1.2.3").major
+ 1
+ """
return self.release[0] if len(self.release) >= 1 else 0
@property
def minor(self) -> int:
+ """The second item of :attr:`release` or ``0`` if unavailable.
+
+ >>> Version("1.2.3").minor
+ 2
+ >>> Version("1").minor
+ 0
+ """
return self.release[1] if len(self.release) >= 2 else 0
@property
def micro(self) -> int:
+ """The third item of :attr:`release` or ``0`` if unavailable.
+
+ >>> Version("1.2.3").micro
+ 3
+ >>> Version("1").micro
+ 0
+ """
return self.release[2] if len(self.release) >= 3 else 0
-def _parse_letter_version(
- letter: str, number: Union[str, bytes, SupportsInt]
-) -> Optional[Tuple[str, int]]:
+class _TrimmedRelease(Version):
+ @property
+ def release(self) -> tuple[int, ...]:
+ """
+ Release segment without any trailing zeros.
+ >>> _TrimmedRelease('1.0.0').release
+ (1,)
+ >>> _TrimmedRelease('0.0').release
+ (0,)
+ """
+ rel = super().release
+ nonzeros = (index for index, val in enumerate(rel) if val)
+ last_nonzero = max(nonzeros, default=0)
+ return rel[: last_nonzero + 1]
+
+
+def _parse_letter_version(
+ letter: str | None, number: str | bytes | SupportsInt | None
+) -> tuple[str, int] | None:
if letter:
# We consider there to be an implicit 0 in a pre-release if there is
# not a numeral associated with it.
@@ -416,7 +493,9 @@ def _parse_letter_version(
letter = "post"
return letter, int(number)
- if not letter and number:
+
+ assert not letter
+ if number:
# We assume if we are given a number, but we are not given a letter
# then this is using the implicit post release syntax (e.g. 1.0-1)
letter = "post"
@@ -429,7 +508,7 @@ def _parse_letter_version(
_local_version_separators = re.compile(r"[\._-]")
-def _parse_local_version(local: str) -> Optional[LocalType]:
+def _parse_local_version(local: str | None) -> LocalType | None:
"""
Takes a string like abc.1.twelve and turns it into ("abc", 1, "twelve").
"""
@@ -443,13 +522,12 @@ def _parse_local_version(local: str) -> Optional[LocalType]:
def _cmpkey(
epoch: int,
- release: Tuple[int, ...],
- pre: Optional[Tuple[str, int]],
- post: Optional[Tuple[str, int]],
- dev: Optional[Tuple[str, int]],
- local: Optional[Tuple[SubLocalType]],
+ release: tuple[int, ...],
+ pre: tuple[str, int] | None,
+ post: tuple[str, int] | None,
+ dev: tuple[str, int] | None,
+ local: LocalType | None,
) -> CmpKey:
-
# When we compare a release version, we want to compare it with all of the
# trailing zeros removed. So we'll use a reverse the list, drop all the now
# leading zeros until we come to something non zero, then take the rest
@@ -464,7 +542,7 @@ def _cmpkey(
# if there is not a pre or a post segment. If we have one of those then
# the normal sorting rules will handle this case correctly.
if pre is None and post is None and dev is not None:
- _pre: PrePostDevType = NegativeInfinity
+ _pre: CmpPrePostDevType = NegativeInfinity
# Versions without a pre-release (except as noted above) should sort after
# those with one.
elif pre is None:
@@ -474,21 +552,21 @@ def _cmpkey(
# Versions without a post segment should sort before those with one.
if post is None:
- _post: PrePostDevType = NegativeInfinity
+ _post: CmpPrePostDevType = NegativeInfinity
else:
_post = post
# Versions without a development segment should sort after those with one.
if dev is None:
- _dev: PrePostDevType = Infinity
+ _dev: CmpPrePostDevType = Infinity
else:
_dev = dev
if local is None:
# Versions without a local segment should sort before those with one.
- _local: LocalType = NegativeInfinity
+ _local: CmpLocalType = NegativeInfinity
else:
# Versions with a local segment need that segment parsed to implement
# the sorting rules in PEP440.
diff --git a/contrib/python/packaging/py3/patches/01-support-setuptools-71.patch b/contrib/python/packaging/py3/patches/01-support-setuptools-71.patch
deleted file mode 100644
index b3855dadb84..00000000000
--- a/contrib/python/packaging/py3/patches/01-support-setuptools-71.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- contrib/python/packaging/py3/packaging/utils.py (index)
-+++ contrib/python/packaging/py3/packaging/utils.py (working tree)
-@@ -35,7 +35,7 @@ def canonicalize_name(name: str) -> NormalizedName:
- return cast(NormalizedName, value)
-
-
--def canonicalize_version(version: Union[Version, str]) -> str:
-+def canonicalize_version(version: Union[Version, str], strip_trailing_zero: bool = False) -> str:
- """
- This is very similar to Version.__str__, but has one subtle difference
- with the way it handles the release segment.
diff --git a/contrib/python/packaging/py3/ya.make b/contrib/python/packaging/py3/ya.make
index 059584b6684..aca7da38f48 100644
--- a/contrib/python/packaging/py3/ya.make
+++ b/contrib/python/packaging/py3/ya.make
@@ -2,24 +2,25 @@
PY3_LIBRARY()
-VERSION(21.3)
+VERSION(24.2)
LICENSE(BSD-2-Clause AND Apache-2.0)
-PEERDIR(
- contrib/python/pyparsing
-)
-
NO_LINT()
PY_SRCS(
TOP_LEVEL
- packaging/__about__.py
packaging/__init__.py
+ packaging/_elffile.py
packaging/_manylinux.py
packaging/_musllinux.py
+ packaging/_parser.py
packaging/_structures.py
+ packaging/_tokenizer.py
+ packaging/licenses/__init__.py
+ packaging/licenses/_spdx.py
packaging/markers.py
+ packaging/metadata.py
packaging/requirements.py
packaging/specifiers.py
packaging/tags.py
diff --git a/contrib/python/requests/py3/.dist-info/METADATA b/contrib/python/requests/py3/.dist-info/METADATA
index 05779fa29c1..72d9dc53138 100644
--- a/contrib/python/requests/py3/.dist-info/METADATA
+++ b/contrib/python/requests/py3/.dist-info/METADATA
@@ -1,14 +1,13 @@
Metadata-Version: 2.1
Name: requests
-Version: 2.31.0
+Version: 2.32.3
Summary: Python HTTP for Humans.
Home-page: https://requests.readthedocs.io
Author: Kenneth Reitz
Author-email: me@kennethreitz.org
-License: Apache 2.0
+License: Apache-2.0
Project-URL: Documentation, https://requests.readthedocs.io
Project-URL: Source, https://github.com/psf/requests
-Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
@@ -17,28 +16,28 @@ Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Software Development :: Libraries
-Requires-Python: >=3.7
+Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
-Requires-Dist: charset-normalizer (<4,>=2)
-Requires-Dist: idna (<4,>=2.5)
-Requires-Dist: urllib3 (<3,>=1.21.1)
-Requires-Dist: certifi (>=2017.4.17)
+Requires-Dist: charset-normalizer <4,>=2
+Requires-Dist: idna <4,>=2.5
+Requires-Dist: urllib3 <3,>=1.21.1
+Requires-Dist: certifi >=2017.4.17
Provides-Extra: security
Provides-Extra: socks
-Requires-Dist: PySocks (!=1.5.7,>=1.5.6) ; extra == 'socks'
+Requires-Dist: PySocks !=1.5.7,>=1.5.6 ; extra == 'socks'
Provides-Extra: use_chardet_on_py3
-Requires-Dist: chardet (<6,>=3.0.2) ; extra == 'use_chardet_on_py3'
+Requires-Dist: chardet <6,>=3.0.2 ; extra == 'use_chardet_on_py3'
# Requests
@@ -63,7 +62,7 @@ Requests allows you to send HTTP/1.1 requests extremely easily. There’s no nee
Requests is one of the most downloaded Python packages today, pulling in around `30M downloads / week`— according to GitHub, Requests is currently [depended upon](https://github.com/psf/requests/network/dependents?package_id=UGFja2FnZS01NzA4OTExNg%3D%3D) by `1,000,000+` repositories. You may certainly put your trust in this code.
-[![Downloads](https://pepy.tech/badge/requests/month)](https://pepy.tech/project/requests)
+[![Downloads](https://static.pepy.tech/badge/requests/month)](https://pepy.tech/project/requests)
[![Supported Versions](https://img.shields.io/pypi/pyversions/requests.svg)](https://pypi.org/project/requests)
[![Contributors](https://img.shields.io/github/contributors/psf/requests.svg)](https://github.com/psf/requests/graphs/contributors)
@@ -75,7 +74,7 @@ Requests is available on PyPI:
$ python -m pip install requests
```
-Requests officially supports Python 3.7+.
+Requests officially supports Python 3.8+.
## Supported Features & Best–Practices
@@ -118,5 +117,3 @@ git config --global fetch.fsck.badTimezone ignore
---
[![Kenneth Reitz](https://raw.githubusercontent.com/psf/requests/main/ext/kr.png)](https://kennethreitz.org) [![Python Software Foundation](https://raw.githubusercontent.com/psf/requests/main/ext/psf.png)](https://www.python.org/psf)
-
-
diff --git a/contrib/python/requests/py3/README.md b/contrib/python/requests/py3/README.md
index c90ef08a5e9..79cf54d1e15 100644
--- a/contrib/python/requests/py3/README.md
+++ b/contrib/python/requests/py3/README.md
@@ -21,7 +21,7 @@ Requests allows you to send HTTP/1.1 requests extremely easily. There’s no nee
Requests is one of the most downloaded Python packages today, pulling in around `30M downloads / week`— according to GitHub, Requests is currently [depended upon](https://github.com/psf/requests/network/dependents?package_id=UGFja2FnZS01NzA4OTExNg%3D%3D) by `1,000,000+` repositories. You may certainly put your trust in this code.
-[![Downloads](https://pepy.tech/badge/requests/month)](https://pepy.tech/project/requests)
+[![Downloads](https://static.pepy.tech/badge/requests/month)](https://pepy.tech/project/requests)
[![Supported Versions](https://img.shields.io/pypi/pyversions/requests.svg)](https://pypi.org/project/requests)
[![Contributors](https://img.shields.io/github/contributors/psf/requests.svg)](https://github.com/psf/requests/graphs/contributors)
@@ -33,7 +33,7 @@ Requests is available on PyPI:
$ python -m pip install requests
```
-Requests officially supports Python 3.7+.
+Requests officially supports Python 3.8+.
## Supported Features & Best–Practices
diff --git a/contrib/python/requests/py3/patches/01-arcadia.patch b/contrib/python/requests/py3/patches/01-arcadia.patch
index 30b2617ba91..999df2aaa6a 100644
--- a/contrib/python/requests/py3/patches/01-arcadia.patch
+++ b/contrib/python/requests/py3/patches/01-arcadia.patch
@@ -1,23 +1,11 @@
--- contrib/python/requests/py3/requests/adapters.py (index)
+++ contrib/python/requests/py3/requests/adapters.py (working tree)
-@@ -259,7 +259,7 @@ class HTTPAdapter(BaseAdapter):
- if not cert_loc:
- cert_loc = extract_zipped_paths(DEFAULT_CA_BUNDLE_PATH)
-
-- if not cert_loc or not os.path.exists(cert_loc):
-+ if not cert_loc or isinstance(cert_loc, basestring) and not os.path.exists(cert_loc):
- raise OSError(
- f"Could not find a suitable TLS CA certificate bundle, "
- f"invalid path: {cert_loc}"
-@@ -267,7 +267,7 @@ class HTTPAdapter(BaseAdapter):
-
- conn.cert_reqs = "CERT_REQUIRED"
-
-- if not os.path.isdir(cert_loc):
-+ if not isinstance(cert_loc, basestring) or not os.path.isdir(cert_loc):
- conn.ca_certs = cert_loc
- else:
- conn.ca_cert_dir = cert_loc
+@@ -259,1 +259,1 @@ class HTTPAdapter(BaseAdapter):
+- if not os.path.exists(cert_loc):
++ if isinstance(cert_loc, str) and not os.path.exists(cert_loc):
+@@ -267,1 +267,1 @@ class HTTPAdapter(BaseAdapter):
+- if not os.path.isdir(cert_loc):
++ if not isinstance(cert_loc, str) or not os.path.isdir(cert_loc):
--- contrib/python/requests/py3/requests/utils.py (index)
+++ contrib/python/requests/py3/requests/utils.py (working tree)
@@ -260,7 +260,7 @@ def extract_zipped_paths(path):
diff --git a/contrib/python/requests/py3/patches/02-hack-for-gevent.patch b/contrib/python/requests/py3/patches/02-hack-for-gevent.patch
new file mode 100644
index 00000000000..b7eea5be8bc
--- /dev/null
+++ b/contrib/python/requests/py3/patches/02-hack-for-gevent.patch
@@ -0,0 +1,12 @@
+--- contrib/python/requests/py3/requests/adapters.py (index)
++++ contrib/python/requests/py3/requests/adapters.py (working tree)
+@@ -76,7 +76,8 @@ DEFAULT_POOL_TIMEOUT = None
+
+ try:
+ import ssl # noqa: F401
+-
++ import urllib3.util.ssl_
++ urllib3.util.ssl_.SSLContext = ssl.SSLContext
+ _preloaded_ssl_context = create_urllib3_context()
+ _preloaded_ssl_context.load_verify_locations(
+ extract_zipped_paths(DEFAULT_CA_BUNDLE_PATH)
diff --git a/contrib/python/requests/py3/requests/__init__.py b/contrib/python/requests/py3/requests/__init__.py
index 300a16c5741..051cda1340e 100644
--- a/contrib/python/requests/py3/requests/__init__.py
+++ b/contrib/python/requests/py3/requests/__init__.py
@@ -83,7 +83,11 @@ def check_compatibility(urllib3_version, chardet_version, charset_normalizer_ver
# charset_normalizer >= 2.0.0 < 4.0.0
assert (2, 0, 0) <= (major, minor, patch) < (4, 0, 0)
else:
- raise Exception("You need either charset_normalizer or chardet installed")
+ warnings.warn(
+ "Unable to find acceptable character detection dependency "
+ "(chardet or charset_normalizer).",
+ RequestsDependencyWarning,
+ )
def _check_cryptography(cryptography_version):
diff --git a/contrib/python/requests/py3/requests/__version__.py b/contrib/python/requests/py3/requests/__version__.py
index 5063c3f8ee7..2c105aca7d4 100644
--- a/contrib/python/requests/py3/requests/__version__.py
+++ b/contrib/python/requests/py3/requests/__version__.py
@@ -5,10 +5,10 @@
__title__ = "requests"
__description__ = "Python HTTP for Humans."
__url__ = "https://requests.readthedocs.io"
-__version__ = "2.31.0"
-__build__ = 0x023100
+__version__ = "2.32.3"
+__build__ = 0x023203
__author__ = "Kenneth Reitz"
__author_email__ = "me@kennethreitz.org"
-__license__ = "Apache 2.0"
+__license__ = "Apache-2.0"
__copyright__ = "Copyright Kenneth Reitz"
__cake__ = "\u2728 \U0001f370 \u2728"
diff --git a/contrib/python/requests/py3/requests/adapters.py b/contrib/python/requests/py3/requests/adapters.py
index 25c6e5c51bf..9a8efc786cf 100644
--- a/contrib/python/requests/py3/requests/adapters.py
+++ b/contrib/python/requests/py3/requests/adapters.py
@@ -8,6 +8,8 @@ and maintain connections.
import os.path
import socket # noqa: F401
+import typing
+import warnings
from urllib3.exceptions import ClosedPoolError, ConnectTimeoutError
from urllib3.exceptions import HTTPError as _HTTPError
@@ -25,6 +27,7 @@ from urllib3.poolmanager import PoolManager, proxy_from_url
from urllib3.util import Timeout as TimeoutSauce
from urllib3.util import parse_url
from urllib3.util.retry import Retry
+from urllib3.util.ssl_ import create_urllib3_context
from .auth import _basic_auth_str
from .compat import basestring, urlparse
@@ -61,12 +64,77 @@ except ImportError:
raise InvalidSchema("Missing dependencies for SOCKS support.")
+if typing.TYPE_CHECKING:
+ from .models import PreparedRequest
+
+
DEFAULT_POOLBLOCK = False
DEFAULT_POOLSIZE = 10
DEFAULT_RETRIES = 0
DEFAULT_POOL_TIMEOUT = None
+try:
+ import ssl # noqa: F401
+ import urllib3.util.ssl_
+ urllib3.util.ssl_.SSLContext = ssl.SSLContext
+ _preloaded_ssl_context = create_urllib3_context()
+ _preloaded_ssl_context.load_verify_locations(
+ extract_zipped_paths(DEFAULT_CA_BUNDLE_PATH)
+ )
+except ImportError:
+ # Bypass default SSLContext creation when Python
+ # interpreter isn't built with the ssl module.
+ _preloaded_ssl_context = None
+
+
+def _urllib3_request_context(
+ request: "PreparedRequest",
+ verify: "bool | str | None",
+ client_cert: "typing.Tuple[str, str] | str | None",
+ poolmanager: "PoolManager",
+) -> "(typing.Dict[str, typing.Any], typing.Dict[str, typing.Any])":
+ host_params = {}
+ pool_kwargs = {}
+ parsed_request_url = urlparse(request.url)
+ scheme = parsed_request_url.scheme.lower()
+ port = parsed_request_url.port
+
+ # Determine if we have and should use our default SSLContext
+ # to optimize performance on standard requests.
+ poolmanager_kwargs = getattr(poolmanager, "connection_pool_kw", {})
+ has_poolmanager_ssl_context = poolmanager_kwargs.get("ssl_context")
+ should_use_default_ssl_context = (
+ _preloaded_ssl_context is not None and not has_poolmanager_ssl_context
+ )
+
+ cert_reqs = "CERT_REQUIRED"
+ if verify is False:
+ cert_reqs = "CERT_NONE"
+ elif verify is True and should_use_default_ssl_context:
+ pool_kwargs["ssl_context"] = _preloaded_ssl_context
+ elif isinstance(verify, str):
+ if not os.path.isdir(verify):
+ pool_kwargs["ca_certs"] = verify
+ else:
+ pool_kwargs["ca_cert_dir"] = verify
+ pool_kwargs["cert_reqs"] = cert_reqs
+ if client_cert is not None:
+ if isinstance(client_cert, tuple) and len(client_cert) == 2:
+ pool_kwargs["cert_file"] = client_cert[0]
+ pool_kwargs["key_file"] = client_cert[1]
+ else:
+ # According to our docs, we allow users to specify just the client
+ # cert path
+ pool_kwargs["cert_file"] = client_cert
+ host_params = {
+ "scheme": scheme,
+ "host": parsed_request_url.hostname,
+ "port": port,
+ }
+ return host_params, pool_kwargs
+
+
class BaseAdapter:
"""The Base Transport Adapter"""
@@ -247,28 +315,26 @@ class HTTPAdapter(BaseAdapter):
:param cert: The SSL certificate to verify.
"""
if url.lower().startswith("https") and verify:
+ conn.cert_reqs = "CERT_REQUIRED"
- cert_loc = None
-
- # Allow self-specified cert location.
+ # Only load the CA certificates if 'verify' is a string indicating the CA bundle to use.
+ # Otherwise, if verify is a boolean, we don't load anything since
+ # the connection will be using a context with the default certificates already loaded,
+ # and this avoids a call to the slow load_verify_locations()
if verify is not True:
+ # `verify` must be a str with a path then
cert_loc = verify
- if not cert_loc:
- cert_loc = extract_zipped_paths(DEFAULT_CA_BUNDLE_PATH)
+ if isinstance(cert_loc, str) and not os.path.exists(cert_loc):
+ raise OSError(
+ f"Could not find a suitable TLS CA certificate bundle, "
+ f"invalid path: {cert_loc}"
+ )
- if not cert_loc or isinstance(cert_loc, basestring) and not os.path.exists(cert_loc):
- raise OSError(
- f"Could not find a suitable TLS CA certificate bundle, "
- f"invalid path: {cert_loc}"
- )
-
- conn.cert_reqs = "CERT_REQUIRED"
-
- if not isinstance(cert_loc, basestring) or not os.path.isdir(cert_loc):
- conn.ca_certs = cert_loc
- else:
- conn.ca_cert_dir = cert_loc
+ if not isinstance(cert_loc, str) or not os.path.isdir(cert_loc):
+ conn.ca_certs = cert_loc
+ else:
+ conn.ca_cert_dir = cert_loc
else:
conn.cert_reqs = "CERT_NONE"
conn.ca_certs = None
@@ -328,8 +394,110 @@ class HTTPAdapter(BaseAdapter):
return response
+ def build_connection_pool_key_attributes(self, request, verify, cert=None):
+ """Build the PoolKey attributes used by urllib3 to return a connection.
+
+ This looks at the PreparedRequest, the user-specified verify value,
+ and the value of the cert parameter to determine what PoolKey values
+ to use to select a connection from a given urllib3 Connection Pool.
+
+ The SSL related pool key arguments are not consistently set. As of
+ this writing, use the following to determine what keys may be in that
+ dictionary:
+
+ * If ``verify`` is ``True``, ``"ssl_context"`` will be set and will be the
+ default Requests SSL Context
+ * If ``verify`` is ``False``, ``"ssl_context"`` will not be set but
+ ``"cert_reqs"`` will be set
+ * If ``verify`` is a string, (i.e., it is a user-specified trust bundle)
+ ``"ca_certs"`` will be set if the string is not a directory recognized
+ by :py:func:`os.path.isdir`, otherwise ``"ca_certs_dir"`` will be
+ set.
+ * If ``"cert"`` is specified, ``"cert_file"`` will always be set. If
+ ``"cert"`` is a tuple with a second item, ``"key_file"`` will also
+ be present
+
+ To override these settings, one may subclass this class, call this
+ method and use the above logic to change parameters as desired. For
+ example, if one wishes to use a custom :py:class:`ssl.SSLContext` one
+ must both set ``"ssl_context"`` and based on what else they require,
+ alter the other keys to ensure the desired behaviour.
+
+ :param request:
+ The PreparedReqest being sent over the connection.
+ :type request:
+ :class:`~requests.models.PreparedRequest`
+ :param verify:
+ Either a boolean, in which case it controls whether
+ we verify the server's TLS certificate, or a string, in which case it
+ must be a path to a CA bundle to use.
+ :param cert:
+ (optional) Any user-provided SSL certificate for client
+ authentication (a.k.a., mTLS). This may be a string (i.e., just
+ the path to a file which holds both certificate and key) or a
+ tuple of length 2 with the certificate file path and key file
+ path.
+ :returns:
+ A tuple of two dictionaries. The first is the "host parameters"
+ portion of the Pool Key including scheme, hostname, and port. The
+ second is a dictionary of SSLContext related parameters.
+ """
+ return _urllib3_request_context(request, verify, cert, self.poolmanager)
+
+ def get_connection_with_tls_context(self, request, verify, proxies=None, cert=None):
+ """Returns a urllib3 connection for the given request and TLS settings.
+ This should not be called from user code, and is only exposed for use
+ when subclassing the :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`.
+
+ :param request:
+ The :class:`PreparedRequest <PreparedRequest>` object to be sent
+ over the connection.
+ :param verify:
+ Either a boolean, in which case it controls whether we verify the
+ server's TLS certificate, or a string, in which case it must be a
+ path to a CA bundle to use.
+ :param proxies:
+ (optional) The proxies dictionary to apply to the request.
+ :param cert:
+ (optional) Any user-provided SSL certificate to be used for client
+ authentication (a.k.a., mTLS).
+ :rtype:
+ urllib3.ConnectionPool
+ """
+ proxy = select_proxy(request.url, proxies)
+ try:
+ host_params, pool_kwargs = self.build_connection_pool_key_attributes(
+ request,
+ verify,
+ cert,
+ )
+ except ValueError as e:
+ raise InvalidURL(e, request=request)
+ if proxy:
+ proxy = prepend_scheme_if_needed(proxy, "http")
+ proxy_url = parse_url(proxy)
+ if not proxy_url.host:
+ raise InvalidProxyURL(
+ "Please check proxy URL. It is malformed "
+ "and could be missing the host."
+ )
+ proxy_manager = self.proxy_manager_for(proxy)
+ conn = proxy_manager.connection_from_host(
+ **host_params, pool_kwargs=pool_kwargs
+ )
+ else:
+ # Only scheme should be lower case
+ conn = self.poolmanager.connection_from_host(
+ **host_params, pool_kwargs=pool_kwargs
+ )
+
+ return conn
+
def get_connection(self, url, proxies=None):
- """Returns a urllib3 connection for the given URL. This should not be
+ """DEPRECATED: Users should move to `get_connection_with_tls_context`
+ for all subclasses of HTTPAdapter using Requests>=2.32.2.
+
+ Returns a urllib3 connection for the given URL. This should not be
called from user code, and is only exposed for use when subclassing the
:class:`HTTPAdapter <requests.adapters.HTTPAdapter>`.
@@ -337,6 +505,15 @@ class HTTPAdapter(BaseAdapter):
:param proxies: (optional) A Requests-style dictionary of proxies used on this request.
:rtype: urllib3.ConnectionPool
"""
+ warnings.warn(
+ (
+ "`get_connection` has been deprecated in favor of "
+ "`get_connection_with_tls_context`. Custom HTTPAdapter subclasses "
+ "will need to migrate for Requests>=2.32.2. Please see "
+ "https://github.com/psf/requests/pull/6710 for more details."
+ ),
+ DeprecationWarning,
+ )
proxy = select_proxy(url, proxies)
if proxy:
@@ -391,6 +568,9 @@ class HTTPAdapter(BaseAdapter):
using_socks_proxy = proxy_scheme.startswith("socks")
url = request.path_url
+ if url.startswith("//"): # Don't confuse urllib3
+ url = f"/{url.lstrip('/')}"
+
if is_proxied_http_request and not using_socks_proxy:
url = urldefragauth(request.url)
@@ -451,7 +631,9 @@ class HTTPAdapter(BaseAdapter):
"""
try:
- conn = self.get_connection(request.url, proxies)
+ conn = self.get_connection_with_tls_context(
+ request, verify, proxies=proxies, cert=cert
+ )
except LocationValueError as e:
raise InvalidURL(e, request=request)
diff --git a/contrib/python/requests/py3/requests/api.py b/contrib/python/requests/py3/requests/api.py
index cd0b3eeac3e..5960744552e 100644
--- a/contrib/python/requests/py3/requests/api.py
+++ b/contrib/python/requests/py3/requests/api.py
@@ -25,7 +25,7 @@ def request(method, url, **kwargs):
:param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`.
:param files: (optional) Dictionary of ``'name': file-like-objects`` (or ``{'name': file-tuple}``) for multipart encoding upload.
``file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')``
- or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content-type'`` is a string
+ or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content_type'`` is a string
defining the content type of the given file and ``custom_headers`` a dict-like object containing additional headers
to add for the file.
:param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth.
diff --git a/contrib/python/requests/py3/requests/auth.py b/contrib/python/requests/py3/requests/auth.py
index 9733686ddb3..4a7ce6dc146 100644
--- a/contrib/python/requests/py3/requests/auth.py
+++ b/contrib/python/requests/py3/requests/auth.py
@@ -258,7 +258,6 @@ class HTTPDigestAuth(AuthBase):
s_auth = r.headers.get("www-authenticate", "")
if "digest" in s_auth.lower() and self._thread_local.num_401_calls < 2:
-
self._thread_local.num_401_calls += 1
pat = re.compile(r"digest ", flags=re.IGNORECASE)
self._thread_local.chal = parse_dict_header(pat.sub("", s_auth, count=1))
diff --git a/contrib/python/requests/py3/requests/compat.py b/contrib/python/requests/py3/requests/compat.py
index 6776163c94f..095de1b6cae 100644
--- a/contrib/python/requests/py3/requests/compat.py
+++ b/contrib/python/requests/py3/requests/compat.py
@@ -7,13 +7,28 @@ between Python 2 and Python 3. It remains for backwards
compatibility until the next major version.
"""
-try:
- import chardet
-except ImportError:
- import charset_normalizer as chardet
-
+import importlib
import sys
+# -------------------
+# Character Detection
+# -------------------
+
+
+def _resolve_char_detection():
+ """Find supported character detection libraries."""
+ chardet = None
+ for lib in ("chardet", "charset_normalizer"):
+ if chardet is None:
+ try:
+ chardet = importlib.import_module(lib)
+ except ImportError:
+ pass
+ return chardet
+
+
+chardet = _resolve_char_detection()
+
# -------
# Pythons
# -------
diff --git a/contrib/python/requests/py3/requests/cookies.py b/contrib/python/requests/py3/requests/cookies.py
index bf54ab237e4..f69d0cda9e1 100644
--- a/contrib/python/requests/py3/requests/cookies.py
+++ b/contrib/python/requests/py3/requests/cookies.py
@@ -2,7 +2,7 @@
requests.cookies
~~~~~~~~~~~~~~~~
-Compatibility code to be able to use `cookielib.CookieJar` with requests.
+Compatibility code to be able to use `http.cookiejar.CookieJar` with requests.
requests.utils imports from here, so be careful with imports.
"""
@@ -23,7 +23,7 @@ except ImportError:
class MockRequest:
"""Wraps a `requests.Request` to mimic a `urllib2.Request`.
- The code in `cookielib.CookieJar` expects this interface in order to correctly
+ The code in `http.cookiejar.CookieJar` expects this interface in order to correctly
manage cookie policies, i.e., determine whether a cookie can be set, given the
domains of the request and the cookie.
@@ -76,7 +76,7 @@ class MockRequest:
return self._r.headers.get(name, self._new_headers.get(name, default))
def add_header(self, key, val):
- """cookielib has no legitimate use for this method; add it back if you find one."""
+ """cookiejar has no legitimate use for this method; add it back if you find one."""
raise NotImplementedError(
"Cookie headers should be added with add_unredirected_header()"
)
@@ -104,11 +104,11 @@ class MockResponse:
"""Wraps a `httplib.HTTPMessage` to mimic a `urllib.addinfourl`.
...what? Basically, expose the parsed HTTP headers from the server response
- the way `cookielib` expects to see them.
+ the way `http.cookiejar` expects to see them.
"""
def __init__(self, headers):
- """Make a MockResponse for `cookielib` to read.
+ """Make a MockResponse for `cookiejar` to read.
:param headers: a httplib.HTTPMessage or analogous carrying the headers
"""
@@ -124,7 +124,7 @@ class MockResponse:
def extract_cookies_to_jar(jar, request, response):
"""Extract the cookies from the response into a CookieJar.
- :param jar: cookielib.CookieJar (not necessarily a RequestsCookieJar)
+ :param jar: http.cookiejar.CookieJar (not necessarily a RequestsCookieJar)
:param request: our own requests.Request object
:param response: urllib3.HTTPResponse object
"""
@@ -174,7 +174,7 @@ class CookieConflictError(RuntimeError):
class RequestsCookieJar(cookielib.CookieJar, MutableMapping):
- """Compatibility class; is a cookielib.CookieJar, but exposes a dict
+ """Compatibility class; is a http.cookiejar.CookieJar, but exposes a dict
interface.
This is the CookieJar we create by default for requests and sessions that
@@ -341,7 +341,7 @@ class RequestsCookieJar(cookielib.CookieJar, MutableMapping):
self.set(name, value)
def __delitem__(self, name):
- """Deletes a cookie given a name. Wraps ``cookielib.CookieJar``'s
+ """Deletes a cookie given a name. Wraps ``http.cookiejar.CookieJar``'s
``remove_cookie_by_name()``.
"""
remove_cookie_by_name(self, name)
diff --git a/contrib/python/requests/py3/requests/exceptions.py b/contrib/python/requests/py3/requests/exceptions.py
index e1cedf883d3..83986b48984 100644
--- a/contrib/python/requests/py3/requests/exceptions.py
+++ b/contrib/python/requests/py3/requests/exceptions.py
@@ -41,6 +41,16 @@ class JSONDecodeError(InvalidJSONError, CompatJSONDecodeError):
CompatJSONDecodeError.__init__(self, *args)
InvalidJSONError.__init__(self, *self.args, **kwargs)
+ def __reduce__(self):
+ """
+ The __reduce__ method called when pickling the object must
+ be the one from the JSONDecodeError (be it json/simplejson)
+ as it expects all the arguments for instantiation, not just
+ one like the IOError, and the MRO would by default call the
+ __reduce__ method from the IOError due to the inheritance order.
+ """
+ return CompatJSONDecodeError.__reduce__(self)
+
class HTTPError(RequestException):
"""An HTTP error occurred."""
diff --git a/contrib/python/requests/py3/requests/models.py b/contrib/python/requests/py3/requests/models.py
index 617a4134e55..8f56ca7d23a 100644
--- a/contrib/python/requests/py3/requests/models.py
+++ b/contrib/python/requests/py3/requests/models.py
@@ -170,7 +170,7 @@ class RequestEncodingMixin:
)
)
- for (k, v) in files:
+ for k, v in files:
# support for explicit filename
ft = None
fh = None
@@ -268,7 +268,6 @@ class Request(RequestHooksMixin):
hooks=None,
json=None,
):
-
# Default empty dicts for dict params.
data = [] if data is None else data
files = [] if files is None else files
@@ -277,7 +276,7 @@ class Request(RequestHooksMixin):
hooks = {} if hooks is None else hooks
self.hooks = default_hooks()
- for (k, v) in list(hooks.items()):
+ for k, v in list(hooks.items()):
self.register_hook(event=k, hook=v)
self.method = method
@@ -790,7 +789,12 @@ class Response:
@property
def apparent_encoding(self):
"""The apparent encoding, provided by the charset_normalizer or chardet libraries."""
- return chardet.detect(self.content)["encoding"]
+ if chardet is not None:
+ return chardet.detect(self.content)["encoding"]
+ else:
+ # If no character detection library is available, we'll fall back
+ # to a standard Python utf-8 str.
+ return "utf-8"
def iter_content(self, chunk_size=1, decode_unicode=False):
"""Iterates over the response data. When stream=True is set on the
@@ -865,7 +869,6 @@ class Response:
for chunk in self.iter_content(
chunk_size=chunk_size, decode_unicode=decode_unicode
):
-
if pending is not None:
chunk = pending + chunk
diff --git a/contrib/python/requests/py3/requests/packages.py b/contrib/python/requests/py3/requests/packages.py
index 77c45c9e90c..5ab3d8e250d 100644
--- a/contrib/python/requests/py3/requests/packages.py
+++ b/contrib/python/requests/py3/requests/packages.py
@@ -1,13 +1,6 @@
import sys
-try:
- import chardet
-except ImportError:
- import warnings
-
- import charset_normalizer as chardet
-
- warnings.filterwarnings("ignore", "Trying to detect", module="charset_normalizer")
+from .compat import chardet
# This code exists for backwards compatibility reasons.
# I don't like it either. Just look the other way. :)
@@ -20,9 +13,11 @@ for package in ("urllib3", "idna"):
if mod == package or mod.startswith(f"{package}."):
sys.modules[f"requests.packages.{mod}"] = sys.modules[mod]
-target = chardet.__name__
-for mod in list(sys.modules):
- if mod == target or mod.startswith(f"{target}."):
- target = target.replace(target, "chardet")
- sys.modules[f"requests.packages.{target}"] = sys.modules[mod]
-# Kinda cool, though, right?
+if chardet is not None:
+ target = chardet.__name__
+ for mod in list(sys.modules):
+ if mod == target or mod.startswith(f"{target}."):
+ imported_mod = sys.modules[mod]
+ sys.modules[f"requests.packages.{mod}"] = imported_mod
+ mod = mod.replace(target, "chardet")
+ sys.modules[f"requests.packages.{mod}"] = imported_mod
diff --git a/contrib/python/requests/py3/requests/sessions.py b/contrib/python/requests/py3/requests/sessions.py
index dbcf2a7b0ee..b387bc36df7 100644
--- a/contrib/python/requests/py3/requests/sessions.py
+++ b/contrib/python/requests/py3/requests/sessions.py
@@ -262,7 +262,6 @@ class SessionRedirectMixin:
if yield_requests:
yield req
else:
-
resp = self.send(
req,
stream=stream,
@@ -326,7 +325,7 @@ class SessionRedirectMixin:
# urllib3 handles proxy authorization for us in the standard adapter.
# Avoid appending this to TLS tunneled requests where it may be leaked.
- if not scheme.startswith('https') and username and password:
+ if not scheme.startswith("https") and username and password:
headers["Proxy-Authorization"] = _basic_auth_str(username, password)
return new_proxies
@@ -389,7 +388,6 @@ class Session(SessionRedirectMixin):
]
def __init__(self):
-
#: A case-insensitive dictionary of headers to be sent on each
#: :class:`Request <Request>` sent from this
#: :class:`Session <Session>`.
@@ -545,6 +543,8 @@ class Session(SessionRedirectMixin):
:type allow_redirects: bool
:param proxies: (optional) Dictionary mapping protocol or protocol and
hostname to the URL of the proxy.
+ :param hooks: (optional) Dictionary mapping hook name to one event or
+ list of events, event must be callable.
:param stream: (optional) whether to immediately download the response
content. Defaults to ``False``.
:param verify: (optional) Either a boolean, in which case it controls whether we verify
@@ -711,7 +711,6 @@ class Session(SessionRedirectMixin):
# Persist cookies
if r.history:
-
# If the hooks create history then we want those cookies too
for resp in r.history:
extract_cookies_to_jar(self.cookies, resp.request, resp.raw)
@@ -759,7 +758,7 @@ class Session(SessionRedirectMixin):
# Set environment's proxies.
no_proxy = proxies.get("no_proxy") if proxies is not None else None
env_proxies = get_environ_proxies(url, no_proxy=no_proxy)
- for (k, v) in env_proxies.items():
+ for k, v in env_proxies.items():
proxies.setdefault(k, v)
# Look for requests environment configuration
@@ -785,8 +784,7 @@ class Session(SessionRedirectMixin):
:rtype: requests.adapters.BaseAdapter
"""
- for (prefix, adapter) in self.adapters.items():
-
+ for prefix, adapter in self.adapters.items():
if url.lower().startswith(prefix.lower()):
return adapter
diff --git a/contrib/python/requests/py3/requests/status_codes.py b/contrib/python/requests/py3/requests/status_codes.py
index 4bd072be976..c7945a2f068 100644
--- a/contrib/python/requests/py3/requests/status_codes.py
+++ b/contrib/python/requests/py3/requests/status_codes.py
@@ -24,7 +24,7 @@ _codes = {
# Informational.
100: ("continue",),
101: ("switching_protocols",),
- 102: ("processing",),
+ 102: ("processing", "early-hints"),
103: ("checkpoint",),
122: ("uri_too_long", "request_uri_too_long"),
200: ("ok", "okay", "all_ok", "all_okay", "all_good", "\\o/", "✓"),
@@ -65,8 +65,8 @@ _codes = {
410: ("gone",),
411: ("length_required",),
412: ("precondition_failed", "precondition"),
- 413: ("request_entity_too_large",),
- 414: ("request_uri_too_large",),
+ 413: ("request_entity_too_large", "content_too_large"),
+ 414: ("request_uri_too_large", "uri_too_long"),
415: ("unsupported_media_type", "unsupported_media", "media_type"),
416: (
"requested_range_not_satisfiable",
@@ -76,10 +76,10 @@ _codes = {
417: ("expectation_failed",),
418: ("im_a_teapot", "teapot", "i_am_a_teapot"),
421: ("misdirected_request",),
- 422: ("unprocessable_entity", "unprocessable"),
+ 422: ("unprocessable_entity", "unprocessable", "unprocessable_content"),
423: ("locked",),
424: ("failed_dependency", "dependency"),
- 425: ("unordered_collection", "unordered"),
+ 425: ("unordered_collection", "unordered", "too_early"),
426: ("upgrade_required", "upgrade"),
428: ("precondition_required", "precondition"),
429: ("too_many_requests", "too_many"),
diff --git a/contrib/python/requests/py3/requests/utils.py b/contrib/python/requests/py3/requests/utils.py
index 7e0e3184dc7..993efce108a 100644
--- a/contrib/python/requests/py3/requests/utils.py
+++ b/contrib/python/requests/py3/requests/utils.py
@@ -97,6 +97,8 @@ if sys.platform == "win32":
# '<local>' string by the localhost entry and the corresponding
# canonical entry.
proxyOverride = proxyOverride.split(";")
+ # filter out empty strings to avoid re.match return true in the following code.
+ proxyOverride = filter(None, proxyOverride)
# now check if we match one of the registry values.
for test in proxyOverride:
if test == "<local>":
@@ -134,6 +136,9 @@ def super_len(o):
total_length = None
current_position = 0
+ if isinstance(o, str):
+ o = o.encode("utf-8")
+
if hasattr(o, "__len__"):
total_length = len(o)
@@ -466,11 +471,7 @@ def dict_from_cookiejar(cj):
:rtype: dict
"""
- cookie_dict = {}
-
- for cookie in cj:
- cookie_dict[cookie.name] = cookie.value
-
+ cookie_dict = {cookie.name: cookie.value for cookie in cj}
return cookie_dict
@@ -767,6 +768,7 @@ def should_bypass_proxies(url, no_proxy):
:rtype: bool
"""
+
# Prioritize lowercase environment variables over uppercase
# to keep a consistent behaviour with other http projects (curl, wget).
def get_proxy(key):
@@ -862,7 +864,7 @@ def select_proxy(url, proxies):
def resolve_proxies(request, proxies, trust_env=True):
"""This method takes proxy information from a request and configuration
input to resolve a mapping of target proxies. This will consider settings
- such a NO_PROXY to strip proxy configurations.
+ such as NO_PROXY to strip proxy configurations.
:param request: Request or PreparedRequest
:param proxies: A dictionary of schemes or schemes and hosts to proxy URLs
@@ -1054,7 +1056,7 @@ def _validate_header_part(header, header_part, header_validator_index):
if not validator.match(header_part):
header_kind = "name" if header_validator_index == 0 else "value"
raise InvalidHeader(
- f"Invalid leading whitespace, reserved character(s), or return"
+ f"Invalid leading whitespace, reserved character(s), or return "
f"character(s) in header {header_kind}: {header_part!r}"
)
diff --git a/contrib/python/requests/py3/ya.make b/contrib/python/requests/py3/ya.make
index 50a6f84bdc0..81ad2efcc41 100644
--- a/contrib/python/requests/py3/ya.make
+++ b/contrib/python/requests/py3/ya.make
@@ -2,7 +2,7 @@
PY3_LIBRARY()
-VERSION(2.31.0)
+VERSION(2.32.3)
LICENSE(Apache-2.0)